4.7 KiB
4.7 KiB
社区站点适配(community)
面板内置的站点写在 src/sites/*.js 里;这份目录放的是社区贡献的站点适配 ——
一份 JSON 描述「怎么给这个网站签到」,任何人导入后就能用,不用改代码、不用重新部署。
一句话:你调通一个网站,导出一段 JSON 发出来,别人就多一个能签的站。
目录结构
community/
├── README.md ← 你在看的这份
├── index.json ← 已收录配置的索引(面板「导入」框可以吃这里的 raw 链接)
└── sites/
├── _template.json ← 模板:照着填就能做一个新站点
├── simple-api-signin.json ← 示例:单次 GET/POST 签到
└── discuz-signin-template.json ← 示例:两步(先取 formhash,再提交)
怎么用(使用者)
- 打开面板 → 账号页 → 🌍 社区站点(开源共享) 卡片
- 把
community/sites/xxx.json的 raw 链接粘到「或:配置的原始链接」输入框 → 🔎 校验预览(先看清它是什么、要填什么)→ ⬇️ 导入 - 回到「添加账号」,站点下拉里会多出这个站(带 🌍 社区 标记)→ 填 Cookie 保存即可
也可以直接把 JSON 全文粘进那个文本框导入。
怎么贡献(作者)
- 在自己的面板里 添加账号 → 站点选「自定义 HTTP」→ 多步录制:把你人工签到的过程 (F12 网络面板里「复制为 cURL」)一步步录进去,点「测试运行」确认能跑通
- 回到 🌍 社区站点 卡片 → 右侧「导出我的配置」→ 选这个账号 → 📤 导出为社区配置
- 面板会自动把真实 Cookie / token 换成
{{cookie}}这样的占位符 - 同时把
https://你的站点域名/xxx换成{{site_url}}/xxx,别人换成自己的域名也能用
- 面板会自动把真实 Cookie / token 换成
- 把导出的 JSON 放进这个目录(或直接开 Issue 贴出来),并更新
index.json - 开 PR。CI(
node tools/verify.mjs)会跑校验,test/community.test.mjs里有针对配置的安全断言
硬性要求(PR 会被打回的情形)
| 要求 | 说明 |
|---|---|
| 不能带任何凭据 | Cookie / token / 密码 / 密钥一律用 {{占位符}}。校验器会拦下明文凭据 |
id 用站点域名 |
例如 bbs_example_com(2–40 位字母数字下划线短横线),避免和内置站点撞名 |
至少一个 steps |
配置就得能真的发出请求 |
建议写 expect_status / expect_contains |
不写就只能靠通用信号识别判成败 |
execution 注明 |
站点屏蔽机房 IP(WAF 403、要 IPv6)→ 写 "browser"(= 本地网络,需扩展在线) |
配置字段速查
{
"schema": "daily-checkin-site/1", // 固定值
"id": "bbs_example_com", // 内码,唯一
"name": "示例论坛", // 面板里显示的名字
"desc": "每天签到领积分",
"author": "你的 GitHub ID",
"version": "1.0.0",
"domain": "bbs.example.com", // 扩展按它匹配域名(可留空)
"execution": "server", // server = CF 网络;browser = 本地网络(需扩展在线)
"fields": [ // 用户添加账号时要填的东西
{ "key": "site_url", "label": "站点地址", "type": "text", "required": true, "placeholder": "https://bbs.example.com" },
{ "key": "cookie", "label": "Cookie", "type": "textarea", "required": true },
{ "key": "user_agent","label": "User-Agent","type": "text", "required": false }
],
"steps": [ // 按顺序执行;后一步能用前一步提取的变量
{
"name": "签到",
"method": "POST",
"url": "{{site_url}}/api/sign",
"headers": { "Cookie": "{{cookie}}", "User-Agent": "{{user_agent}}" },
"body": "a=1&b=2",
"extract": { "token": "data.token" }, // 从 JSON 响应按点路径取值
"expect_status": 200,
"expect_contains": "成功"
}
],
"tips": "登录后用浏览器扩展「一键复制全部信息」,回面板 Ctrl+V 粘贴即自动保存。"
}
- 变量:
{{site_url}}{{cookie}}{{user_agent}}来自用户填的fields;{{token}}这类来自前面步骤的extract。 - 请求头 / 请求体写对象或字符串都行(对象更适合手写,导出的是字符串形式)。
execution: "browser"的站点,请求会经用户的浏览器扩展发出(躲开机房 IP 封禁与人机验证)。
免责
这些配置是社区贡献的,站点改版后可能失效。失效时:在面板里直接用「自定义 HTTP」重新录一遍, 再把新配置导出、提 PR 覆盖旧版 —— 这就是这个目录存在的意义。