Files
autman-plugins/plugins/qdreader/README.md
T

5.7 KiB
Raw Blame History

启点读书 QDReader 签到 Autman 插件

QDReader/起点读书 Autman 签到插件。用户侧触发词统一使用“启点”,避免平台关键词麻烦;QX 只负责抓取 Cookie。账号管理、执行查询、签到和日志归档都在同一个 Autman 插件内完成;业务上仍保持两个独立定时:每日 00:00 只归档清日志,每日 07:15 只执行签到。

文件位置

正式插件文件:

plugins/qdreader/qdreader_sign_autman.js       # 单插件:00:00 归档清日志;07:15 运行签到

实机 JS 导入副本:

js/qdreader_sign_autman.js

Raw 链接:

https://gitea.chickliu.fun/Hermes/autman-plugins/raw/branch/main/plugins/qdreader/qdreader_sign_autman.js
https://gitea.chickliu.fun/Hermes/autman-plugins/raw/branch/main/js/qdreader_sign_autman.js

当前交互设计

一级菜单

启点账号
启点查询

启点账号 只负责账号管理:

启点账号管理
1. 查看账号
2. 添加/更新账号
3. 账号详情/修改备注
4. 删除账号
5. 清空账号
q. 退出
请回复序号

启点查询 只负责最后执行日志和执行动作,不做实时接口查询:

启点查询(最近签到记录)
1. 查看最近签到记录
2. 查询单个账号最近记录
3. 立即执行签到
q. 退出
请回复序号

快速通道

启点ck <QX抓到的完整cookie>
启点签到
启点签到 <uid>
启点归档
qdreader sign
qdreader archive

启点ck 只保留快速提交 Cookie,不再承担查询/导出/批量导入等管理功能。

账号与备注

  • 保存 Cookie 后必须绑定当前 sender.getUserID();无法识别当前用户时拒绝保存。
  • 查询、删除、手动签到默认只操作当前用户绑定的账号。
  • 未绑定到当前用户的全局 CK 不会在普通用户菜单中显示,也不会被普通用户手动签到使用。
  • 已绑定其他用户的 UID 不能被当前用户覆盖更新。
  • 账号详情、删除、单账号查询都使用编号选择,不要求用户复制/输入 UID。
  • 添加/更新账号后会提示是否添加备注。
  • 修改备注在“账号详情/修改备注”中完成。
  • 删除账号或清空当前用户账号时,会同步清理对应备注。
  • 普通回复只展示脱敏 UID 和备注,不输出完整 Cookie。

存储

主数据桶:

hermes_qidian

主要 key

qdreader_cookie_json       # uid -> full cookie
qdreader_user_bind_json    # uid -> sender.getUserID(),用户绑定索引
qdreader_remark_json       # uid -> 备注名
qdreader_last_result_json  # uid -> 单账号当日/当前批次结果 JSON 字符串(每日零点归档前清空)
qdreader_last_run_json     # 当日/当前批次日志、来源和汇总(每日零点归档前清空)
qdreader_archive_json      # yyyy-mm-dd -> 已归档批次日志,用于判断历史签到结果
qdreader_sign_api          # 签名网关
qdreader_retry_count       # 请求失败重试次数
qdreader_cron_silent       # 定时无账号静默

读取顺序:

bucketGet("hermes_qidian", key)
  ↓ fallback
get(key)

写入顺序:

bucketSet("hermes_qidian", key, value)
set(key, value)

说明:qdreader_user_bind_json 之前已经由代码写入,但早期插件头部只声明了 qdreader_cookie_json 等少数参数,部分 Autman 数据桶/参数 UI 只展示声明过的 key,所以你可能看不到绑定项。v2.3.4 已把绑定、备注、最近结果、最近批次日志都补成显式 [param],便于在数据桶 UI 中直接查看。

签名与签到流程

  1. 从 Cookie 解析账号标识与签名参数:
    • 优先解析 QDHeader 第一段有效数字 uid
    • QDHeader 第一段为 (null) 或无效,继续检查 QDHeader 第 12 段的真实 UserId
    • 再读取 uid/userid/userId/UserId
    • 最后才回退 ywguid/gwguid/guid,与 QX 抓包脚本保持一致;
    • 同时提取 qdh/QDHeader/guid/qimei/qimei36 供签名网关使用,其中 qdh 只取 Cookie 的 qdh/QDH,不再用 QDHeader 顶替,避免签名网关 decodeQDHAuto 解码失败。
  2. POST <qdreader_sign_api>/sign 获取请求签名头。默认签名网关基址是 https://api.120399.xyz/qdreader
  3. POST https://h5.if.qidian.com/argus/api/v3/checkin/checkin 完成签到。
  4. 写入单账号当日结果 qdreader_last_result_json,包括 ok/msg/time/source/runId
  5. 写入当日批次日志 qdreader_last_run_json,包括触发来源、开始/结束时间、成功/失败/总数和每账号结果;即使账号执行异常也会记录失败日志。
  6. 插件内有两个 cron0 0 * * *15 7 * * *
  7. 每日 00:00 触发时只做日志归档:把上一份 qdreader_last_run_json 按完成日期写入 qdreader_archive_json,再清空 qdreader_last_result_json / qdreader_last_run_json;不请求签名网关、不执行签到。
  8. 每日 07:15 触发时只执行签到并反馈结果,不做归档。
  9. 汇总每个账号签到结果。

查询数据来源

启点查询 不请求起点实时接口,只读取最后执行日志:

qdreader_last_run_json      # 当日/当前批次
qdreader_last_result_json   # 每个 uid 当日/当前批次结果
qdreader_archive_json       # 每日零点归档后的历史批次

因此“查询”语义是“最近签到记录/最后执行日志”。刚添加但从未执行过的账号会显示“暂无执行记录”。如果当日日志已被零点任务清空,启点查询 会回退到最近归档,根据归档中的账号结果判断昨日/历史签到情况并反馈给用户。

本地验证

node -c plugins/qdreader/qdreader_sign_autman.js
node -c js/qdreader_sign_autman.js
node tests/qdreader_plugin.test.mjs