From 21e4a7a3ae1e7b894a5d69cfe5823546728faf24 Mon Sep 17 00:00:00 2001 From: zhuhjay Date: Sat, 7 Nov 2026 18:59:00 +0800 Subject: [PATCH] =?UTF-8?q?docs(qqmusic):=20README=20=E8=A1=A5=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=88=86=E7=BB=84=E4=B8=8E=E6=89=A7=E8=A1=8C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=AB=A0=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通知样例换成新的分组格式(📈 任务中心 / 🎁 会员福利站 / 💰 金币中心 / 🎫 VIP 体验券),并加分组规则表与「新增任务要补 step() 且用两段式名」的提醒。 新增「执行日志」章节:四段分隔标题的样例输出,说明末尾两行为什么要有第二行 (光看成长值合计看不出金币跑没跑),以及金币段开头打 ActID 的用途。 本地测试清单补 test_coin.js / test_render.js。 --- qqmusic/README.md | 84 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 14 deletions(-) diff --git a/qqmusic/README.md b/qqmusic/README.md index 2964296..63898f3 100644 --- a/qqmusic/README.md +++ b/qqmusic/README.md @@ -157,34 +157,56 @@ cron: 1 0,6 * * * ## 通知内容 -每轮跑完推送一条,格式固定: +每轮跑完推送一条。**按体系分组**,每条都带子项名,一眼看出是什么签到完成了: ``` ✅ QQ音乐签到 · 全部完成 -🟢 123456789:成长值 +35 - ✓ 任务中心签到 +15 - ✓ 挂件 retCode 0 - ✓ 领奖·头像挂件 +10 - ✓ 福利站签到 5成长值(本月 12 天) - △ 领奖·收听节目 未计次,待 App 内收听 - · 无需处理 3 项:福利站礼券、月里程碑、分享卡 - 🎁 分享卡 https://y.qq.com/m/vip/experience_card/dist/index.html?cardid=xxx +🟢 123456789:成长值 +45 + 📈 任务中心(成长值) + ✓ 签到 +15 + ✓ 挂件 已佩戴 + ✓ 节目 计数 3 + · 无需处理 2 项:装扮、听书 + 🎁 会员福利站(成长值 + 权益) + ✓ 签到 15成长值(本月 8 天) + ✓ 礼券 +10 心愿值 + · 无需处理 4 项:旅程激励、月里程碑、月礼、臻享抽奖 + 💰 金币中心(金币,不计成长值) + ✓ 签到 已签 + 30 金币 + ✓ 抽奖签到 已签 + 已领 + 🎫 VIP 体验券 + ✓ 分享卡 新建 1 张,还能被领 3 次 + 🔗 领卡链接 https://y.qq.com/m/vip/experience_card/dist/index.html?cardid=xxx ——— 轮次: 00:01 / 06:02 双轮(任务20跨天滚动 + 福利站兜底) 节目任务(20)依赖 App 内正常收听计入(播放上报未启用) -时间: 2026/11/4 23:10:05 +时间: 2026/11/7 00:01:24 ``` **标题就是结论**:`✅ 全部完成` / `⚠️ 有未完成项`,不用点开就知道要不要管。 -每个账号下分四类: +### 分组规则 + +| 组 | emoji | 说明 | +|---|---|---| +| 任务中心 | 📈 | 成长值,`music.lvz.*` | +| 会员福利站 | 🎁 | 成长值 + 权益,`music.vipcgi.*` | +| 金币中心 | 💰 | **金币,不计成长值**,`music.actCenter.*` | +| VIP 体验券 | 🎫 | 分享卡 | +| 其他 | 📌 | 兜底,未知前缀落这里 | + +- 组内每条都是「**子项名 + detail**」,不会出现只有 detail 的行 +- **整组全 skip 时收成一行**:`💰 金币中心(金币,不计成长值):签到、抽奖签到 今日无需处理` +- 金币组标题固定带「不计成长值」,避免 `+30 金币` 被读成成长值 + +### 符号 | 符号 | 含义 | |---|---| -| `✓` | 做到了(带结果,如 `+15`、`retCode 0`) | -| `△` | 部分完成 / 留待下次(如任务20未计次、写锁) | +| `✓` | 做到了(带结果,如 `+15`、`已佩戴`) | +| `△` | 部分完成 / 留待下次(如任务20未计次、写锁、ActID 过期) | | `✗` | 失败(接口报错、code 非预期) | | `·` | 无需处理(今日已完成 / 未开放),**折叠成一行**,不占版面 | @@ -192,7 +214,39 @@ cron: 1 0,6 * * * 全 `✓`/`·` → `✅`。登录态失效单独用 🔴 并直接给处理指引,不进明细列表。 明细来源是 `QMClient.steps`:每个动作调一次 `step(name, status, detail)`, -`verdict()` 汇总。新增任务时记得补一句 `step()`,否则它在通知里不可见。 +`verdict()` 汇总。**新增任务时记得补一句 `step()`,且 name 用「体系·子项」两段式**, +否则它在通知里会被归到「其他」组。 + +## 执行日志 + +日志前缀同样是「体系·子项」两段,`run()` 里还有四段分隔标题: + +``` +───── ① 任务中心(成长值)───── +[任务中心·签到] 签到成功 成长值+15 +[任务中心·挂件] UsePendant retCode:0 +[任务中心·节目] 开始标记已挂(播放上报未启用,App 内正常收听计入) + +───── ② 会员福利站(成长值 + 权益)───── +[福利站·签到] 签到成功:15成长值(本月 9 天) +[福利站·礼券] 某券 领取成功 +10心愿值 + +───── ③ 金币中心(金币,不计入成长值)───── +[金币·签到] 开始:ActID=Z25hHGi ScenesID=2 +[金币·签到] 签到并领取成功:30 金币 +[金币·抽奖签到] 开始:ActID=Z156KEu +[金币·抽奖签到] 今日已签 + +───── ④ VIP 体验券(分享卡)───── +[分享卡] 只读模式(QM_SHARE_CARD 未置 on),不创建新卡 + +[QQ音乐] 本次新增成长值合计: 45 +[QQ音乐] 金币中心为独立体系,不产成长值(明细见上方 ③ 段) +``` + +**最后两行是关键**:光看「成长值合计: 45」不知道金币那部分跑没跑,所以补了第二行说明。 + +金币段开头会打 `ActID=...`,换季排查时直接能看到脚本用的是哪个 ID。 ## 通知发不出去怎么查 @@ -390,6 +444,8 @@ node scrip_qqmusic_checkin.js # 无 env 时优雅跳过 SH_QQMUSIC_KEY='123#Q_H_L_x' node -e "console.log(require('./scrip_qqmusic_checkin').parseAccounts())" node test_sign_run.js # 签名对拍(需先 python test_sign_vector.py 生成期望) +node test_coin.js # 金币中心 19 条断言(mock https,不联网) +node test_render.js # 通知分组 24 条断言(纯函数,不联网) node ../test_common_notify.js # 通知实现(69 条断言,见仓库根 README) node ../_probe_meta.js # 青龙元数据注解 ```