docs: capture qdreader plugin menu patterns

This commit is contained in:
2026-05-17 10:42:13 +08:00
parent d9ff1d94b2
commit bcba339fd8
5 changed files with 809 additions and 204 deletions
+62
View File
@@ -523,3 +523,65 @@ Content-Type: application/json
- SimAdmin API 业务失败要检查 JSON 内 `status === "error"`
- 发送短信必须 token 或管理员控制。
- Base URL 默认不带尾部 `/`,代码内统一 trim。
## 13. 账号/Cookie 类插件菜单设计经验(QDReader 复盘)
最近制作 `plugins/qdreader/qdreader_sign_autman.js` 时沉淀出一套适用于账号/Cookie 管理类插件的交互与数据规则,后续新插件优先复用:
### 13.1 交互结构
- 优先做“一级菜单 + 二级编号选择”,不要堆很多平铺子命令。
- 账号管理和执行查询分离:
- `xxx账号`:只做账号列表、添加/更新、详情/备注、删除、清空。
- `xxx查询`:只做最近执行情况、单账号执行情况、立即执行等执行侧动作。
- 高频输入可以保留快速通道,例如 `xxxck <cookie>`,但快速通道只做快速提交,不再混入查询/导出/批量导入。
- 用户选择账号时展示编号列表,让用户回复编号;不要让用户手动复制/输入 UID。
- 添加/更新账号成功后立刻询问是否添加备注;备注修改放在账号详情里,不单独做一个割裂的备注菜单。
### 13.2 数据结构
账号/Cookie 类插件不要把 Cookie、用户绑定、备注、执行状态混在一起,建议拆成独立 map:
```json
// cookie_json
{ "uid": "full cookie" }
// user_bind_json
{ "uid": "sender.getUserID()" }
// remark_json
{ "uid": "主号" }
// last_result_json
{ "uid": "{\"ok\":true,\"msg\":\"成功\",\"time\":\"...\"}" }
```
这样删除、过滤、展示和权限校验更安全。
### 13.3 数据桶
- 新插件应创建自己的 bucket,例如 `hermes_qidian`,不要所有插件都塞进 `otto`
- 如需兼容旧数据,读顺序建议:
```text
bucketGet("插件专属bucket", key)
↓ fallback
get(key)
↓ fallback
bucketGet("otto", key)
```
- 写入新数据时写到专属 bucket,可同时写普通 `set(key)` 保持兼容。
### 13.4 多用户隔离
- 保存账号时绑定当前用户 ID。
- 账号列表、详情、删除、手动执行只处理当前用户绑定的账号。
- `删除全部` 只删除当前用户账号,不清空全局数据。
- cron/系统触发通常没有用户上下文,是否执行全部账号要显式传 `allUsers` 参数,并在代码和测试里说明。
### 13.5 安全与测试
- 普通回复永远不要输出完整 Cookie;只展示脱敏 UID、备注、Cookie key 摘要或长度。
- 高风险的导出/批量导入功能默认不做,除非 BOSS 明确需要。
- Node VM 测试应模拟:`sender.reply``sender.listen``sender.getUserID``get/set``bucketGet/bucketSet``request`
- 测试必须覆盖:快速提交、菜单添加、备注提示、详情改备注、编号选择删除/查询、旧 bucket 兼容、新 bucket 写入、用户隔离、手动执行只跑当前用户、cron 跑全部账号。