feat: add QDReader Autman sign plugin
This commit is contained in:
@@ -1,16 +1,17 @@
|
|||||||
# qdreader-qx-cookie-autman-bot
|
# qdreader-autman-sign
|
||||||
|
|
||||||
起点读书(QDReader)Cookie 获取 + Autman 机器人交互提交。
|
起点读书(QDReader)Cookie 获取 + Autman 机器人签到插件。
|
||||||
|
|
||||||
现在的设计是:**Quantumult X 只负责获取 Cookie**,不会主动请求 Autman;抓到后生成一段可复制文本,BOSS 把这段发给 Autman 机器人完成提交。
|
设计修正后:**Quantumult X 只负责获取 Cookie**;**Autman 插件负责保存 Cookie 并执行签到**。签到请求复用上游 `Yuheng0101/X/Tasks/QDReader` 的核心方式:用 H5 Cookie 解析 `QDHeader/uid/guid/qimei`,调用签名网关 `https://api.120399.xyz/sign` 生成起点接口所需签名头,再请求起点 H5 福利中心签到接口。
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
- `qx/rewrite/qdreader_cookie.js`:QX 重写 JS,拦截起点读书 `getlogininfo`,自动保存 Cookie 并生成提交文本。
|
- `qx/rewrite/qdreader_cookie.js`:QX 重写 JS,拦截起点读书 `getlogininfo`,自动保存 Cookie 并生成提交文本。
|
||||||
- `qx/subscribe/qdreader.qx.snippet`:QX 订阅片段。
|
- `qx/subscribe/qdreader.qx.snippet`:QX 订阅片段。
|
||||||
- `qx/subscribe/qdreader.subscription.json`:订阅 JSON。
|
- `qx/subscribe/qdreader.subscription.json`:订阅 JSON。
|
||||||
- `autman/qdreader_cookie_autman.js`:Autman 机器人交互插件,接收 `起点ck ...` 消息并保存 Cookie。
|
- `autman/qdreader_sign_autman.js`:Autman 机器人签到插件,支持提交 CK、签到、查询、删除、导出。
|
||||||
- `source/qdreader.upstream.js`:上游 QDReader 脚本备份,用于 QX 定时签到任务。
|
- `autman/qdreader_cookie_autman.js`:旧版仅保存 CK 插件,保留兼容,不再推荐。
|
||||||
|
- `source/qdreader.upstream.js`:上游 QDReader 脚本备份。
|
||||||
|
|
||||||
## 1. Quantumult X 获取 Cookie
|
## 1. Quantumult X 获取 Cookie
|
||||||
|
|
||||||
@@ -40,18 +41,26 @@ hostname = h5.if.qidian.com
|
|||||||
- `QDREADER_COOKIE`:JSON Map,格式 `{ "uid": "cookie" }`
|
- `QDREADER_COOKIE`:JSON Map,格式 `{ "uid": "cookie" }`
|
||||||
- `QDREADER_AUTMAN_SUBMIT_TEXT`:可直接发给 Autman 机器人的文本,格式 `起点ck <cookie>`
|
- `QDREADER_AUTMAN_SUBMIT_TEXT`:可直接发给 Autman 机器人的文本,格式 `起点ck <cookie>`
|
||||||
|
|
||||||
## 2. Autman 机器人插件
|
## 2. Autman 签到插件
|
||||||
|
|
||||||
导入:
|
导入推荐插件:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
autman/qdreader_cookie_autman.js
|
autman/qdreader_sign_autman.js
|
||||||
|
```
|
||||||
|
|
||||||
|
原始文件链接:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/autman/qdreader_sign_autman.js
|
||||||
```
|
```
|
||||||
|
|
||||||
插件规则:
|
插件规则:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
起点ck ...
|
起点ck ...
|
||||||
|
起点签到 ...
|
||||||
|
起点读书 ...
|
||||||
qdreader ...
|
qdreader ...
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -63,6 +72,8 @@ qdreader ...
|
|||||||
起点ck 查询
|
起点ck 查询
|
||||||
起点ck 导出
|
起点ck 导出
|
||||||
起点ck 删除 <uid>
|
起点ck 删除 <uid>
|
||||||
|
起点签到
|
||||||
|
起点签到 <uid>
|
||||||
起点ck 帮助
|
起点ck 帮助
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -72,15 +83,22 @@ qdreader ...
|
|||||||
{"uid":"cookie"}
|
{"uid":"cookie"}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 3. 定时签到
|
签名网关参数:`qdreader_sign_api`,默认:
|
||||||
|
|
||||||
QX 片段保留了上游脚本定时任务:
|
```text
|
||||||
|
https://api.120399.xyz
|
||||||
```ini
|
|
||||||
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 机器人提交流程。
|
## 3. 签到实现说明
|
||||||
|
|
||||||
|
Autman 插件内置执行:
|
||||||
|
|
||||||
|
1. 从 Cookie 解析:`QDHeader/qdh/uid/guid/qimei/qimei36/sessionyw/appId`。
|
||||||
|
2. 调用签名网关:`POST https://api.120399.xyz/sign`。
|
||||||
|
3. 对起点接口发起签到:`POST https://h5.if.qidian.com/argus/api/v3/checkin/checkin`。
|
||||||
|
4. 汇总每个 uid 的执行结果回复给机器人会话。
|
||||||
|
|
||||||
|
> 注意:签名算法依赖上游相同的第三方签名网关;如果 `api.120399.xyz` 失效,需要替换 `qdreader_sign_api` 或重做本地签名实现。
|
||||||
|
|
||||||
## 4. 风险提示
|
## 4. 风险提示
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,218 @@
|
|||||||
|
//[open_source: true]
|
||||||
|
//[create_at: 2026-05-17 03:00:00]
|
||||||
|
//[title: 起点读书签到]
|
||||||
|
//[author: Hermes]
|
||||||
|
//[service: BOSS]
|
||||||
|
//[class: 工具类]
|
||||||
|
//[version: 2.0.0]
|
||||||
|
//[platform: web,qq,wx,tg,tb]
|
||||||
|
//[public: false]
|
||||||
|
//[price: 0]
|
||||||
|
//[disable: false]
|
||||||
|
//[description: 起点读书(QDReader) Autman 签到插件:保存 QX 抓到的 H5 Cookie,并在机器人内执行签到/查询/导出/删除。签名沿用上游 QDReader 的 api.120399.xyz 签名网关。]
|
||||||
|
//[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 格式"}]
|
||||||
|
//[param: {"required":false,"key":"otto.qdreader_sign_api","bool":false,"placeholder":"https://api.120399.xyz","name":"QDReader 签名网关","desc":"默认 https://api.120399.xyz"}]
|
||||||
|
|
||||||
|
var STORE_KEY = "qdreader_cookie_json"
|
||||||
|
var SIGN_API_KEY = "qdreader_sign_api"
|
||||||
|
var DEFAULT_SIGN_API = "https://api.120399.xyz"
|
||||||
|
var QIDIAN_BASE = "https://h5.if.qidian.com"
|
||||||
|
|
||||||
|
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 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 parseCookieString(cookie) {
|
||||||
|
var jar = {}
|
||||||
|
String(cookie || "").split(";").forEach(function (part) {
|
||||||
|
var i = part.indexOf("=")
|
||||||
|
if (i <= 0) return
|
||||||
|
var k = part.slice(0, i).trim()
|
||||||
|
var v = part.slice(i + 1).trim()
|
||||||
|
if (k) jar[k] = v
|
||||||
|
})
|
||||||
|
return jar
|
||||||
|
}
|
||||||
|
function cookieToString(jar) {
|
||||||
|
var arr = []
|
||||||
|
for (var k in jar) if (jar[k] !== undefined && jar[k] !== null && jar[k] !== "") arr.push(k + "=" + jar[k])
|
||||||
|
return arr.join("; ")
|
||||||
|
}
|
||||||
|
function b64decode(s) {
|
||||||
|
s = String(s || "")
|
||||||
|
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); return decoded ? String(decoded.split("|")[0] || "").trim() : "" }
|
||||||
|
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)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
function maskCookie(cookie) { cookie = String(cookie || ""); return cookie.length <= 24 ? cookie : 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 <QX抓到的cookie>",
|
||||||
|
"签到全部:起点签到",
|
||||||
|
"签到单号:起点签到 <uid>",
|
||||||
|
"查询CK:起点ck 查询",
|
||||||
|
"导出CK:起点ck 导出",
|
||||||
|
"删除CK:起点ck 删除 <uid>",
|
||||||
|
"说明:QX只负责抓cookie;签到由本 Autman 插件执行。"
|
||||||
|
].join("\n")
|
||||||
|
}
|
||||||
|
function stripCommand(text) {
|
||||||
|
return String(text || "")
|
||||||
|
.replace(/^起点(?:ck|CK|cookie|Cookie|签到|读书)\s*/i, "")
|
||||||
|
.replace(/^qdreader\s*/i, "")
|
||||||
|
.trim()
|
||||||
|
}
|
||||||
|
function commandName(text) {
|
||||||
|
if (/^起点(?:签到|读书)(?:\s|$)/i.test(text)) return "sign"
|
||||||
|
if (/^qdreader\s+sign(?:\s|$)/i.test(text)) return "sign"
|
||||||
|
return "ck"
|
||||||
|
}
|
||||||
|
function qs(obj) {
|
||||||
|
var parts = []
|
||||||
|
for (var k in (obj || {})) {
|
||||||
|
var v = obj[k]
|
||||||
|
if (v === undefined || v === null) continue
|
||||||
|
if (Array.isArray(v)) { for (var i = 0; i < v.length; i++) parts.push(encodeURIComponent(k + "[" + i + "]") + "=" + encodeURIComponent(String(v[i]))) }
|
||||||
|
else if (typeof v === "object") { for (var sk in v) parts.push(encodeURIComponent(k + "[" + sk + "]") + "=" + encodeURIComponent(String(v[sk]))) }
|
||||||
|
else parts.push(encodeURIComponent(k) + "=" + encodeURIComponent(String(v)))
|
||||||
|
}
|
||||||
|
return parts.join("&")
|
||||||
|
}
|
||||||
|
function normalizeCookie(cookie) {
|
||||||
|
var jar = parseCookieString(cookie)
|
||||||
|
var session = jar.sessionyw || jar.session || jar.sessionKey || ""
|
||||||
|
if (session) jar.sessionyw = session
|
||||||
|
var appid = jar.appId || jar.appid || ""
|
||||||
|
if (appid) jar.appId = appid
|
||||||
|
return { jar: jar, cookie: cookieToString(jar), qdh: jar.QDHeader || jar.qdh || "", qdheader: jar.QDHeader || jar.qdheader || "", uid: extractUid(cookie), guid: jar.gwguid || jar.guid || "", qimei: jar.qimei || "", qimei36: jar.qimei36 || jar.QIMEI36 || "" }
|
||||||
|
}
|
||||||
|
function httpReq(opt) {
|
||||||
|
if (typeof request === "function") return request(opt)
|
||||||
|
if (typeof $request === "function") return $request(opt)
|
||||||
|
throw new Error("当前 Autman 环境没有 request/$request 方法,无法发起签到请求")
|
||||||
|
}
|
||||||
|
function parseResp(res) {
|
||||||
|
var body = res && (res.body !== undefined ? res.body : (res.data !== undefined ? res.data : res))
|
||||||
|
if (typeof body === "string") return safeJsonParse(body, body)
|
||||||
|
return body
|
||||||
|
}
|
||||||
|
function postJson(url, data) {
|
||||||
|
return parseResp(httpReq({ url: url, method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data) }))
|
||||||
|
}
|
||||||
|
function qidianRequest(path, method, data, cookie) {
|
||||||
|
method = String(method || "GET").toUpperCase()
|
||||||
|
var info = normalizeCookie(cookie)
|
||||||
|
var signApi = (get(SIGN_API_KEY) || DEFAULT_SIGN_API).replace(/\/$/, "")
|
||||||
|
var payload = { qdh: info.qdh, qdheader: info.qdheader, url: QIDIAN_BASE + path, method: method, data: data || {}, uid: info.uid, guid: info.guid, qimei: info.qimei, qimei36: info.qimei36 }
|
||||||
|
var signed = postJson(signApi + "/sign", payload)
|
||||||
|
if (typeof signed === "string") signed = safeJsonParse(signed, {})
|
||||||
|
if (!signed || (signed.code !== 200 && signed.code !== "200") || !signed.data) throw new Error("签名失败:" + JSON.stringify(signed))
|
||||||
|
var headers = signed.data
|
||||||
|
headers.Cookie = info.cookie
|
||||||
|
if (!headers["User-Agent"]) headers["User-Agent"] = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/QDReaderiOS/5.9.456/728/QDReaderAppstore"
|
||||||
|
var req = { url: QIDIAN_BASE + path, method: method, headers: headers }
|
||||||
|
if (method === "GET") {
|
||||||
|
var query = qs(data || {})
|
||||||
|
if (query) req.url += (req.url.indexOf("?") >= 0 ? "&" : "?") + query
|
||||||
|
} else {
|
||||||
|
req.headers["Content-Type"] = req.headers["Content-Type"] || "application/x-www-form-urlencoded"
|
||||||
|
req.body = qs(data || {})
|
||||||
|
}
|
||||||
|
var out = parseResp(httpReq(req))
|
||||||
|
if (typeof out === "string") out = safeJsonParse(out, out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
function resultOk(obj) {
|
||||||
|
var code = obj && (obj.Result !== undefined ? obj.Result : obj.Code !== undefined ? obj.Code : obj.code)
|
||||||
|
return code === undefined || code === 0 || code === "0" || code === 200 || code === "200"
|
||||||
|
}
|
||||||
|
function resultMsg(obj) { return (obj && (obj.Message || obj.Msg || obj.message || obj.msg)) || "" }
|
||||||
|
function doCheckin(uid, cookie) {
|
||||||
|
var res = qidianRequest("/argus/api/v3/checkin/checkin", "POST", {}, cookie)
|
||||||
|
var ok = resultOk(res)
|
||||||
|
var msg = resultMsg(res) || (ok ? "签到请求成功" : "签到失败")
|
||||||
|
return { uid: uid, ok: ok, msg: msg, raw: res }
|
||||||
|
}
|
||||||
|
function signAll(targetUid) {
|
||||||
|
var store = getStore()
|
||||||
|
var uids = Object.keys(store)
|
||||||
|
if (targetUid) uids = uids.filter(function (u) { return u === targetUid })
|
||||||
|
if (!uids.length) return targetUid ? ("未找到 uid: " + targetUid) : "还没有保存起点读书CK"
|
||||||
|
var lines = ["起点读书签到结果:"]
|
||||||
|
for (var i = 0; i < uids.length; i++) {
|
||||||
|
var uid = uids[i]
|
||||||
|
try {
|
||||||
|
var r = doCheckin(uid, store[uid])
|
||||||
|
lines.push((r.ok ? "✅ " : "❌ ") + uid + ":" + r.msg)
|
||||||
|
} catch (e) {
|
||||||
|
lines.push("❌ " + uid + ":" + (e && e.message ? e.message : String(e)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lines.join("\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
var text = contentText()
|
||||||
|
var cmd = commandName(text)
|
||||||
|
var arg = stripCommand(text).replace(/^sign\s*/i, "").trim()
|
||||||
|
if (!arg && cmd !== "sign") { reply(usage()); return }
|
||||||
|
if (/^(帮助|help|h)$/i.test(arg)) { reply(usage()); return }
|
||||||
|
|
||||||
|
var store = getStore()
|
||||||
|
|
||||||
|
if (cmd === "sign" || /^(签到|sign|run)(?:\s+|$)/i.test(arg)) {
|
||||||
|
var target = arg.replace(/^(签到|sign|run)\s*/i, "").trim()
|
||||||
|
reply(signAll(target))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/^(查询|状态|status|list)$/i.test(arg)) {
|
||||||
|
var uids = Object.keys(store)
|
||||||
|
reply(uids.length ? ("起点读书CK:共 " + uids.length + " 个账号\n" + uids.join("\n") + "\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 + " 个账号\n发送 起点签到 可执行签到"); return
|
||||||
|
}
|
||||||
|
var cookie = arg
|
||||||
|
if (cookie.indexOf("=") < 0 || cookie.indexOf(";") < 0) { reply("未识别到 Cookie。请发送:起点ck <QX抓到的完整cookie>"); 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
|
||||||
|
setStore(store)
|
||||||
|
reply(["起点读书CK" + (isNew ? "新增" : (changed ? "更新" : "未变化")) + "成功", "uid: " + uid, "账号数: " + Object.keys(store).length, "cookie: " + maskCookie(cookie), "签到:发送 起点签到"].join("\n"))
|
||||||
@@ -5,5 +5,4 @@ hostname = h5.if.qidian.com
|
|||||||
# > 起点读书获取 Cookie:只保存本地并生成可复制给 Autman 机器人的“起点ck ...”文本
|
# > 起点读书获取 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
|
^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]
|
# 签到由 Autman 插件 autman/qdreader_sign_autman.js 执行;QX 不再配置上游定时签到任务。
|
||||||
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
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "起点读书 QDReader Cookie",
|
"name": "起点读书 QDReader Cookie + Autman Sign",
|
||||||
"description": "Quantumult X 重写:只负责自动获取/更新起点读书 Cookie,并生成可复制给 Autman 机器人的提交文本。",
|
"description": "Quantumult X 重写只负责自动获取/更新起点读书 Cookie,并生成可复制给 Autman 签到插件的提交文本;签到由 Autman 执行。",
|
||||||
"mitm": ["h5.if.qidian.com"],
|
"mitm": ["h5.if.qidian.com"],
|
||||||
"rewrite": [
|
"rewrite": [
|
||||||
{
|
{
|
||||||
@@ -10,9 +10,11 @@
|
|||||||
"script": "https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/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": [
|
"task_local": [],
|
||||||
"11 2 * * * https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/source/qdreader.upstream.js, tag=起点读书自动签到, enabled=true"
|
"autman": {
|
||||||
],
|
"plugin": "https://gitea.chickliu.fun/Hermes/qdreader-qx-cookie-autman-bot/raw/branch/main/autman/qdreader_sign_autman.js",
|
||||||
|
"commands": ["起点ck <cookie>", "起点签到", "起点签到 <uid>", "起点ck 查询", "起点ck 删除 <uid>"]
|
||||||
|
},
|
||||||
"prefs": {
|
"prefs": {
|
||||||
"QDREADER_COOKIE": "QX 本地保存的 Cookie JSON Map",
|
"QDREADER_COOKIE": "QX 本地保存的 Cookie JSON Map",
|
||||||
"QDREADER_AUTMAN_SUBMIT_TEXT": "可直接复制发给 Autman 机器人的提交文本:起点ck <cookie>"
|
"QDREADER_AUTMAN_SUBMIT_TEXT": "可直接复制发给 Autman 机器人的提交文本:起点ck <cookie>"
|
||||||
|
|||||||
Reference in New Issue
Block a user