From 81976fb18b5b3cad3bc39ec918aa0a87eae7b748 Mon Sep 17 00:00:00 2001 From: zhuhjay Date: Thu, 5 Nov 2026 20:49:25 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"feat(qqmusic):=20=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E5=B8=A6=E7=BB=93=E8=AE=BA=20+=20=E9=A6=96=E8=A1=8C=E6=94=BE?= =?UTF-8?q?=E6=91=98=E8=A6=81=EF=BC=8C=E6=8A=98=E5=8F=A0=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B9=9F=E8=83=BD=E7=9C=8B=E5=85=B3=E9=94=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit f5c9ca6fa137197f7173ad2d057653d872cf95f3. --- qqmusic/README.md | 72 ++++++++------------------------ qqmusic/scrip_qqmusic_checkin.js | 30 ++++--------- 2 files changed, 24 insertions(+), 78 deletions(-) diff --git a/qqmusic/README.md b/qqmusic/README.md index c891ed2..f634e38 100644 --- a/qqmusic/README.md +++ b/qqmusic/README.md @@ -142,81 +142,43 @@ cron: 1 0,6 * * * ## 通知内容 -### 为什么标题和首行才是关键 - -pushplus 的微信渠道用的是**公众号模板消息**,官方明确: - -> 为了避免不必要的麻烦,使用 pushplus 的服务号推送模板消息**默认是不展示具体的消息内容的**, -> 需要点击链接后查看内容详情。 -> —— [pushplus 文档 · 如何直接在服务号中显示推送内容](https://pushplus.plus/doc/help/showmessage.html) - -所以通知栏能看到的只有:**标题 + 正文第一行**。后面的明细一律折叠。 - -三条官方解法(都要额外成本): - -| 方案 | 代价 | -|---|---| -| 在服务号发「激活消息」 | 24 小时内只有 5 条走客服消息,之后要重新激活 | -| 开通 pushplus 会员 | 付费,模板能多显示一部分 | -| 绑定自己的服务号 | 企业/个体工商户认证,每年 300 元 | - -**所以在不改通道的前提下,唯一能做的就是:把关键信息压进标题和首行。** - -### 现在的格式 +每轮跑完推送一条,格式固定: ``` -标题:QQ音乐签到 ✅ -首行:✅ 全部完成 · 成长值 +35 +✅ QQ音乐签到 · 全部完成 -🟢 1006764347:成长值 +35 +🟢 123456789:成长值 +35 ✓ 任务中心签到 +15 + ✓ 挂件 retCode 0 ✓ 领奖·头像挂件 +10 - · 无需处理 1 项:福利站礼券 + ✓ 福利站签到 5成长值(本月 12 天) + △ 领奖·收听节目 未计次,待 App 内收听 + · 无需处理 3 项:福利站礼券、月里程碑、分享卡 + 🎁 分享卡 https://y.qq.com/m/vip/experience_card/dist/index.html?cardid=xxx ——— -轮次: 00:01 / 06:02 双轮 -时间: 2026/11/5 20:10:33 +轮次: 00:01 / 06:02 双轮(任务20跨天滚动 + 福利站兜底) +节目任务(20)依赖 App 内正常收听计入(播放上报未启用) +时间: 2026/11/4 23:10:05 ``` -**折叠状态下就能看到 `QQ音乐签到 ✅` 和 `✅ 全部完成 · 成长值 +35`**,够判断要不要点开。 +**标题就是结论**:`✅ 全部完成` / `⚠️ 有未完成项`,不用点开就知道要不要管。 -### 三态结论 - -| state | 标题 | 首行 | 触发条件 | -|---|---|---|---| -| `done` | `QQ音乐签到 ✅` | `✅ 全部完成 · 成长值 +N` | 全 `✓` 或 `·` | -| `warn` | `QQ音乐签到 🟡` | `✅ 已完成 · 成长值 +N · K 项待处理` | 有 `△` 但无 `✗` | -| `fail` | `QQ音乐签到 ⚠️` | `⚠️ 有未完成项 · 成长值 +N · K 项待处理` | 有 `✗` 或登录失效 | - -`warn` 仍算「完成」——任务20 等 App 内收听属于正常遗留,不该报成失败。 - -### 明细的四个符号 +每个账号下分四类: | 符号 | 含义 | |---|---| | `✓` | 做到了(带结果,如 `+15`、`retCode 0`) | -| `△` | 部分完成 / 留待下次(任务20未计次、写锁) | +| `△` | 部分完成 / 留待下次(如任务20未计次、写锁) | | `✗` | 失败(接口报错、code 非预期) | -| `·` | 无需处理(今日已完成 / 未开放),**折叠成一行** | +| `·` | 无需处理(今日已完成 / 未开放),**折叠成一行**,不占版面 | -`·` 折叠而不是省略 —— 折叠能看出「今天该做的都做了」,省略会让人怀疑漏跑。 +判定规则:有任何 `✗` → 标题变 `⚠️`;只有 `△` → 仍算完成(有遗留但不影响); +全 `✓`/`·` → `✅`。登录态失效单独用 🔴 并直接给处理指引,不进明细列表。 明细来源是 `QMClient.steps`:每个动作调一次 `step(name, status, detail)`, `verdict()` 汇总。新增任务时记得补一句 `step()`,否则它在通知里不可见。 -### 两个细节 - -**① 标题只放状态、不放数字。** 平台的抑制指纹是 -`sha256(kind|credId|title.replace(/[\d\s]+/g, ''))` —— 数字本来就会被剥掉, -标题带 `+35` 和 `+15` 算同一个指纹,不会破坏「1 小时同指纹只发一条」。 - -**② 调用时第四参传空串**,否则 `sendNotify` 会往正文尾部追加 -`本通知 By:https://github.com/whyour/qinglong`,这行会一起进 `notify_events.content`。 - -```js -await sendNotifyFn(title, desp, {}, '') -``` - ## 通知发不出去怎么查 ```bash diff --git a/qqmusic/scrip_qqmusic_checkin.js b/qqmusic/scrip_qqmusic_checkin.js index d37f8e6..08774da 100644 --- a/qqmusic/scrip_qqmusic_checkin.js +++ b/qqmusic/scrip_qqmusic_checkin.js @@ -834,7 +834,7 @@ async function main() { return } - const blocks = { body: [], total: 0, warn: 0 } + const blocks = [] let allDone = true for (const a of accounts) { log(`\n===== 账号 ${a.uin} =====`) @@ -843,46 +843,30 @@ async function main() { const r = await cli.run() if (r.dead) { allDone = false - blocks.warn += 1 - blocks.body.push(`🔴 ${a.uin}:登录态失效\n └ 请重新在网页抓 qm_keyst 更新 env`) + blocks.push(`🔴 ${a.uin}:登录态失效\n └ 请重新在网页抓 qm_keyst 更新 env`) continue } - blocks.total += r.total || 0 - blocks.warn += (r.steps || []).filter(s => s.status === 'warn' || s.status === 'fail').length if (r.verdict === 'fail') allDone = false - blocks.body.push(renderAccount(a.uin, r)) + blocks.push(renderAccount(a.uin, r)) } catch (e) { allDone = false - blocks.warn += 1 log(`[QQ音乐] 账号 ${a.uin} 运行异常: ${e.message}`) - blocks.body.push(`🔴 ${a.uin}:运行异常\n └ ${e.message}`) + blocks.push(`🔴 ${a.uin}:运行异常\n └ ${e.message}`) } } - // 三态结论:全好 / 有遗留(不影响主流程)/ 有失败或失效 - const state = !allDone ? 'fail' : (blocks.warn > 0 ? 'warn' : 'done') - const head = { done: '✅ 全部完成', warn: '✅ 已完成', fail: '⚠️ 有未完成项' }[state] - // 摘要行放最前面:pushplus 的微信模板消息默认只展示标题 + 正文开头, - // 不点开「查看详情」看不到后面。所以把关键数字压进第一行,折叠也能看到。 - const sum = accounts.length === 1 - ? `成长值 +${blocks.total}${blocks.warn ? ` · ${blocks.warn} 项待处理` : ''}` - : `${accounts.length} 个账号 · 成长值 +${blocks.total}${blocks.warn ? ` · ${blocks.warn} 项待处理` : ''}` - const desp = [`${head} · ${sum}`, '', ...blocks.body].join('\n') + const head = allDone ? '✅ QQ音乐签到 · 全部完成' : '⚠️ QQ音乐签到 · 有未完成项' + const desp = [head, '', ...blocks].join('\n') + `\n\n———` + `\n轮次: 00:01 / 06:02 双轮(任务20跨天滚动 + 福利站兜底)` + `\n节目任务(20)依赖 App 内正常收听计入(播放上报未启用)` + `\n时间: ${new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}` - // 标题只放状态、不放数字:平台的抑制指纹是 sha256(kind|credId|title去数字), - // 标题带数字会被 titleKeyOf 剥掉,指纹仍然稳定,抑制不会失效。 - const title = `QQ音乐签到 ${{ done: '✅', warn: '🟡', fail: '⚠️' }[state]}` let sendNotifyFn = null try { sendNotifyFn = require('../sendNotify').sendNotify } catch (e) { // 静默吞掉会让「通知没发出去」完全不可见 —— 必须留一行,否则只能靠猜 log(`[通知] sendNotify 不可用(${e.message.split('\n')[0]}),本轮不发推送`) } if (sendNotifyFn) { - // 第四参传空串:默认会往正文尾部追加「本通知 By:github.com/whyour/qinglong」, - // 平台转发时这行也会进 notify_events.content,纯噪音。 - try { await sendNotifyFn(title, desp, {}, '') } catch (e) { log(`[通知] 推送失败: ${e.message}`) } + try { await sendNotifyFn('QQ音乐签到', desp) } catch (e) { log(`[通知] 推送失败: ${e.message}`) } } log(`\n===== 汇总 =====\n${desp}`) }