fix(qdreader): keep archive and sign in one plugin

This commit is contained in:
2026-05-19 15:35:24 +08:00
parent 22357b0568
commit 5b0f20fa24
7 changed files with 93 additions and 1593 deletions
+33 -8
View File
@@ -4,16 +4,17 @@
//[author: Hermes]
//[service: BOSS]
//[class: 工具类]
//[version: 2.5.1]
//[version: 2.5.2]
//[platform: web,qq,wx,tg,tb,fs,we]
//[public: false]
//[price: 0]
//[disable: false]
//[description: 启点读书(QDReader) Autman 签到插件:保存 QX 抓到的 H5 Cookie,支持手动“启点签到”和每日 07:15 定时签到;日志归档由独立归档插件每日 00:00 执行;带独立 bucket、多用户隔离、请求重试、签名响应解析、结果摘要和安全脱敏。]
//[rule: ^启点(账号|查询|ck|CK|cookie|Cookie|签到|读书)(.*)$]
//[description: 启点读书(QDReader) Autman 签到插件:保存 QX 抓到的 H5 Cookie,支持手动“启点签到”和每日 07:15 定时签到,每日 00:00 独立归档并清空日志;带独立 bucket、多用户隔离、请求重试、签名响应解析、结果摘要和安全脱敏。]
//[rule: ^启点(账号|查询|ck|CK|cookie|Cookie|签到|读书|归档|日志归档)(.*)$]
//[rule: ^qdreader(.*)$]
//[admin: true]
//[priority: 600]
//[cron: 0 0 * * *]
//[cron: 15 7 * * *]
@@ -260,7 +261,7 @@ function contentText() {
}
function usage() {
return [
"启点读书签到插件 v2.5.1",
"启点读书签到插件 v2.5.2",
"【一级菜单】",
"账号管理:启点账号",
"执行查询:启点查询",
@@ -270,12 +271,13 @@ function usage() {
"指定签到:启点签到 <uid>",
"【配置】",
"签名网关:Autman 参数 hermes_qidian.qdreader_sign_api,默认 " + DEFAULT_SIGN_API,
"定时:每日 07:15 自动签到;日志归档由独立插件每日 00:00 执行QX 只负责抓 cookie。"
"定时:每日 00:00 只归档并清空日志;每日 07:15 只自动签到QX 只负责抓 cookie。"
].join("\n")
}
function stripCommand(text) {
var s = String(text || "")
if (/^启点(?:签到|读书)(?:\s|$)/i.test(s)) return trim(s.replace(/^启点(?:签到|读书)\s*/i, ""))
if (/^启点(?:归档|日志归档)(?:\s|$)/i.test(s)) return trim(s.replace(/^启点(?:归档|日志归档)\s*/i, ""))
if (/^启点(?:查询)(?:\s|$)/i.test(s)) return trim(s.replace(/^启点(?:查询)\s*/i, ""))
if (/^启点(?:账号)(?:\s|$)/i.test(s)) return trim(s.replace(/^启点(?:账号)\s*/i, ""))
if (/^启点(?:ck|CK|cookie|Cookie)(?:\s|$)/i.test(s)) return trim(s.replace(/^启点(?:ck|CK|cookie|Cookie)\s*/i, ""))
@@ -283,7 +285,9 @@ function stripCommand(text) {
}
function commandName(text) {
if (/^启点(?:签到|读书)(?:\s|$)/i.test(text)) return "sign"
if (/^启点(?:归档|日志归档)(?:\s|$)/i.test(text)) return "archive"
if (/^qdreader\s+sign(?:\s|$)/i.test(text)) return "sign"
if (/^qdreader\s+archive(?:\s|$)/i.test(text)) return "archive"
if (/^启点(?:查询)(?:\s|$)/i.test(text)) return "status"
if (/^启点(?:账号)(?:\s|$)/i.test(text)) return "account"
return "ck"
@@ -448,6 +452,23 @@ function latestArchiveForVisible(uids) {
}
return null
}
function cronMode() {
var d = new Date()
var h = d.getHours ? d.getHours() : 7
var m = d.getMinutes ? d.getMinutes() : 15
if (h === 0 && m < 10) return "archive"
return "sign"
}
function formatArchiveReply(ret) {
if (ret && ret.archived) {
var run = ret.run || {}
return "启点读书日志归档完成:" + ret.key + "\n" +
"来源:" + sourceName(run.source) + "\n" +
"成功 " + (run.okCount || 0) + " / 失败 " + (run.failCount || 0) + " / 总计 " + (run.total || 0) + "\n" +
"已清空当日运行日志,后续查询可从归档判断签到情况"
}
return "启点读书日志归档完成:无可归档批次;已清空当日运行日志"
}
function sourceName(source) {
if (source === "cron") return "定时任务/零点任务"
if (source === "menu") return "菜单立即执行"
@@ -760,13 +781,17 @@ function handleSaveCookie(arg, store, bind) {
function main() {
var text = contentText()
var isCronRun = !text
var cmd = isCronRun ? "sign" : commandName(text)
var arg = isCronRun ? "" : trim(stripCommand(text).replace(/^sign\s*/i, ""))
if (!arg && cmd !== "sign" && cmd !== "account" && cmd !== "status") { reply(usage()); return }
var cmd = isCronRun ? cronMode() : commandName(text)
var arg = isCronRun ? "" : trim(stripCommand(text).replace(/^(sign|archive)\s*/i, ""))
if (!arg && cmd !== "sign" && cmd !== "archive" && cmd !== "account" && cmd !== "status") { reply(usage()); return }
if (/^(帮助|help|h)$/i.test(arg)) { reply(usage()); return }
var store = getStore()
var bind = getBindStore()
if (cmd === "archive" || /^(归档|日志归档|archive)(?:\s+|$)/i.test(arg)) {
reply(formatArchiveReply(archiveRunLog(isCronRun ? "midnight-archive" : "manual-archive")))
return
}
if (cmd === "sign" || /^(签到|sign|run)(?:\s+|$)/i.test(arg)) {
var target = trim(arg.replace(/^(签到|sign|run)\s*/i, ""))
var out = signAll(target, isCronRun, isCronRun ? "cron" : "manual")