Files
autman-plugins/plugins/qdreader/README.md
T
2026-05-20 12:16:36 +08:00

159 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 启点读书 QDReader 签到 Autman 插件
QDReader/起点读书 Autman 签到插件。用户侧触发词统一使用“启点”,避免平台关键词麻烦;QX 只负责抓取 Cookie。账号管理、执行查询、签到和日志归档都在同一个 Autman 插件内完成;业务上使用一个 cron 表达式 `1 0,7 * * *`:每日 00:01 只归档清日志,每日 07:01 只执行签到。
## 文件位置
正式插件文件:
```text
plugins/qdreader/qdreader_sign_autman.js # 单插件单 cron00:01 归档清日志;07:01 运行签到
```
实机 JS 导入副本:
```text
js/qdreader_sign_autman.js
```
Raw 链接:
```text
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
```
## 当前交互设计
### 一级菜单
```text
启点账号
启点查询
```
`启点账号` 只负责账号管理:
```text
启点账号管理
1. 查看账号
2. 添加/更新账号
3. 账号详情/修改备注
4. 删除账号
5. 清空账号
q. 退出
请回复序号
```
`启点查询` 只负责最后执行日志和执行动作,不做实时接口查询:
```text
启点查询(最近签到记录)
1. 查看最近签到记录
2. 查询单个账号最近记录
3. 立即执行签到
q. 退出
请回复序号
```
### 快速通道
```text
启点ck <QX抓到的完整cookie>
启点签到
启点签到 <uid>
启点归档
qdreader sign
qdreader archive
```
`启点ck` 只保留快速提交 Cookie,不再承担查询/导出/批量导入等管理功能。
## 账号与备注
- 保存 Cookie 后必须绑定当前 `sender.getUserID()`;无法识别当前用户时拒绝保存。
- 查询、删除、手动签到默认只操作当前用户绑定的账号。
- 未绑定到当前用户的全局 CK 不会在普通用户菜单中显示,也不会被普通用户手动签到使用。
- 已绑定其他用户的 UID 不能被当前用户覆盖更新。
- 账号详情、删除、单账号查询都使用编号选择,不要求用户复制/输入 UID。
- 添加/更新账号后会提示是否添加备注。
- 修改备注在“账号详情/修改备注”中完成。
- 删除账号或清空当前用户账号时,会同步清理对应备注。
- 普通回复只展示脱敏 UID 和备注,不输出完整 Cookie。
## 存储
主数据桶:
```text
hermes_qidian
```
主要 key
```text
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 # 定时无账号静默
```
读取顺序:
```text
bucketGet("hermes_qidian", key)
↓ fallback
get(key)
```
写入顺序:
```text
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. 插件内只有一个 cron`1 0,7 * * *`
7. 每日 00:01 触发时只做日志归档;系统触发按小时分流,0 点分支归档:把上一份 `qdreader_last_run_json` 按完成日期写入 `qdreader_archive_json`,再清空 `qdreader_last_result_json` / `qdreader_last_run_json`;不请求签名网关、不执行签到。
8. 每日 07:01 触发时只执行签到并反馈结果,不做归档。
9. 汇总每个账号签到结果。
## 查询数据来源
`启点查询` 不请求起点实时接口,只读取最后执行日志:
```text
qdreader_last_run_json # 当日/当前批次
qdreader_last_result_json # 每个 uid 当日/当前批次结果
qdreader_archive_json # 每日零点归档后的历史批次
```
因此“查询”语义是“最近签到记录/最后执行日志”。刚添加但从未执行过的账号会显示“暂无执行记录”。如果当日日志已被零点任务清空,`启点查询` 会回退到最近归档,根据归档中的账号结果判断昨日/历史签到情况并反馈给用户。
## 本地验证
```bash
node -c plugins/qdreader/qdreader_sign_autman.js
node -c js/qdreader_sign_autman.js
node tests/qdreader_plugin.test.mjs
```