diff --git a/README.md b/README.md index a6371ae..a3176e4 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,23 @@ -# qdreader-autman-qx +# qdreader-qx-cookie-autman-bot -起点读书(QDReader)自动化辅助: +起点读书(QDReader)Cookie 获取 + Autman 机器人交互提交。 -- `autman/`:Autman 路由插件,负责接收/保存 QX 上传的 Cookie Map。 -- `qx/rewrite/`:Quantumult X 重写 JS,打开起点读书福利中心时自动获取/更新 Cookie。 -- `qx/subscribe/`:Quantumult X 订阅片段和订阅 JSON。 -- `source/`:上游 QDReader 脚本备份,用于 QX 定时任务运行。 +现在的设计是:**Quantumult X 只负责获取 Cookie**,不会主动请求 Autman;抓到后生成一段可复制文本,BOSS 把这段发给 Autman 机器人完成提交。 -## 1. Autman 插件 +## 目录 -导入:`autman/qdreader_cookie_autman.js` +- `qx/rewrite/qdreader_cookie.js`:QX 重写 JS,拦截起点读书 `getlogininfo`,自动保存 Cookie 并生成提交文本。 +- `qx/subscribe/qdreader.qx.snippet`:QX 订阅片段。 +- `qx/subscribe/qdreader.subscription.json`:订阅 JSON。 +- `autman/qdreader_cookie_autman.js`:Autman 机器人交互插件,接收 `起点ck ...` 消息并保存 Cookie。 +- `source/qdreader.upstream.js`:上游 QDReader 脚本备份,用于 QX 定时签到任务。 -路由: - -```text -/m/qdreader/cookie -``` - -功能: - -- `GET /m/qdreader/cookie`:查看当前 Cookie 状态。 -- `POST /m/qdreader/cookie`:新增/更新 Cookie。 - -POST JSON 示例: - -```json -{ - "action": "update", - "uid": "可选,不传则从 QDHeader 或响应体识别", - "cookie": "QDReader Cookie 字符串", - "response_body": "可选 getlogininfo 响应体", - "token": "可选,与插件参数 qdreader_token 一致" -} -``` - -插件将 Cookie 保存为 Autman 参数 `qdreader_cookie_json`,格式兼容上游脚本的 `QDREADER_COOKIE`: - -```json -{"uid":"cookie"} -``` - -## 2. Quantumult X 重写 +## 1. Quantumult X 获取 Cookie 订阅片段: ```text -https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/qx/subscribe/qdreader.qx.snippet +https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/qx/subscribe/qdreader.qx.snippet ``` 手动配置核心内容: @@ -55,31 +27,61 @@ https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/qx/subscrib hostname = h5.if.qidian.com [rewrite_local] -^https?:\/\/h5\.if\.qidian\.com\/argus\/api\/v1\/user\/getlogininfo url script-response-body https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/qx/rewrite/qdreader_cookie.js +^https?:\/\/h5\.if\.qidian\.com\/argus\/api\/v1\/user\/getlogininfo url script-response-body https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/qx/rewrite/qdreader_cookie.js ``` 抓取步骤: -1. Quantumult X 启用 MitM 并信任证书。 +1. QX 开启 MitM 并信任证书。 2. 启用上面的重写。 3. 打开起点读书 App → 我的 → 福利中心。 -4. 看到“Cookie 新增/更新成功”通知即可。 +4. QX 通知显示 `Cookie 新增成功` 或 `Cookie 更新成功`。 +5. QX 会写入两个持久化变量: + - `QDREADER_COOKIE`:JSON Map,格式 `{ "uid": "cookie" }` + - `QDREADER_AUTMAN_SUBMIT_TEXT`:可直接发给 Autman 机器人的文本,格式 `起点ck ` -可选同步 Autman:在 QX 的持久化变量中设置: +## 2. Autman 机器人插件 -- `QDREADER_AUTMAN_URL`:例如 `http://你的Autman:端口/m/qdreader/cookie` -- `QDREADER_AUTMAN_TOKEN`:与 Autman 插件参数 `qdreader_token` 一致 +导入: + +```text +autman/qdreader_cookie_autman.js +``` + +插件规则: + +```text +起点ck ... +qdreader ... +``` + +交互命令: + +```text +起点ck +起点ck json {"uid":"cookie"} +起点ck 查询 +起点ck 导出 +起点ck 删除 +起点ck 帮助 +``` + +保存位置:Autman 参数 `qdreader_cookie_json`,格式兼容上游脚本环境变量 `QDREADER_COOKIE`: + +```json +{"uid":"cookie"} +``` ## 3. 定时签到 -QX 片段已包含上游脚本定时任务: +QX 片段保留了上游脚本定时任务: ```ini -11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, enabled=true +11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, enabled=true ``` -> 说明:上游脚本内部依赖签名网关 `https://api.120399.xyz`。本仓库保留上游运行脚本,并额外提供更清晰的 Cookie 自动获取与 Autman 同步入口。 +> 说明:上游脚本内部依赖签名网关 `https://api.120399.xyz`。本仓库重点维护 Cookie 获取与 Autman 机器人提交流程。 ## 4. 风险提示 -本项目仅供个人学习、研究与自动化测试使用,不保证长期可用。目标接口、风控策略或签名网关变化都可能导致失效。 +仅供个人学习、研究与自动化测试使用。目标接口、风控策略或签名网关变化都可能导致失效。 diff --git a/autman/qdreader_cookie_autman.js b/autman/qdreader_cookie_autman.js index 8a150aa..0676e83 100644 --- a/autman/qdreader_cookie_autman.js +++ b/autman/qdreader_cookie_autman.js @@ -1,63 +1,38 @@ //[open_source: true] -//[create_at: 2026-05-17 02:50:00] -//[title: 起点读书签到] +//[create_at: 2026-05-17 03:00:00] +//[title: 起点读书CK] //[author: Hermes] //[service: BOSS] //[class: 工具类] -//[version: 1.0.0] +//[version: 1.1.0] //[platform: web,qq,wx,tg,tb] //[public: false] //[price: 0] //[disable: false] -//[description: 起点读书(QDReader) Autman 路由插件:接收 Quantumult X 重写上传的 Cookie,按 uid 自动新增/更新;也可查看 Cookie 状态。实际每日签到建议仍由 QX 定时运行仓库内 qdreader.upstream.js,或把 QDREADER_COOKIE JSON 同步到 Node/青龙环境执行。] -//[router: /qdreader/cookie] -//[method: get] -//[method: post] -//[param: {"required":false,"key":"otto.qdreader_token","bool":false,"placeholder":"访问Token","name":"接口鉴权Token","desc":"外部请求携带 access_token 或 token;留空则不校验"}] -//[param: {"required":false,"key":"otto.qdreader_cookie_json","bool":false,"placeholder":"{\"uid\":\"cookie\"}","name":"QDReader Cookie JSON","desc":"由 QX 重写自动维护,JSON Map 格式"}] +//[description: 起点读书(QDReader) Autman 机器人交互插件:把 QX 抓到的 Cookie 发给机器人即可保存,按 uid 自动新增/更新;支持查询、删除、导出 QDREADER_COOKIE。] +//[rule: ^起点(ck|CK|cookie|Cookie)(.*)$] +//[rule: ^qdreader(.*)$] +//[param: {"required":false,"key":"otto.qdreader_cookie_json","bool":false,"placeholder":"{\"uid\":\"cookie\"}","name":"QDReader Cookie JSON","desc":"机器人交互维护,JSON Map 格式"}] var STORE_KEY = "qdreader_cookie_json" -function replyJSON(obj) { - if (typeof response === "function") response(obj) - else if (typeof sender !== "undefined" && sender.reply) sender.reply(obj) - else if (typeof sendText === "function") sendText(JSON.stringify(obj)) - else console.log(JSON.stringify(obj)) +function reply(msg) { + if (typeof sender !== "undefined" && sender.reply) sender.reply(msg) + else if (typeof sendText === "function") sendText(typeof msg === "string" ? msg : JSON.stringify(msg)) + else console.log(typeof msg === "string" ? msg : JSON.stringify(msg)) } - -function fail(code, msg, data) { - replyJSON({ ok: false, status: "fail", retcode: code, msg: msg, data: data || {} }) -} - -function ok(data, msg) { - replyJSON({ ok: true, status: "ok", retcode: 0, msg: msg || "success", data: data || {} }) -} - -function safeJsonParse(s, def) { - if (!s) return def - try { return JSON.parse(s) } catch (e) { return def } -} - +function safeJsonParse(s, def) { try { return JSON.parse(s) } catch (e) { return def } } function getStore() { var raw = get(STORE_KEY) || "{}" var obj = safeJsonParse(raw, {}) if (!obj || typeof obj !== "object" || Array.isArray(obj)) return {} return obj } - function setStore(obj) { var s = JSON.stringify(obj) set(STORE_KEY, s) return s } - -function getHeader(obj, name) { - if (!obj) return "" - var lower = String(name).toLowerCase() - for (var k in obj) if (String(k).toLowerCase() === lower) return obj[k] - return "" -} - function parseCookieString(cookie) { var jar = {} String(cookie || "").split(";").forEach(function (part) { @@ -69,98 +44,116 @@ function parseCookieString(cookie) { }) return jar } - function b64decode(s) { s = String(s || "") - try { - if (typeof Buffer !== "undefined") return Buffer.from(s, "base64").toString("utf8") - } catch (e) {} + try { if (typeof Buffer !== "undefined") return Buffer.from(s, "base64").toString("utf8") } catch (e) {} try { return decodeURIComponent(escape(atob(s))) } catch (e) { return "" } } - function uidFromQDHeader(qdheader) { var decoded = b64decode(qdheader) if (!decoded) return "" - var parts = decoded.split("|") - return String(parts[0] || "").trim() + return String(decoded.split("|")[0] || "").trim() } - -function extractUid(cookie, body) { +function extractUid(cookie) { var jar = parseCookieString(cookie) var uid = uidFromQDHeader(jar.QDHeader || jar.qdheader || jar.QDHEADER || "") if (uid) return uid if (jar.uid) return String(jar.uid) - var obj = safeJsonParse(body, null) - try { - uid = obj && obj.Data && obj.Data.UserInfo && (obj.Data.UserInfo.UserId || obj.Data.UserInfo.userId) - if (uid) return String(uid) - } catch (e) {} return "" } - -function readRequest() { - var method = typeof getMethod === "function" ? getMethod() : "get" - var params = typeof getRouterParams === "function" ? (getRouterParams() || {}) : {} - var body = {} - var raw = "" - if (String(method).toLowerCase() === "post") { - raw = typeof getRouterData === "function" ? (getRouterData() || "") : "" - body = safeJsonParse(raw, {}) - } - return { method: method, params: params, body: body, raw: raw } +function maskCookie(cookie) { + cookie = String(cookie || "") + if (cookie.length <= 24) return cookie + return cookie.slice(0, 12) + "..." + cookie.slice(-8) +} +function contentText() { + var s = "" + try { if (typeof getContent === "function") s = getContent() || "" } catch (e) {} + try { if (!s && typeof sender !== "undefined" && sender.getContent) s = sender.getContent() || "" } catch (e) {} + try { if (!s && typeof message !== "undefined") s = String(message) } catch (e) {} + return String(s || "").trim() +} +function usage() { + return [ + "起点读书CK插件", + "提交:起点ck ", + "提交JSON:起点ck json {\"uid\":\"cookie\"}", + "查询:起点ck 查询", + "导出:起点ck 导出", + "删除:起点ck 删除 ", + "说明:QX只负责抓cookie,把通知/变量里的“起点ck ...”整段发给机器人即可。" + ].join("\n") +} +function stripCommand(text) { + return String(text || "") + .replace(/^起点(?:ck|CK|cookie|Cookie)\s*/i, "") + .replace(/^qdreader\s*/i, "") + .trim() } -var req = readRequest() -var token = req.body.access_token || req.body.token || req.params.access_token || req.params.token || "" -var configuredToken = get("qdreader_token") || "" -if (configuredToken && configuredToken !== token) { - fail(-1, "token错误") - return -} +var text = contentText() +var arg = stripCommand(text) +if (!arg) { reply(usage()); return } -var action = req.body.action || req.params.action || "status" -var cookie = req.body.cookie || req.body.ck || req.params.cookie || req.params.ck || "" -var uid = req.body.uid || req.params.uid || "" -var responseBody = req.body.response_body || req.body.body || "" +if (/^(帮助|help|h)$/i.test(arg)) { reply(usage()); return } -if (action === "status") { - var store = getStore() - ok({ count: Object.keys(store).length, uids: Object.keys(store), envName: "QDREADER_COOKIE" }, "起点读书 Cookie 接收插件已启用") - return -} - -if (action === "delete") { - var storeDel = getStore() - if (!uid) { fail(-2, "uid不能为空"); return } - var existed = !!storeDel[uid] - delete storeDel[uid] - var rawDel = setStore(storeDel) - ok({ uid: uid, existed: existed, count: Object.keys(storeDel).length, qdreader_cookie: rawDel }, existed ? "已删除" : "原本不存在") - return -} - -if (action === "replace_all") { - var incoming = req.body.cookies || req.body.qdreader_cookie || req.body.QDREADER_COOKIE || req.params.cookies || "" - var obj = typeof incoming === "object" ? incoming : safeJsonParse(incoming, null) - if (!obj || typeof obj !== "object" || Array.isArray(obj)) { fail(-3, "cookies 必须是 JSON Map"); return } - var rawAll = setStore(obj) - ok({ count: Object.keys(obj).length, uids: Object.keys(obj), qdreader_cookie: rawAll }, "已整体替换") - return -} - -// default: update cookie -if (!cookie) { - fail(-4, "cookie不能为空", { usage: "POST JSON: {action:'update', uid:'可选', cookie:'Cookie字符串', response_body:'可选'}" }) - return -} -uid = uid || extractUid(cookie, responseBody) -if (!uid) { - fail(-5, "无法识别 uid:Cookie 中缺少 QDHeader/uid,或 response_body 无 UserInfo.UserId") - return -} var store = getStore() + +if (/^(查询|状态|status|list)$/i.test(arg)) { + var uids = Object.keys(store) + reply(uids.length ? ("起点读书CK:共 " + uids.length + " 个账号\n" + uids.join("\n")) : "还没有保存起点读书CK") + return +} + +if (/^(导出|export)$/i.test(arg)) { + reply("QDREADER_COOKIE=" + JSON.stringify(store)) + return +} + +var del = arg.match(/^(删除|delete|del|rm)\s+(\S+)/i) +if (del) { + var duid = del[2] + var existed = !!store[duid] + delete store[duid] + setStore(store) + reply(existed ? ("已删除 uid: " + duid) : ("未找到 uid: " + duid)) + return +} + +var jsonMatch = arg.match(/^json\s+([\s\S]+)$/i) +if (jsonMatch) { + var obj = safeJsonParse(jsonMatch[1], null) + if (!obj || typeof obj !== "object" || Array.isArray(obj)) { reply("JSON格式错误,示例:起点ck json {\"uid\":\"cookie\"}"); return } + var count = 0 + for (var uid in obj) { + if (!obj[uid]) continue + store[uid] = String(obj[uid]) + count++ + } + setStore(store) + reply("起点读书CK JSON已导入/更新 " + count + " 个账号,当前共 " + Object.keys(store).length + " 个账号") + return +} + +// 直接把 cookie 发过来;兼容“uid=xxx; ...”或含 QDHeader 的 Cookie。 +var cookie = arg +if (cookie.indexOf("=") < 0 || cookie.indexOf(";") < 0) { + reply("未识别到 Cookie。请发送:起点ck ") + return +} +var uid = extractUid(cookie) +if (!uid) { + reply("无法从 Cookie 识别 uid。请确认 QX 抓的是起点读书福利中心 getlogininfo 请求,Cookie 内应包含 QDHeader 或 uid。") + return +} var isNew = !store[uid] var changed = store[uid] !== cookie store[uid] = cookie -var rawStore = setStore(store) -ok({ uid: uid, is_new: isNew, changed: changed, count: Object.keys(store).length, envName: "QDREADER_COOKIE", qdreader_cookie: rawStore }, (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功") +setStore(store) +reply([ + "起点读书CK" + (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功", + "uid: " + uid, + "账号数: " + Object.keys(store).length, + "cookie: " + maskCookie(cookie), + "导出环境变量:发送 起点ck 导出" +].join("\n")) diff --git a/qx/rewrite/qdreader_cookie.js b/qx/rewrite/qdreader_cookie.js index 37f3b5f..d810ef2 100644 --- a/qx/rewrite/qdreader_cookie.js +++ b/qx/rewrite/qdreader_cookie.js @@ -1,14 +1,16 @@ /* * 起点读书 Cookie 自动获取/更新 - Quantumult X - * 用法:打开起点读书 App → 我的 → 福利中心,拦截 getlogininfo 后自动保存本地 QDREADER_COOKIE,并可选上传到 Autman。 - * 可选配置(QX 持久化变量): - * QDREADER_AUTMAN_URL 例如 http://你的Autman:端口/m/qdreader/cookie - * QDREADER_AUTMAN_TOKEN 与 Autman 插件 qdreader_token 一致;留空不传 token + * 只负责抓取 Cookie 并生成“复制给 Autman 机器人”的提交文本,不主动请求 Autman。 + * + * 抓取:打开起点读书 App → 我的 → 福利中心。 + * 抓到后会: + * 1. 保存/更新 QX 本地 QDREADER_COOKIE(JSON Map) + * 2. 写入 QDREADER_AUTMAN_SUBMIT_TEXT,内容可直接复制发给 Autman 机器人 + * 3. 通知里展示提交命令摘要 */ const KEY = 'QDREADER_COOKIE' -const AUTMAN_URL_KEY = 'QDREADER_AUTMAN_URL' -const AUTMAN_TOKEN_KEY = 'QDREADER_AUTMAN_TOKEN' +const SUBMIT_KEY = 'QDREADER_AUTMAN_SUBMIT_TEXT' function getHeader(headers, name) { const lower = String(name).toLowerCase() @@ -44,6 +46,10 @@ function getUid(cookie, body) { return uid ? String(uid) : '' } function notify(title, sub, msg) { $notify(title, sub || '', msg || '') } +function preview(s, n) { + s = String(s || '') + return s.length > n ? s.slice(0, n) + '…' : s +} const cookie = getHeader($request && $request.headers, 'Cookie') if (!cookie) { @@ -60,33 +66,21 @@ if (!cookie) { const isNew = !old[uid] const changed = old[uid] !== cookie old[uid] = cookie - $prefs.setValueForKey(JSON.stringify(old), KEY) + const jsonMap = JSON.stringify(old) + $prefs.setValueForKey(jsonMap, KEY) - const autmanUrl = $prefs.valueForKey(AUTMAN_URL_KEY) || '' - const autmanToken = $prefs.valueForKey(AUTMAN_TOKEN_KEY) || '' - const doneMsg = `Uid: ${uid}\n账号数: ${Object.keys(old).length}` + // 发给 Autman 机器人的命令。插件支持“起点ck ”和“起点ck json ”。 + const submitText = `起点ck ${cookie}` + $prefs.setValueForKey(submitText, SUBMIT_KEY) - if (autmanUrl) { - $task.fetch({ - url: autmanUrl, - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ action: 'update', uid, cookie, response_body: body, token: autmanToken }) - }).then(resp => { - let msg = doneMsg - try { - const data = JSON.parse(resp.body || '{}') - msg += `\nAutman: ${data.ok ? '同步成功' : ('同步失败 ' + (data.msg || ''))}` - } catch (e) { msg += `\nAutman HTTP: ${resp.statusCode}` } - notify('起点读书', (isNew ? 'Cookie 新增成功' : (changed ? 'Cookie 更新成功' : 'Cookie 未变化')), msg) - $done({}) - }, err => { - notify('起点读书', 'Cookie 本地已保存,Autman 同步失败', `${doneMsg}\n${err && err.error || err}`) - $done({}) - }) - } else { - notify('起点读书', (isNew ? 'Cookie 新增成功' : (changed ? 'Cookie 更新成功' : 'Cookie 未变化')), doneMsg) - $done({}) - } + const title = isNew ? 'Cookie 新增成功' : (changed ? 'Cookie 更新成功' : 'Cookie 未变化') + const msg = [ + `Uid: ${uid}`, + `账号数: ${Object.keys(old).length}`, + `提交文本已写入 QX 变量: ${SUBMIT_KEY}`, + `发给 Autman 机器人:${preview(submitText, 180)}` + ].join('\n') + notify('起点读书', title, msg) + $done({}) } } diff --git a/qx/subscribe/qdreader.qx.snippet b/qx/subscribe/qdreader.qx.snippet index 60f708e..9040914 100644 --- a/qx/subscribe/qdreader.qx.snippet +++ b/qx/subscribe/qdreader.qx.snippet @@ -2,8 +2,8 @@ hostname = h5.if.qidian.com [rewrite_local] -# > 起点读书获取/更新 Cookie -^https?:\/\/h5\.if\.qidian\.com\/argus\/api\/v1\/user\/getlogininfo url script-response-body https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/qx/rewrite/qdreader_cookie.js +# > 起点读书获取 Cookie:只保存本地并生成可复制给 Autman 机器人的“起点ck ...”文本 +^https?:\/\/h5\.if\.qidian\.com\/argus\/api\/v1\/user\/getlogininfo url script-response-body https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/qx/rewrite/qdreader_cookie.js [task_local] -11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, img-url=https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/97/40/5e/97405e49-87bb-3f0a-bf3a-91cf8fdf99a0/AppIcon-0-0-1x_U007epad-0-1-0-0-sRGB-GLES2_U002c0-85-220.png/144x144.png, enabled=true +11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, img-url=https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/97/40/5e/97405e49-87bb-3f0a-bf3a-91cf8fdf99a0/AppIcon-0-0-1x_U007epad-0-1-0-0-sRGB-GLES2_U002c0-85-220.png/144x144.png, enabled=true diff --git a/qx/subscribe/qdreader.subscription.json b/qx/subscribe/qdreader.subscription.json index 67f12c9..016f38f 100644 --- a/qx/subscribe/qdreader.subscription.json +++ b/qx/subscribe/qdreader.subscription.json @@ -1,20 +1,20 @@ { - "name": "起点读书 QDReader", - "description": "Quantumult X 重写:自动获取/更新起点读书 Cookie;本地保存 QDREADER_COOKIE,可选同步到 Autman 插件。", + "name": "起点读书 QDReader Cookie", + "description": "Quantumult X 重写:只负责自动获取/更新起点读书 Cookie,并生成可复制给 Autman 机器人的提交文本。", "mitm": ["h5.if.qidian.com"], "rewrite": [ { - "name": "起点读书获取/更新 Cookie", + "name": "起点读书获取 Cookie", "match": "^https?:\\/\\/h5\\.if\\.qidian\\.com\\/argus\\/api\\/v1\\/user\\/getlogininfo", "type": "script-response-body", - "script": "https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/qx/rewrite/qdreader_cookie.js" + "script": "https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/qx/rewrite/qdreader_cookie.js" } ], "task_local": [ - "11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-autman-qx/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, enabled=true" + "11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, enabled=true" ], "prefs": { - "QDREADER_AUTMAN_URL": "可选:Autman 路由地址,如 http://host:port/m/qdreader/cookie", - "QDREADER_AUTMAN_TOKEN": "可选:Autman 插件 qdreader_token" + "QDREADER_COOKIE": "QX 本地保存的 Cookie JSON Map", + "QDREADER_AUTMAN_SUBMIT_TEXT": "可直接复制发给 Autman 机器人的提交文本:起点ck " } }