koishi-plugin-kkk 3.13.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +394 -109
  2. package/assets/web/assets/index-BRROK0vh.js +1 -1
  3. package/docs/upstream-audit-2026-10b.md +251 -0
  4. package/lib/build-metadata.json +5 -5
  5. package/lib/compat/adapter-info.js +171 -26
  6. package/lib/compat/fold.js +93 -8
  7. package/lib/compat/imageMarkdown.js +39 -17
  8. package/lib/compat/net.js +54 -0
  9. package/lib/compat/node-karin.js +350 -16
  10. package/lib/compat/sendError.js +15 -0
  11. package/lib/index.js +219 -102
  12. package/lib/karin/apps/help.js +21 -3
  13. package/lib/karin/apps/testPush.js +2 -4
  14. package/lib/karin/apps/tools.js +62 -6
  15. package/lib/karin/module/server/constants/routes.js +4 -4
  16. package/lib/karin/module/server/controllers/video.js +32 -42
  17. package/lib/karin/module/utils/Base.js +69 -25
  18. package/lib/karin/module/utils/CommentPics.js +13 -1
  19. package/lib/karin/module/utils/Common.js +83 -49
  20. package/lib/karin/module/utils/EmojiReaction.js +22 -1
  21. package/lib/karin/module/utils/ErrorHandler/render.js +31 -6
  22. package/lib/karin/module/utils/ImageSlice.js +73 -26
  23. package/lib/karin/module/utils/ParseForward.js +18 -3
  24. package/lib/karin/module/utils/QqPanel.js +181 -14
  25. package/lib/karin/module/utils/ReactionPanel.js +2071 -0
  26. package/lib/karin/module/utils/Render/index.js +2 -0
  27. package/lib/karin/module/utils/amagiClient.js +12 -0
  28. package/lib/karin/module/utils/emojiAssets.js +64 -0
  29. package/lib/karin/module/utils/loginSession.js +11 -0
  30. package/lib/karin/module/utils/runtime-report.js +8 -2
  31. package/lib/karin/platform/bilibili/bilibili.js +60 -19
  32. package/lib/karin/platform/bilibili/interactive-story.js +123 -10
  33. package/lib/karin/platform/bilibili/riskControl.js +10 -1
  34. package/lib/karin/platform/douyin/douyin.js +52 -18
  35. package/lib/karin/platform/douyin/getID.js +29 -8
  36. package/lib/karin/platform/douyin/liveParams.js +23 -0
  37. package/lib/karin/platform/douyin/login.js +11 -0
  38. package/lib/karin/platform/douyin/push/live.js +2 -4
  39. package/lib/karin/platform/kuaishou/kuaishou.js +1 -2
  40. package/lib/karin/platform/xiaohongshu/getID.js +28 -6
  41. package/lib/karin/platform/xiaohongshu/xiaohongshu.js +2 -3
  42. package/lib/karin/setup.js +7 -0
  43. package/lib/ktr/template/bilibili/qrcodeImg/components/qrcodeImg.js +1 -1
  44. package/lib/ktr/template/douyin/qrcodeImg/components/qrcodeImg.js +1 -1
  45. package/lib/ktr/template/other/handlerError/components/handlerError.js +38 -8
  46. package/lib/player/index.js +4 -42
  47. package/lib/qqFields.json +38 -0
  48. package/lib/richtext/parse/emojiAssets.generated.js +3806 -0
  49. package/lib/richtext/parse/index.js +30 -2
  50. package/lib/richtext/parse/unicodeEmoji.js +119 -0
  51. package/lib/verify/index.js +263 -0
  52. package/lib/verify/page.js +282 -0
  53. package/lib/verify/riskStrategy.js +89 -0
  54. package/lib/webui.js +88 -43
  55. package/package.json +6 -2
  56. package/scripts/build.mjs +38 -0
  57. package/scripts/gen-emoji-assets.mjs +42 -0
  58. package/scripts/patch-webui.mjs +20 -6
  59. package/scripts/probe-adapter-info.cjs +327 -0
  60. package/scripts/probe-amagi-runtime.cjs +96 -0
  61. package/scripts/probe-extract-buttons.cjs +183 -3
  62. package/scripts/probe-fold-blob.cjs +113 -0
  63. package/scripts/probe-group-file-name.cjs +40 -3
  64. package/scripts/probe-onebot-no-markdown.cjs +286 -0
  65. package/scripts/probe-onebot-reaction-panel.cjs +2413 -0
  66. package/scripts/probe-richtext-emoji.cjs +216 -0
  67. package/scripts/probe-verify-page.cjs +345 -0
  68. package/scripts/probe-webui-access.cjs +224 -0
  69. package/src/compat/adapter-info.ts +184 -23
  70. package/src/compat/fold.ts +84 -9
  71. package/src/compat/imageMarkdown.ts +368 -342
  72. package/src/compat/net.ts +47 -0
  73. package/src/compat/node-karin.ts +2001 -1682
  74. package/src/compat/runtime.ts +151 -140
  75. package/src/compat/sendError.ts +14 -0
  76. package/src/index.ts +1449 -1327
  77. package/src/karin/apps/help.ts +21 -3
  78. package/src/karin/apps/testPush.ts +4 -4
  79. package/src/karin/apps/tools.ts +64 -6
  80. package/src/karin/module/server/constants/routes.ts +4 -4
  81. package/src/karin/module/server/controllers/video.ts +33 -45
  82. package/src/karin/module/utils/Base.ts +75 -36
  83. package/src/karin/module/utils/CommentPics.ts +13 -1
  84. package/src/karin/module/utils/Common.ts +81 -58
  85. package/src/karin/module/utils/EmojiReaction.ts +21 -1
  86. package/src/karin/module/utils/ErrorHandler/render.ts +32 -6
  87. package/src/karin/module/utils/ImageSlice.ts +71 -26
  88. package/src/karin/module/utils/ParseForward.ts +369 -354
  89. package/src/karin/module/utils/QqPanel.ts +191 -22
  90. package/src/karin/module/utils/ReactionPanel.ts +2467 -0
  91. package/src/karin/module/utils/Render/index.ts +2 -0
  92. package/src/karin/module/utils/amagiClient.ts +14 -0
  93. package/src/karin/module/utils/emojiAssets.ts +69 -0
  94. package/src/karin/module/utils/loginSession.ts +12 -0
  95. package/src/karin/module/utils/runtime-report.ts +8 -2
  96. package/src/karin/platform/bilibili/bilibili.ts +2969 -2936
  97. package/src/karin/platform/bilibili/interactive-story.ts +139 -10
  98. package/src/karin/platform/bilibili/riskControl.ts +10 -1
  99. package/src/karin/platform/douyin/douyin.ts +1451 -1416
  100. package/src/karin/platform/douyin/getID.ts +29 -8
  101. package/src/karin/platform/douyin/liveParams.ts +20 -0
  102. package/src/karin/platform/douyin/login.ts +11 -0
  103. package/src/karin/platform/douyin/push/live.ts +4 -4
  104. package/src/karin/platform/kuaishou/kuaishou.ts +260 -261
  105. package/src/karin/platform/xiaohongshu/getID.ts +28 -6
  106. package/src/karin/platform/xiaohongshu/xiaohongshu.ts +900 -901
  107. package/src/karin/setup.ts +7 -0
  108. package/src/karin/types/config/app.ts +1 -1
  109. package/src/karin/types/config/bilibili.ts +1 -1
  110. package/src/karin/types/config/douyin.ts +1 -1
  111. package/src/karin/types/config/kuaishou.ts +1 -1
  112. package/src/karin/types/config/xiaohongshu.ts +1 -1
  113. package/src/ktr/template/bilibili/qrcodeImg/components/qrcodeImg.tsx +179 -179
  114. package/src/ktr/template/douyin/qrcodeImg/components/qrcodeImg.tsx +170 -170
  115. package/src/ktr/template/other/handlerError/components/handlerError.tsx +59 -8
  116. package/src/ktr/template/other/handlerError/components/types.ts +18 -3
  117. package/src/player/index.ts +1 -38
  118. package/src/qqFields.json +286 -248
  119. package/src/richtext/parse/emojiAssets.generated.ts +3803 -0
  120. package/src/richtext/parse/index.ts +20 -1
  121. package/src/richtext/parse/unicodeEmoji.ts +144 -0
  122. package/src/verify/index.ts +260 -0
  123. package/src/verify/page.ts +289 -0
  124. package/src/verify/riskStrategy.ts +91 -0
  125. package/src/webui.ts +88 -37
package/CHANGELOG.md CHANGED
@@ -1,60 +1,349 @@
1
1
  # 更新日志
2
2
 
3
+ ## 4.0.0
4
+
5
+ > 这是 3.0 之后攒的一次大版本。下面把 **3.0 到 4.0 之间所有你用得出来的变化**
6
+ > 按「用起来是什么样」重新整理了一遍 —— 只说你能看到、能感觉到的事。
7
+ > 一路跟着升上来的话,大部分你已经用到了,可以直接跳过。
8
+
9
+ ### 出图快了很多
10
+
11
+ - 卡片以前要半分钟才出来,现在**两三秒**。卡面上那层几乎看不出区别的噪点默认去掉了,
12
+ 它要一个像素一个像素地算,占掉九成时间;想要颗粒感可以在设置里换成小图案平铺,仍然比原来快很多。
13
+ - 信息卡、评论区、图集、视频**各走各的**,谁先准备好谁先发,不再互相等。
14
+ - 每张卡片该按几倍分辨率渲染,会自己测一次、记住快的那档,不用你管。
15
+
16
+ ### 图片清楚了,也不会再发糊
17
+
18
+ - 卡片、评论图、图集里的图现在都按**不会被二次压缩的方式**发,卡片上的小字不再糊成一团。
19
+ - 图片**不会再被拉变形**:显示的尺寸一律按真实宽高来,量不到就退回普通图片(会糊一点,但比例是对的)。
20
+ - 超过一定高度的图会自动切开再发,不会再「先整张发一遍、被退回来才补切」。
21
+ - 同一张图不会反复上传,也不会发两遍。
22
+
23
+ ### 该发出去的,真的发出去了
24
+
25
+ - 发送失败现在**按平台给的原因**分别处理:看到「文件太大」就直接切成几张,不白等、也不重复传。
26
+ - **大文件下不完**的问题修了:下载源卡住会自动换一个,只要还在传数据就不会被掐断,
27
+ 报错也不再说成「连接被重置」那种看不懂的话。
28
+ - 快手那种好几行的长标题,以前会让视频**整个发不出来**,现在会先把名字收拾干净,还是被退就换个名字再发。
29
+ - 发特别大的视频时偶尔冒出来的一句看不懂的报错,已修。
30
+ - 没拿到发送结果就是没发出去,不再当成成功悄悄丢掉。
31
+
32
+ ### 选清晰度:所有平台都能选了
33
+
34
+ - 以前只有官方 QQ 机器人能在面板上点着选,其它平台直接按设置里写死的画质走。
35
+ 现在**所有平台**发链接后都会先给一份列表,**回序号就能选**。
36
+ - QQ 系(NapCat、LLOneBot 这些)还能**用表情当按钮**:点第几个表情就是第几档。
37
+ 个别会把行内文字吞掉的协议端,表情会排在最后一行,并写明「从左到右数第几个」。
38
+ - 等多久可以自己设(默认 60 秒)。**到点没人选就按默认画质继续解析**,不会把链接一直晾着。
39
+ - 没勾「发送视频」时不会再多问一句画质。
40
+ - **「提取封面图」并进了这张面板**:最右边多一个「对的对的」表情,贴它就把封面单独提出来,
41
+ 而且**提完面板还在**,可以接着选清晰度。
42
+
43
+ ### 卡片下面能单独取图
44
+
45
+ - 卡片下面多了「提取封面图」「提取评论区图片」两个按钮,B站 / 抖音 / 小红书 / 快手都有。
46
+ - **同一个按钮只放行一次**,再点不会刷屏 —— 想再要一次,重新发一遍链接就行。
47
+ 自己手敲指令不受这个限制。
48
+ - 开了「是否收集评论区的图片」时,解析完会直接把评论里的图发一条,按钮不再重复挂。
49
+
50
+ ### 互动视频能一路选着玩了
51
+
52
+ - 群里发一条互动视频链接,**选项就浮在播放页的画面上**,点一条接着播下一段,全屏也看得见、点得动。
53
+ - 点完能看到下一段的下载进度,失败会给「重试这一段」,不用刷新整页;下过的段会留着,再点回去是秒开。
54
+ - **剧情图**:把整条剧情画成一张图,走过的分支加粗高亮,结局在哪一目了然(开关默认关)。
55
+ - 互动视频不再被体积上限拦住,下完才检查一次;太大的段给你播放链接,剧情照样接着玩。
56
+ - 弹幕更全了:以前轨道被白字弹幕占满后,彩色弹幕和顶部弹幕基本轮不到显示,现在会按比例抽稀,留位置给它们。
57
+
58
+ ### 在线播放
59
+
60
+ - **默认不在服务器上把画面和声音合成一个文件**,打开就能放;下载分成「画面」「声音」「合成后」三个。
61
+ - 播放页上多了一行**原视频地址**,点了能在新窗口打开原站。
62
+ - 机器人重启之后,之前发出去的播放链接**照样能选剧情**。
63
+
64
+ ### 合并转发
65
+
66
+ - 两种开法:通用里打开 = 所有平台都合并;或者只在某一个平台单独打开。**默认全关**。
67
+ - 可以自己挑合并哪些内容:文字 / 图片 / 视频 / 文件,**还有流程图和评论区图片**。
68
+ - 每条内容各占一个条目,图片不会再因为挤在一条里而全部加载不出来。
69
+ - 转发失败不会丢内容,会自动退回一条条发;开着合并转发时选清晰度也不会再卡住。
70
+
71
+ ### 出错了会怎么样
72
+
73
+ - 出错时会自动把**错误信息、运行环境、最近的日志**上传,并给你一个**编号**,
74
+ 带着编号进群求助就行,不用再截图、翻日志。**Cookie 一律不传**,像密钥那类字段一律打码。
75
+ - 嫌那张错误卡片占地方,可以打开「**出错只发文字**」,只在群里留一行「已上传,ID:xxx」。
76
+ - 错误卡片**不会再渲染十几分钟**,超长内容会自动折叠,几秒钟就出来。
77
+ - 机器人掉线时不再甩一句英文,会直说「机器人当前不在线,等上线后下次推送会正常发出」。
78
+ - 抖音没返回数据时不再扔一句英文,会说清是哪一类问题、常见原因是什么。
79
+ - 被反爬页、风控拦下那类失败,卡片上会多一块**平台真正回的内容**,不用再照着一句套话猜。
80
+ - 日志只传本插件相关的部分,不再把整台机器的日志尾巴都传上去。
81
+
82
+ ### 平台这块
83
+
84
+ - **抖音**:抖音改了风控规则,**换 cookie 是没用的** —— 是解析用的库太旧。已经换到带新签名的新版本,
85
+ 作品详情、评论区、弹幕都正常。剧集(合集里的正片)以前走的分支不对,也修了。
86
+ - **快手、小红书**:评论区以前渲染不出来、或者一解析就报错,现在都能正常显示。
87
+ - **小红书**图文笔记的图集以前会一次发两遍,现在只发一遍;关掉「图片」是真的不发了。
88
+ - **卡片解析**:B 站卡片认错 UP 主的问题修了(首行、UP 主前后行都当候选);
89
+ 候选列表在个人号上也发得出来了(改成纯文本,一条条列标题和链接)。
90
+ - 评论、动态正文里的 emoji 以前在群里显示成**一个个方框**,现在换成苹果的表情图来画,
91
+ 肤色、国旗、`9️⃣` 这类组合也都认。
92
+
93
+ ### 卡片上的小修小补
94
+
95
+ - B站卡片的**简介**以前会整块不见,现在单行、多行、带 @ 和链接的都正常(QQ 面板那张也一起修了)。
96
+ - 实况照片那张提示卡以前在群里显示成一坨(间距全没、图标只剩两三个),已修。
97
+ - 评论卡右下角的二维码**中间带上作者头像**了(B站 / 快手 / 小红书,和抖音统一)。
98
+ - 一批卡片标题和数字的字号从最粗降到次粗,小尺寸下不再糊成一团。
99
+ - 抖音评论图里的二维码地址统一成规范短链,扫出来的地址稳定;
100
+ 登录二维码在部分机器上显示成一片方格的问题也修了。
101
+ - 抖音推送不会因为「去重记录到期」就把还在列表里的历史作品重复推一遍。
102
+
103
+ ### 设置和控制台
104
+
105
+ - 控制台里 40 条指令收进了 `kkk` 一个分组;`解析 <链接>` 这几种写法照旧都能用。
106
+ - 控制台插件配置页里的设置**全部隐藏**(避免两个界面各改一半互相覆盖),统一在 `/kkk` 面板里改;
107
+ 面板里多了「Koishi 设置」一组,以前只能在控制台改的几项现在也能在面板改。
108
+ - 面板里 200 多项设置全部显示、全部展开,说明都改成了看得懂的说法。
109
+ - 只支持**浏览器渲染**了:老的内置方案在 Windows 上加载不了网络图片,
110
+ 卡片里的封面、头像一直是空白框。装一个浏览器渲染插件即可。
111
+
112
+ ### 升级要注意
113
+
114
+ - **数据存放方式变了**:不再自己在数据目录里开数据库文件,全部改用 Koishi 自带的数据库,
115
+ 备份和迁移跟着你的宿主走。**代价:过滤词 / 过滤标签和解析统计历史会从零开始**
116
+ (订阅关系不受影响,每次启动自动重建)。
117
+ - 数据库服务变成**必选**,没配置数据库时插件不会加载。
118
+ - 以前在 MySQL 上建出过半截表的,需要先删掉再启动,让插件按新定义重建。
119
+ - 升级完**重启一次机器人**,并建议实测一次抖音解析。
120
+
121
+ ## 3.14.0
122
+
123
+ 这一版把「选清晰度」这件事带到了 OneBot 平台(NapCat / Lagrange / LLOneBot 等),
124
+ 另外修掉了一处只有 OneBot 上才会露出来的显示问题。
125
+
126
+ ### 新增:OneBot 群里也能选清晰度了
127
+
128
+ 以前发链接后**直接按配置里写死的画质**解析,只有官方 QQ 机器人能在面板上选 ——
129
+ 因为 OneBot 没有 QQ 那套「markdown + 原生按钮」。
130
+
131
+ 现在改成**用表情当按钮**:机器人发一条选择消息,在下面贴一排表情,
132
+ **点第几个表情就是上面第几档**,选完还要问一句「是否在线播放」,答完才真正开始解析。
133
+ 选完这条消息和那排表情都会撤掉,群里不留垃圾。
134
+
135
+ - 消息里会把表情印在选项前面,和下面那排一一对应,照着数就行;
136
+ - 用的是 QQ 系统表情(不是 emoji 字符),老客户端 / 协议端也显示得出来;
137
+ - 开关在控制台「解析面板」分组里(**默认开**),不需要就关掉,关掉后行为和以前一样。
138
+
139
+ ### 修:OneBot 上会漏出一串看不懂的代码
140
+
141
+ 下载提示在 OneBot 上会跟着一串 `<qqbot-cmd-input ...>` 的裸文本 ——
142
+ 那是 QQ 私有的按钮标签,OneBot 不认 markdown,原样印出来就是一串乱码。
143
+ 现在只在**真的支持 markdown 的平台**上发按钮,其它平台发成一句可以直接复制的话。
144
+
145
+ ### 所有平台都能选清晰度了(不只是 QQ 系)
146
+
147
+ 上面那套表情按钮只有 QQ 系能用,其它平台以前是直接按配置里写死的画质解析。现在统一了:
148
+
149
+ - 发链接后先给一份**数字列表**,**回序号就能选**(开关「发链接后先问清晰度」,默认开);
150
+ - QQ 系(NapCat / LLOneBot 等)可以在此之上**额外**选择用表情当按钮(默认开),
151
+ 不需要就把那一个关掉,退回数字列表;
152
+ - **等多久**可以配(默认 60 秒)。到点没人点就**按配置里的默认画质继续解析**,
153
+ 不会把链接一直晾在那儿;
154
+ - LLOneBot 这类会把行内文字吞掉的协议端,表情改成排在最后一行,
155
+ 并多写一句「从左到右数第几个」。
156
+ **修:有的 LLOneBot 上选项还是会被吞**(5 档只剩「1.」和「5.」两行)——
157
+ 排法以前把「适配器叫什么」也算进判断,用 napcat 适配器连 LLOneBot 就被当成了 NapCat。
158
+ 现在**只看对面协议端自己报的名字**,报不上来就按最保险的排(表情放最后一行);
159
+ 日志里会打一行「表情排法判定:协议端 = … → …」,判成哪种一眼能看见。
160
+
161
+ ### 修:没勾「发送视频」也会问清晰度
162
+
163
+ 解析时发什么(作品信息 / 评论图片 / 视频)是分平台勾选的。以前只要开了清晰度面板,
164
+ **没勾视频也会先问一句画质**,答完才继续 —— 白问一次。
165
+ 现在没勾视频就直接跳过,该发的卡片照发。
166
+
167
+ ### 修:Milky 上图片发成一串看不懂的代码
168
+
169
+ Milky 上发图会变成 `![#420px #315px](https://…)` 这种裸文本,图一张都出不来 ——
170
+ 因为这个尺寸写法是 **QQ 官方机器人**才认的 markdown 语法,Milky 不渲染。
171
+
172
+ 「哪些平台不认 markdown」这份名单以前在四个文件里各写了一遍,**全都漏了 Milky**,
173
+ 于是它被当成「会渲染 markdown」的那类。现在名单收敛到一处,Milky 明确在不渲染那边,
174
+ 评论区图片、封面这些都改回普通图片发送。
175
+
176
+ ### 修:Satori 适配器上「收得到表情、发不出表情」
177
+
178
+ 走 Satori 适配器的协议端能收到点击、却怎么也发不出那排表情 —— 它的 Bot 上是**一个
179
+ 表情方法都没有**的(适配器按协议的方法表批量生成,而表情回应还是实验性资源、不在表里,
180
+ 连标准的那个方法都没生成)。
181
+
182
+ 现在方法找不到时会**按 Satori 协议直接发 HTTP**(`reaction.create` / `reaction.delete` /
183
+ `reaction.list`),适配器自带的连接已经带好了身份信息,照协议发就行。
184
+ 顺带 `reaction.list` 也能用了 —— 这条链路上连「谁点了」都查得到。
185
+
186
+ ### 新:Milky 上也能用表情选清晰度了
187
+
188
+ Milky 是 QQ NT 的另一套实现端,**它不是 OneBot**(没有 `set_msg_emoji_like`),
189
+ 所以以前在 Milky 上根本不会出清晰度面板。现在接上了:它的适配器给的是
190
+ **Satori 标准**的「贴表情 / 撤表情」接口,和 OneBot 那套形状完全不一样,
191
+ 两边各走各的路,功能一样(选清晰度、提取封面图、是否在线播放都能用)。
192
+
193
+ 点击这件事 Milky 反而**比 NapCat 更稳**:它的适配器把群里的表情回应直接发成标准事件,
194
+ 不像 NapCat 那条会被适配器丢掉,所以不需要机器人反复去问「谁点了」。
195
+
196
+ ### 新:「提取封面图」并进清晰度面板
197
+
198
+ 开了「发送视频」时,链接会先出清晰度面板,作品详情卡就不再单独发一次,
199
+ 而「提取封面图」原本只挂在那张卡上 —— 于是按钮整个消失。
200
+
201
+ 现在它**就在清晰度面板上**:面板最右边多一个 ✅️(对的对的),**贴它就把封面单独提出来**,
202
+ 而且**提完面板还在**,可以接着选清晰度;一直不选就按原来的超时处理(用默认画质继续解析)。
203
+ 没有表情可点的协议端上,它在数字列表里占一个序号,回那个序号效果一样。
204
+
205
+ 顺带几处小改动:
206
+
207
+ - 卡片下面那句提示现在会写明**「也可以直接给这条消息贴个表情」**
208
+ (只在真的会贴表情时才写,做不到就不写,免得照着做了没反应);
209
+ - 这个按钮的有效期从 3 分钟延长到 **10 分钟**,翻回去再点也能用;
210
+ - **提示里不再写 ✅️ 那种字符**了 —— 它在 QQ 上会显示成另一个图案,跟真贴上去的
211
+ 那个表情对不上,照着找一个对不上的图案等于白写。现在 NapCat 上把表情直接印在
212
+ 选项旁边,LLOneBot 上(那边表情只能排在最后一行)改成写「最右边那个『对的对的』」;
213
+ - 评论区图片**已经按配置直接发过**时,那条消息下面不再挂任何提示和表情。
214
+
215
+ ### 新:「合并转发内容」里可以单独勾「评论区图片」
216
+
217
+ 评论区里**用户自己贴的那些图**(就是「是否收集评论区的图片」打开时自动发出去的那一批)
218
+ 现在单独算一类,可以自己决定进不进聊天记录 —— **默认不进**:评论长图里已经把这些图画过一遍了,
219
+ 再在转发里收一份原图,同一批图会在一条记录里出现两遍,没意义。想要它进去就勾上「评论区图片」。
220
+
221
+ ### 修:开着「解析结果合并转发」时点了表情没反应
222
+
223
+ 合并转发模式下,选择提示会被先攒进转发缓冲区、拿不到真实的消息 id,
224
+ 面板拿着这个假 id 去贴表情、去等回应 —— 当然永远等不到。
225
+
226
+ 现在**先只发选择提示,选完把这些都撤回,解析结果才合并成一条转发发出去**:
227
+ 先选、后解析、再合并。
228
+
229
+ 开着合并转发时,**选清晰度这一步不再渲染作品详情卡**了 —— 只出一句选择提示,
230
+ 卡片留到你选完、真正开始解析时才渲染,于是卡片、视频、评论区**合成一条**转发出去,
231
+ 不会像之前那样先出一条「只有卡片」的转发、再出第二条。
232
+ (不开合并转发时不变:卡片照旧单独发一条,不会被选择提示那条消息一起撤掉。)
233
+
234
+ ### 修:发送大文件时报 `Maximum call stack size exceeded`
235
+
236
+ 往群里发体积较大的视频时,偶发一条看不懂的 `Maximum call stack size exceeded`,
237
+ 视频发不出来,也看不到真正的失败原因。已修。
238
+
239
+ ### 新:评论和动态里的 emoji 不再显示成方框
240
+
241
+ 评论、动态正文里大家打的 🔥、❤ 这类表情,以前在群里渲染出来是**一个个方框**
242
+ —— 生成图片的容器里没有表情字体,画不出来。
243
+
244
+ 现在改成用 Apple 的表情图来画:文字里每个表情都会被单独挑出来,换成对应的一张小图
245
+ 贴回原来的位置,肤色、国旗、`9️⃣` 这类组合形态也认得(评论里常见的「不带修饰符号」
246
+ 的 ❤ 也认)。
247
+
248
+ 这套图源是**可选依赖**,没装的话表情会退回成原来的字符,不影响其它功能。
249
+
250
+ ### 修:抖音部分账号解析被拦成 403
251
+
252
+ 抖音的网页接口现在要求带一组风控签名,少了就被拦成
253
+ `403 Blocked by ArgusSecurityPlugin Uifid Not Found` ——
254
+ 表现是**怎么换 cookie 都解析不了**,看着像 cookie 失效,其实不是。
255
+
256
+ 这套签名能力在解析库里,这次把解析库升到了带它的新版本。
257
+ **升级后建议实测一次抖音解析**(这是唯一没法离线验证的一项)。
258
+
259
+ ### 修:抖音剧集类作品走的分支不对
260
+
261
+ 剧集(合集里的正片)以前没被当成视频,走的分支不对。已修。
262
+
263
+ ### 修:抖音评论图里的二维码地址不规范
264
+
265
+ 评论区长图里那张二维码,非视频作品(图文 / 文章)的地址以前不是规范短链。
266
+ 现在统一成 `www.douyin.com` 的写法,扫出来的地址稳定。
267
+
268
+ ### 修:登录二维码在部分机器上显示成一片方格
269
+
270
+ 登录二维码那张图用了一个容器里未必存在的字体族,字族对不上时就渲染成一片方格。已修。
271
+
272
+ ### 新:解析失败时能看到平台到底回了什么
273
+
274
+ 撞上反爬页、被风控拦截那类失败,错误卡上以前只有一句「平台返回了反爬页面」
275
+ —— 那其实是库自己的兜底话,**不是平台说的**。
276
+
277
+ 现在这种情况会多一块**「响应体原文」**,把平台真正回的内容截一段印出来(太长会截断);
278
+ 上面那句也改叫「错误说明」,免得被当成平台原话。
279
+
280
+ ### 修:几个只在特定输入下才会出问题的隐患
281
+
282
+ 这几处都是上游修的安全问题,平时用不出来,但一旦被构造输入命中就有影响:
283
+
284
+ - **引用消息里的图片地址**:以前拿到地址就去下载。如果那个地址指向内网
285
+ (`localhost`、私有网段这类),机器人会照着去访问。现在不是公网 http(s) 地址就不下载;
286
+ - **抖音 / 小红书短链展开**:展开前先确认域名真的是这两个站,不是就不发请求;
287
+ - **抖音下载直链**:以前只要消息里出现那段链接文字,就把**整条消息**当地址拿去下载。
288
+ 现在改成逐个取出 URL、核对该站域名与路径后才下载;
289
+ - **视频临时预览地址**:以前直接用磁盘文件名寻址,会**把服务器上的文件路径暴露出去**。
290
+ 现在改成随机令牌,预览页 / 视频流 / 状态推送都不再带路径。
291
+
3
292
  ## 3.13.0
4
293
 
5
294
  这一版把上游最近一批改动搬了过来,另外修了几处只有真用起来才会碰到的显示问题。
6
295
 
7
296
  ### 修:实况照片提示卡整张崩了
8
297
 
9
- 那张卡(「这是一张实况照片」的提示)在群里显示成一坨:文字挤在一起、间距全没、
298
+ 那张卡(「这是一张实况照片」的提示)在群里显示成一坨:文字挤在一起、间距全没、
10
299
  一排品牌图标只剩零星两三个。
11
300
 
12
- 原因是卡片的样式是**跟着模板按需生成**的,模板更新后新用到的样式没跟着补上。
301
+ 原因是卡片的样式是**跟着模板按需生成**的,模板更新后新用到的样式没跟着补上。
13
302
  这类问题最坑的地方是**页面不报错**,只是悄悄少样式 —— 光看日志什么都看不出来。
14
303
 
15
- 现在补了一套「和上游样式逐条对齐」的机制,并加了守卫脚本,
304
+ 现在补了一套「和上游样式逐条对齐」的机制,并加了守卫脚本,
16
305
  以后模板再更新不会再漏。顺带修好了 B站评论卡的字体,以及群统计卡缺掉的一段间距。
17
306
 
18
- ### 修:抖音会重复推一遍历史作品
307
+ ### 修:*抖音会重复推一遍历史作品*
19
308
 
20
- 喜欢 / 推荐列表的去重记录以前是「固定有效期」:一条作品记下之后,时间一到就作废,
309
+ *喜欢 / 推荐列表的去重记录以前是*「固定有效期」:一条作品记下之后,时间一到就作废,
21
310
  哪怕它还在你列表里,也会被当成新作品再推一次。
22
311
 
23
- 现在改成**跟着列表走**:每轮推送都把当前列表里所有作品的有效期一起往后延,
24
- 只有**真正离开列表**的作品才会被清掉。清理的时机也跟着挪了 ——
312
+ 现在改成**跟着列表走**:每轮推送都把当前列表里所有作品的有效期一起往后延,
313
+ 只有**真正离开列表**的作品才会被清掉。清理的时机也跟着挪了 ——
25
314
  这两件事必须同时生效,否则升级的那一刻老记录会先被清掉,反而多推一轮。
26
315
 
27
316
  ### 新:评论卡片的二维码中间带上作者头像
28
317
 
29
- B站 / 快手 / 小红书三张评论卡片,右下角那个二维码以前是纯黑白码,
318
+ B站 / 快手 / 小红书三张评论卡片,右下角那个二维码以前是纯黑白码,
30
319
  现在把作者头像嵌在正中间(和抖音那张卡的样子统一),深色模式也一起处理了。
31
320
 
32
321
  ### 修:B站卡片的简介(这次修的是 QQ 面板那张)
33
322
 
34
- 上一版修的是「解析出来那张卡」。但 QQ 上开着解析面板的时候,
35
- **解析卡其实是不发的** —— 群里那一张是面板自己画的,它的简介从出生起就是空的,
323
+ 上一版修的是「解析出来那张卡」。但 QQ 上开着解析面板的时候,
324
+ **解析卡其实是不发的** —— 群里那一张是面板自己画的,它的简介从出生起就是空的,
36
325
  所以修完看起来毫无变化。现在两张卡走同一份简介逻辑,单行、多行、带 @ 和链接的都正常。
37
326
 
38
327
  ### 其它
39
328
 
40
- - **修**:小红书评论里「回复的图片」以前按一串网址处理,接口其实给的是带宽高的对象,
329
+ - **修**:小红书评论里「回复的图片」以前按一串网址处理,接口其实给的是带宽高的对象,
41
330
  现在按真实结构解析;
42
331
  - **修**:抖音推送图里「谁在喜欢 / 谁推荐」那行取不到人,会退回显示作品作者,现在正常了;
43
- - **改**:一批卡片标题和数字的字重从最粗降到次粗(B站、抖音、小红书、单张统计卡都覆盖了),
332
+ - **改**:一批卡片标题和数字的字重从最粗降到次粗(B站、抖音、小红书、单张统计卡都覆盖了),
44
333
  小尺寸下不再糊成一团。
45
334
 
46
335
  ## 3.12.1
47
336
 
48
337
  ### 修:B站卡片的简介没了
49
338
 
50
- 有一批 B 站视频解析出来的卡片,标题下面直接跳到播放数据,**视频简介整块不见了**。
339
+ 有一批 B 站视频解析出来的卡片,标题下面直接跳到播放数据,**视频简介整块不见了**。
51
340
  不是渲染糊了,是压根没画上去。
52
341
 
53
- 原因是 B 站接口有时会把简介放在「分段简介」里、有时只放在普通简介字段里,
54
- 之前的代码碰上第一种情况以外的数据会算出一份空简介,然后把「空的」当成「有内容」画出来,
342
+ 原因是 B 站接口有时会把简介放在「分段简介」里、有时只放在普通简介字段里,
343
+ 之前的代码碰上第一种情况以外的数据会算出一份空简介,然后把「空的」当成「有内容」画出来,
55
344
  结果整块简介反而被吃掉了。
56
345
 
57
- 现在两个字段都试,哪个真的有内容就用哪个 —— 单行简介、多行简介、带 @ 和链接的简介
346
+ 现在两个字段都试,哪个真的有内容就用哪个 —— 单行简介、多行简介、带 @ 和链接的简介
58
347
  都能正常显示出来。
59
348
 
60
349
  顺手还修了一处:接口返回的简介字段是空的时候不会再让解析报错。
@@ -63,18 +352,18 @@ B站 / 快手 / 小红书三张评论卡片,右下角那个二维码以前是
63
352
 
64
353
  ### 新:提取图片的按钮只能点一次
65
354
 
66
- 卡片下面「提取封面图 / 提取评论区图片」这两个按钮以前可以一直点。有人一直点,
355
+ 卡片下面「提取封面图 / 提取评论区图片」这两个按钮以前可以一直点。有人一直点,
67
356
  群里就被同一张图刷屏,而且看不出是谁在点。
68
357
 
69
358
  现在**同一张卡片上的同一个按钮只放行一次**:
70
359
 
71
- - 再点不会往群里发任何东西(不再刷屏),但日志里会记下「这次是谁点的、之前是谁点过」,
360
+ - 再点不会往群里发任何东西(不再刷屏),但日志里会记下「这次是谁点的、之前是谁点过」,
72
361
  真被人刷了能查出来;
73
362
  - 封面和评论区是两个按钮,各点各的,互不影响;换一个作品也照常能点;
74
363
  - 想再要一次,**重新发一遍链接**就行,新卡片下面的按钮又是可点的(不会被永久锁死);
75
364
  - 自己手敲 `kkk封面` / `kkk评论` 不受这个限制,随时都能用。
76
365
 
77
- 还有一处顺手修的:万一这次没发出去(图过期了、或者发送报错),这次点击**不算数**,
366
+ 还有一处顺手修的:万一这次没发出去(图过期了、或者发送报错),这次点击**不算数**,
78
367
  再点一次还是能发 —— 以前那种「点一次就永久作废」的情况不会出现。
79
368
 
80
369
  ## 3.11.1
@@ -83,43 +372,43 @@ B站 / 快手 / 小红书三张评论卡片,右下角那个二维码以前是
83
372
 
84
373
  ### 修:视频发不出来(快手的长标题)
85
374
 
86
- 快手有些作品的标题是好几行的长文案。QQ 收群文件时会先看文件名,
87
- 标题里带换行就直接把整个上传退回来了 —— 视频明明已经下好,
375
+ 快手有些作品的标题是好几行的长文案。QQ 收群文件时会先看文件名,
376
+ 标题里带换行就直接把整个上传退回来了 —— 视频明明已经下好,
88
377
  却一个都没发出去,只在群里留一张报错卡(同一个视频连着失败了三次)。
89
378
 
90
- 现在发之前会把名字收拾干净(去掉换行和非法字符、太长就截断);
379
+ 现在发之前会把名字收拾干净(去掉换行和非法字符、太长就截断);
91
380
  万一还是被 QQ 退回,会自动换个临时名字再发一次。
92
381
 
93
- 顺带把报错信息也修好了:以前只写一句「失败」,现在会带上 QQ 给的原因,
382
+ 顺带把报错信息也修好了:以前只写一句「失败」,现在会带上 QQ 给的原因,
94
383
  真出问题一眼就能看出是什么。
95
384
 
96
385
  ### 新:卡片下面可以单独提取封面图 / 评论区的图
97
386
 
98
- 解析出来的卡片是一整条长图,想单独存封面、或者只看评论里别人贴的图,以前只能自己截图。
387
+ 解析出来的卡片是一整条长图,想单独存封面、或者只看评论里别人贴的图,以前只能自己截图。
99
388
  现在卡片下面多了一行按钮:
100
389
 
101
390
  - **提取封面图** —— 把封面单独发一遍;
102
391
  - **提取评论区图片** —— 发的是**评论里用户自己贴的图**(不是插件渲染的那张评论长图)。
103
392
 
104
- B站、抖音、小红书、快手都做了。只有 QQ / QQ 频道会有按钮,
393
+ B站、抖音、小红书、快手都做了。只有 QQ / QQ 频道会有按钮,
105
394
  其它平台会提示你引用那条消息、手敲 `kkk封面` / `kkk评论`。
106
395
 
107
396
  ### 修:「是否收集评论区的图片」打开没反应
108
397
 
109
- 打开这个开关,解析完就会**直接把评论区里的图发一条**,卡片下面不再重复挂按钮;
398
+ 打开这个开关,解析完就会**直接把评论区里的图发一条**,卡片下面不再重复挂按钮;
110
399
  关着(默认)保持原样,想单独存图自己点一下。
111
400
 
112
401
  另外,评论区一条图都没有的时候,那个按钮不会再显示了 —— 反正点了也没东西可发。
113
402
 
114
403
  ### 改:指令在控制台里收进「kkk」分组
115
404
 
116
- 控制台的指令页面以前有 40 条指令铺一地,现在统一收在 `kkk` 下面。
405
+ 控制台的指令页面以前有 40 条指令铺一地,现在统一收在 `kkk` 下面。
117
406
  **几种写法照旧都能用**:`解析 <链接>`、`/解析 <链接>`、`kkk.解析 <链接>`、`kkk 解析 <链接>`。
118
407
 
119
408
  ### 修:图片被强制拉伸
120
409
 
121
- QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便猜一个,
122
- 比例和原图对不上就被硬拉变形。现在尺寸一律实测,实在量不到就退回普通图片发送
410
+ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便猜一个,
411
+ 比例和原图对不上就被硬拉变形。现在尺寸一律实测,实在量不到就退回普通图片发送
123
412
  (会糊一点,但比例是对的、也看得见)。
124
413
 
125
414
  ### 其它
@@ -136,11 +425,11 @@ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便
136
425
 
137
426
  ### 修小红书图集发两遍
138
427
 
139
- - 图文笔记的图集有**两个发送点**:一个不看「发送内容」开关、直接发一条 markdown 全套图,
428
+ - 图文笔记的图集有**两个发送点**:一个不看「发送内容」开关、直接发一条 markdown 全套图,
140
429
  另一个按 `sendContent` 里的「图片」发(含实况图处理)。两个都命中时就是**两套图集**。
141
- - 删掉前面那个不看开关的,图集统一由「图片」那处发送;关掉「图片」现在是真的不发了
430
+ - 删掉前面那个不看开关的,图集统一由「图片」那处发送;关掉「图片」现在是真的不发了
142
431
  (以前关掉照样会发一份)。
143
- - 顺带给图集发送加了失败兜底:发不出去只记一步失败,后面的视频和错误卡片照常,
432
+ - 顺带给图集发送加了失败兜底:发不出去只记一步失败,后面的视频和错误卡片照常,
144
433
  不再把整条解析掀翻。
145
434
 
146
435
  ## 3.10.1
@@ -149,128 +438,122 @@ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便
149
438
 
150
439
  ### B站跳转链接改回标准视频页
151
440
 
152
- - 3.10.0 让跳转块统一用用户发出来的那条链接,B站照做之后反而不能用:
441
+ - 3.10.0 让跳转块统一用用户发出来的那条链接,B站照做之后反而不能用:
153
442
  用户发的多半是 `b23.tv/xxx` 短链,**B站 App 复制了不跳转**。
154
- - B站的跳转块固定用 `https://www.bilibili.com/video/<bvid>`(分 P 带 `?p=N`),
443
+ - B站的跳转块固定用 `https://www.bilibili.com/video/<bvid>`(分 P 带 `?p=N`),
155
444
  不再用用户发的那条。卡片右下角的二维码同步改成这条,两边一致。
156
445
  - 抖音、快手、小红书仍按 3.10.0 的规则:用用户原样发的那条短链。
157
446
 
158
447
  ## 3.10.0
159
448
 
160
- > 解析消息底部的「打开原站」链接换成了**代码块形式的跳转卡片**:
161
- > 整段复制后打开对应 App 会直接跳到那条作品,不再依赖 QQ 会不会把链接渲染成可点的东西。
449
+ > 解析消息底部的「打开原站」链接换成了**代码块形式的跳转卡片**:
450
+ > 整段复制后打开对应 App 会直接跳到那条作品,不再依赖 QQ 会不会把链接渲染成可点的东西。
162
451
  > 快手和小红书以前完全没有这条链接,现在补上了。
163
452
 
164
453
  ### 原站跳转改成「复制码」
165
454
 
166
455
  - 发出的东西从 `[打开原站](链接)` 变成代码块:
167
-
168
456
  ````
169
457
  ```复制后打开抖音自动跳转 →
170
458
  https://v.douyin.com/iQabcdef/ :1pm Mai:/ 2237886846@qq.com
171
459
  ```
172
460
  ````
173
-
174
- 各家 App 都认「剪贴板里有一条自家链接」——复制整段文本打开 App 会弹直达询问,
461
+ 各家 App 都认「剪贴板里有一条自家链接」——复制整段文本打开 App 会弹直达询问,
175
462
  比点链接稳;官方 QQ 对 markdown 里的链接也经常直接拒收整条消息,代码块没有这个问题。
176
- - 提示文案放在**围栏的语种位**(` ``` ` 后面那截),不占正文一行,
463
+ - 提示文案放在**围栏的语种位**(` ``` ` 后面那截),不占正文一行,
177
464
  代码块里就只有链接本身,全选复制不会带上多余文字。
178
- - **抖音附带唤起口令**:光有链接 App 不一定弹跳转,接一段口令才稳。
465
+ - **抖音附带唤起口令**:光有链接 App 不一定弹跳转,接一段口令才稳。
179
466
  这是抖音 App 生成的固定串(每条作品都一样),不是模板。
180
- - **快手、小红书单独发一条**:这两个平台没有清晰度面板——原来的跳转代码挂在画质表格下面,
467
+ - **快手、小红书单独发一条**:这两个平台没有清晰度面板——原来的跳转代码挂在画质表格下面,
181
468
  它们压根走不到,等于一条都没发过。现在在解析内容发完后补一条同格式的消息。
182
- - 开关沿用 WebUI 的「原站跳转」(QQ 适配器分组,`qqPanelSourceLink`,默认开);
469
+ - 开关沿用 WebUI 的「原站跳转」(QQ 适配器分组,`qqPanelSourceLink`,默认开);
183
470
  跳转发送失败只记日志,**不影响解析结果**。
184
471
 
185
472
  ### 跳转链接用用户发的那条
186
473
 
187
- - 一开始让跳转链接和卡片右下角的二维码保持一致(`b23.tv/<bvid>`、抖音 `share_url`),
474
+ - 一开始让跳转链接和卡片右下角的二维码保持一致(`b23.tv/<bvid>`、抖音 `share_url`),
188
475
  实测行不通:那种链接带 `xsec_token` / `u_code` 一串参数,**太长,App 剪贴板识别不了**。
189
- - 改成优先用用户原样发的那条(`b23.tv/xxx`、`v.douyin.com/xxx`、`v.kuaishou.com/xxx`、
190
- `xhslink.com/o/xxx`)——那本来就是各家 App 自己生成的分享形态,最短也最容易被识别。
476
+ - 改成优先用用户原样发的那条(`b23.tv/xxx`、`v.douyin.com/xxx`、`v.kuaishou.com/xxx`、
477
+ `xhslink.com/o/xxx`)——那本来就是各家 App 自己生成的分享形态,最短也最容易被识别。
191
478
  取不到时才退回插件拼的标准链接。
192
479
  - 卡片二维码**没动**:扫码不吃 URL 长度,换个链接反而要重测,保持原样。
193
- - 顺带修了快手卡片二维码:以前填的是视频 CDN 直链,扫出来是段播放地址而不是作品页,
480
+ - 顺带修了快手卡片二维码:以前填的是视频 CDN 直链,扫出来是段播放地址而不是作品页,
194
481
  现在指向作品页(`photoId` 取不到时仍退回原逻辑)。
195
482
 
196
483
  ### markdown 只对 QQ / QQ 频道发
197
484
 
198
- - 能渲染 markdown 的只有官方 QQ 适配器和 QQ 频道,其它平台(OneBot / Discord / Telegram /
485
+ - 能渲染 markdown 的只有官方 QQ 适配器和 QQ 频道,其它平台(OneBot / Discord / Telegram /
199
486
  KOOK…)会把代码块的 ` ``` ` 围栏原样显示成一串反引号。
200
- - 判定从 OneBot 黑名单改成**平台白名单**(`qq` / `qqguild`):这两个发 markdown 代码块,
487
+ - 判定从 OneBot 黑名单改成**平台白名单**(`qq` / `qqguild`):这两个发 markdown 代码块,
201
488
  其余一律发去围栏的纯文本(提示一行 + 链接一行),照样整段复制、App 一样认。
202
489
 
203
490
  ## 3.9.1
204
491
 
205
- > 修 MySQL 上启动直接报 `ER_TOO_LONG_KEY`、插件起不来的问题。
492
+ > 修 MySQL 上启动直接报 `ER_TOO_LONG_KEY`、插件起不来的问题。
206
493
  > 3.9.0 建的索引太宽了:索引字段现在按实际数据长度定长,最宽的索引从 4080 字节降到 1152 字节。
207
494
 
208
495
  ### 修复 MySQL 索引过长(ER_TOO_LONG_KEY)
209
496
 
210
497
  - **现象**:MySQL 环境启动就报 `ER_TOO_LONG_KEY`(Specified key was too long),索引超过 3072 字节,表建不出来。
211
- - **原因**:字符串字段没给长度,MySQL 按 `VARCHAR(255)` 建,`utf8mb4` 下每字符 4 字节,
212
- 单个字段就是 1020 字节。抖音作品缓存表那个由 **四个** 字段组成的唯一键
213
- (作品 id + sec_uid + 群号 + 推送类型)算下来 4080 字节,直接超了上限。
498
+ - **原因**:字符串字段没给长度,MySQL 按 `VARCHAR(255)` 建,`utf8mb4` 下每字符 4 字节,
499
+ 单个字段就是 1020 字节。抖音作品缓存表那个由 **四个** 字段组成的唯一键
500
+ (作品 id + sec_uid + 群号 + 推送类型)算下来 4080 字节,直接超了上限。
214
501
  另有几张统计表卡在 3060 字节 —— 离上限只差 12 字节,随时会爆。
215
502
  - **处理**:凡是进索引(主键 / 唯一键)的字段,都按实际数据长度定长:
216
-
217
- | 字段 | 长度 | 说明 |
218
- | --- | --- | --- |
219
- | 群号 / QQ 号 / botId / 作品 id / 动态 id | 64 | 最多几十个字符 |
220
- | 抖音 `sec_uid` | 128 | 实际最长见过 76 |
221
- | 平台 / 内容形态 / 日期 / 指标名 | 16–32 | 固定枚举、`YYYY-MM-DD` |
222
- | 过滤词 / 过滤标签 | 128 | 自定义文本 |
223
- | 备注、昵称等 | 不限制 | 不进索引,不影响 |
224
-
503
+ | 字段 | 长度 | 说明 |
504
+ | --------------------------------- | ----- | ----------------- |
505
+ | 群号 / QQ 号 / botId / 作品 id / 动态 id | 64 | 最多几十个字符 |
506
+ | 抖音 `sec_uid` | 128 | 实际最长见过 76 |
507
+ | 平台 / 内容形态 / 日期 / 指标名 | 16–32 | 固定枚举、`YYYY-MM-DD` |
508
+ | 过滤词 / 过滤标签 | 128 | 自定义文本 |
509
+ | 备注、昵称等 | 不限制 | 不进索引,不影响 |
225
510
  现在最宽的索引是 1152 字节(原来是 4080),其它都在 1024 以内。
226
511
  - **在 MySQL 上已经建出过半截 `kkk` 表的**,需要先删掉再启动 —— 已有索引不一定能被自动改过来:
227
-
228
512
  ```sql
229
513
  SELECT TABLE_NAME FROM information_schema.TABLES
230
514
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME LIKE 'kkk%';
231
515
  ```
232
-
233
516
  确认是插件的表之后 `DROP` 掉,重启 Koishi 会按新定义重建。
234
517
  - sqlite / postgres 不受影响,也不用做上面这一步(字段长度本来就够)。
235
518
 
236
519
  ## 3.9.0
237
520
 
238
- > 插件不再自己建数据库了,全部改用 Koishi 自带的数据库服务。
239
- > 数据统一落在宿主配置的那个库里(sqlite / mysql / postgres 都行),备份和迁移跟着宿主走,
240
- > 不用再单独惦记插件数据目录里那几个 `.db` 文件。
521
+ > 插件不再自己建数据库了,全部改用 Koishi 自带的数据库服务。
522
+ > 数据统一落在宿主配置的那个库里(sqlite / mysql / postgres 都行),备份和迁移跟着宿主走,
523
+ > 不用再单独惦记插件数据目录里那几个 `.db` 文件。
241
524
  > **代价:过滤词 / 过滤标签和解析统计历史会从零开始**(订阅关系不受影响,每次启动自动从推送列表重建)。
242
525
 
243
526
  ### 数据库改用 Koishi 原生数据库服务
244
527
 
245
- - 以前插件自己在数据目录里开三个 sqlite 文件(`douyin.db` / `bilibili.db` / `statistics.db`);
246
- 现在所有数据都走 Koishi 的 `ctx.database`,表由插件注册(`kkk.douyin.*` / `kkk.bilibili.*` / `kkk.statistics.*`),
528
+ - 以前插件自己在数据目录里开三个 sqlite 文件(`douyin.db` / `bilibili.db` / `statistics.db`);
529
+ 现在所有数据都走 Koishi 的 `ctx.database`,表由插件注册(`kkk.douyin.*` / `kkk.bilibili.*` / `kkk.statistics.*`),
247
530
  落在宿主配置的那一个库里(sqlite / mysql / postgres 都行),插件不再创建任何 sqlite 文件。
248
531
  - **`database` 服务变成必选**:没有配置数据库插件时 Koishi 会直接不加载本插件(以前是可选的,因为那时插件自己建库)。
249
- - **旧库不迁移**:三个旧 `.db` 文件保留不动,但不再被读取。订阅关系每次启动都会从配置里的推送列表
532
+ - **旧库不迁移**:三个旧 `.db` 文件保留不动,但不再被读取。订阅关系每次启动都会从配置里的推送列表
250
533
  (`config.json` 的 `pushlist`)自动重建,**不受影响**;**过滤词 / 过滤标签、解析统计历史会从零开始**。
251
534
  - 想保留过滤词或统计历史的,可以在切换前自己从旧 `.db` 里导出,或改配置里的推送列表重新加过滤规则。
252
535
 
253
536
  ## 3.8.0
254
537
 
255
- > 抖音解析修好了。抖音那边改了风控规则,**换 cookie 是没用的** —— 问题出在解析用的那个库太旧;
538
+ > 抖音解析修好了。抖音那边改了风控规则,**换 cookie 是没用的** —— 问题出在解析用的那个库太旧;
256
539
  > 顺带修好快手、小红书的评论区渲染。
257
540
 
258
541
  ### 抖音:解析不了 / 一直提示 Cookie 失效
259
542
 
260
- - **现象**:发抖音链接,机器人回「抖音没有返回这条作品的数据(错误码 500:抖音数据获取失败),
543
+ - **现象**:发抖音链接,机器人回「抖音没有返回这条作品的数据(错误码 500:抖音数据获取失败),
261
544
  常见原因:Cookie 失效、被风控」,可同一个 cookie 换个插件却能正常解析。
262
- - **原因**:抖音现在要求每个网页接口都带上设备标识(`uifid`)和一套新的签名头
263
- (`x-secsdk-web-signature`,由抖音自己的风控 SDK 算出来)。
264
- 插件用的解析库 6.6.0 里根本没有这套东西,请求直接被抖音拦下
265
- (服务器回的是「Blocked by ArgusSecurityPlugin Uifid Not Found」),
545
+ - **原因**:抖音现在要求每个网页接口都带上设备标识(`uifid`)和一套新的签名头
546
+ (`x-secsdk-web-signature`,由抖音自己的风控 SDK 算出来)。
547
+ 插件用的解析库 6.6.0 里根本没有这套东西,请求直接被抖音拦下
548
+ (服务器回的是「Blocked by ArgusSecurityPlugin Uifid Not Found」),
266
549
  库再把它包成一句「抖音数据获取失败」—— 看起来就像 cookie 过期,怎么换都没用。
267
- - **处理**:把解析库升到 7.x(目前是 7.0.0-beta.5;npm 上标着「最新」的 6.6.0 反而是坏的)。
550
+ - **处理**:把解析库升到 7.x(目前是 7.0.0-beta.5;npm 上标着「最新」的 6.6.0 反而是坏的)。
268
551
  升级后实测:作品详情、评论区、弹幕都正常。
269
552
  - 更新完**重启一次机器人**即可;手动 `npm i` 更新插件时会自动装上对应版本的解析库。
270
553
 
271
554
  ### 日志更好排查
272
555
 
273
- - 以后再遇到这类失败,日志里会直接写明「**多半是解析库版本过旧**」,
556
+ - 以后再遇到这类失败,日志里会直接写明「**多半是解析库版本过旧**」,
274
557
  不用再照着「换 cookie、换网络」排查半天。
275
558
 
276
559
  ### 修复快手评论渲染
@@ -283,19 +566,19 @@ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便
283
566
 
284
567
  ## 3.7.2
285
568
 
286
- > 群里发的图片**统一改走 markdown** 了 —— 普通图片消息会被 QQ 压得发糊,markdown 图片不会;
569
+ > 群里发的图片**统一改走 markdown** 了 —— 普通图片消息会被 QQ 压得发糊,markdown 图片不会;
287
570
  > 顺手把互动视频那张**剧情图的字放大**了。
288
571
 
289
572
  ### 图片不再被压糊
290
573
 
291
- - 卡片、评论图、图集、推送里的图……以前都是当「普通图片」发出去的,QQ 会二次压缩,
292
- 卡片上的小字糊成一团。现在**图片一律按 markdown 图片发**:先传到机器人自己的图床,
574
+ - 卡片、评论图、图集、推送里的图……以前都是当「普通图片」发出去的,QQ 会二次压缩,
575
+ 卡片上的小字糊成一团。现在**图片一律按 markdown 图片发**:先传到机器人自己的图床,
293
576
  再用带尺寸的图片写法发出去,字是清楚的。
294
- - markdown 图片**必须写死尺寸**(`![#宽px #高px](地址)`)—— 不写尺寸的话手机端根本不显示这张图,
577
+ - markdown 图片**必须写死尺寸**(`![#宽px #高px](地址)`)—— 不写尺寸的话手机端根本不显示这张图,
295
578
  所以每一张都会先把真实的宽高读出来(JPEG / PNG / GIF / WebP 都认)。
296
579
  - **平台不一样,处理不一样**(客户端能力决定的,不是选择):
297
580
  - QQ 官方机器人:走 markdown 图片;
298
- - OneBot 系(NapCat、Lagrange、go-cqhttp、Chronocat 等):客户端不认 markdown,
581
+ - OneBot 系(NapCat、Lagrange、go-cqhttp、Chronocat 等):客户端不认 markdown,
299
582
  收到只会显示成一串网址、图片全丢,所以这条链路**照旧发普通图片**;
300
583
  - QQ 频道(qqguild)同理,也不改写。
301
584
  - 一条消息里**同时有视频 / 语音 / 文件**时不改写:那种消息会按媒体发出去,markdown 内容会被丢掉。
@@ -306,74 +589,74 @@ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便
306
589
  ### 互动视频:剧情图的字大了
307
590
 
308
591
  - 剧情图里每个选项 / 结局的**字号调大**了(大约 1/3),手机上看得清多了。
309
- - 长文字不再按「14 个字」硬切,改成**按这一列还能放多少像素**来截断,
592
+ - 长文字不再按「14 个字」硬切,改成**按这一列还能放多少像素**来截断,
310
593
  字大了也不会压到下一列的圆圈上;最后一列右边本来空着,会多显示几个字。
311
594
  - 「已选」「图例」「提示」这些说明文字也跟着放大了一点。
312
595
 
313
596
  ## 3.7.1
314
597
 
315
- > 修一个 3.7.0 改过头的地方:**视频直接发到群里的那种互动视频,照旧要在群里发带按钮的选择面板**;
598
+ > 修一个 3.7.0 改过头的地方:**视频直接发到群里的那种互动视频,照旧要在群里发带按钮的选择面板**;
316
599
  > 而且点完选项之后,**上一段视频会撤回**,群里只留当前这一段。
317
600
 
318
601
  ### 互动视频:两种玩法各归各位
319
602
 
320
603
  - **选了在线播放**(或者视频太大、自动转成在线播放):选项在网页播放器里贴出来,群里不再问一遍。
321
- - **视频直接发到群里**(没有播放页):照旧在群里发**带按钮的选择面板** ——
604
+ - **视频直接发到群里**(没有播放页):照旧在群里发**带按钮的选择面板** ——
322
605
  QQ 官方机器人是按钮,其它平台是一行一个选项的文字,点一下接着播下一段。
323
- - **点完选项会撤回上一段视频**:不然玩几段之后,群里会躺着一串视频。
324
- 顺序是先发新的、再撤旧的,中间不会出现「一段视频都没有」的空档;
606
+ - **点完选项会撤回上一段视频**:不然玩几段之后,群里会躺着一串视频。
607
+ 顺序是先发新的、再撤旧的,中间不会出现「一段视频都没有」的空档;
325
608
  选择面板照旧是发新的时候撤掉旧的。
326
609
  - 剧情图(勾了「流程图」时)照常:第一段出一张,走到结局再出一张。
327
610
 
328
611
  ## 3.7.0
329
612
 
330
- > 互动视频这一版基本重做了:**选剧情搬到了网页播放器里**(选项就贴在画面上、点完能看到下载进度),
613
+ > 互动视频这一版基本重做了:**选剧情搬到了网页播放器里**(选项就贴在画面上、点完能看到下载进度),
331
614
  > 群里不再发一串选择按钮;顺带修掉「改完配置机器人不理人」等几个老毛病。
332
615
 
333
616
  ### 互动视频:剧情在播放页上点
334
617
 
335
- - 从群里拿到播放链接、打开网页,**这一段放完,题目和选项就会浮在画面下方**,点一条接着播下一段;
618
+ - 从群里拿到播放链接、打开网页,**这一段放完,题目和选项就会浮在画面下方**,点一条接着播下一段;
336
619
  全屏时照样看得见、点得动。
337
- - 不想等它自己弹?控制条上有个**「选项」**按钮,随时点出来;点卡片外面的画面就把它收起来。
338
- - **点完有进度**:下一段要从 B 站现取(第一次要几秒),这段时间卡片会显示
339
- 「正在下载这一段 42%」这样的进度;失败会直接说明原因,还给一个**「重试这一段」**按钮,
620
+ - 不想等它自己弹?控制条上有&#x4E2A;**「选项」**&#x6309;钮,随时点出来;点卡片外面的画面就把它收起来。
621
+ - **点完有进度**:下一段要从 B 站现取(第一次要几秒),这段时间卡片会显示
622
+ 「正在下载这一段 42%」这样的进度;失败会直接说明原因,还给一&#x4E2A;**「重试这一段」**&#x6309;钮,
340
623
  不用刷新整页。
341
624
  - **已经下过的段会留着**,再点回去是秒开。
342
- - **弹幕跟着段走**:互动视频每一段都是单独的一段视频、弹幕也各是各的;
625
+ - **弹幕跟着段走**:互动视频每一段都是单独的一段视频、弹幕也各是各的;
343
626
  以前切段之后画面里飘的还是第一段那批,现在跟着你正在看的那段。
344
627
 
345
628
  ### 互动视频:不再被「体积上限」拦住
346
629
 
347
- - 互动稿天然就是一段段很短的切片,以前拿整段视频的体积去预估、去拦,既不准又容易误伤。
348
- 现在互动视频**不预估体积、评论卡片上也不显示体积**,只在真正下好、合并完之后检查一次:
349
- 超过你设的「文件大小限制」时,开着「超限转在线播放」就给你播放链接,没开就明说一句
630
+ - 互动稿天然就是一段段很短的切片,以前拿整段视频的体积去预估、去拦,既不准又容易误伤。
631
+ 现在互动视频**不预估体积、评论卡片上也不显示体积**,只在真正下好、合并完之后检查一次:
632
+ 超过你设的「文件大小限制」时,开着「超限转在线播放」就给你播放链接,没开就明说一句
350
633
  「这一段太大了,先不发到群里,剧情还能接着玩」。
351
634
  - 画面和声音分开存(不再额外花时间合成一个文件),点完选项少等一步。
352
635
 
353
636
  ### 在线播放页
354
637
 
355
- - **多了一行「原视频」**:以前页面上显示的是「本页链接」(你人就在这一页,等于废话),
638
+ - **多了一行「原视频」**:以前页面上显示的是「本页链接」(你人就在这一页,等于废话),
356
639
  现在显示 B 站 / 抖音上的**原视频地址**,点一下能在新窗口打开,也能一键复制。
357
- - 修好一个老问题:把「播放器端口」设成 0(跟随机器人自己的端口)时,
640
+ - 修好一个老问题:把「播放器端口」设成 0(跟随机器人自己的端口)时,
358
641
  页面上的「下载画面 / 下载声音 / 封面」点了会报错,现在正常。
359
642
  - 页面补了小图标,浏览器不会再提示「找不到 favicon」。
360
643
 
361
644
  ### 彩色弹幕、顶部弹幕现在看得到了
362
645
 
363
- - 有些视频弹幕特别密(几秒钟几百条)。以前轨道被白字弹幕占满之后,后面的**直接丢掉**,
364
- 于是少数派 —— 彩色弹幕、顶部「置顶」弹幕 —— 基本永远轮不到显示。
646
+ - 有些视频弹幕特别密(几秒钟几百条)。以前轨道被白字弹幕占满之后,后面的**直接丢掉**,
647
+ 于是少数派 —— 彩色弹幕、顶部「置顶」弹幕 —— 基本永远轮不到显示。
365
648
  现在白字弹幕会按比例抽稀,**彩色和顶部 / 底部的照常显示**。
366
649
 
367
650
  ### 修掉「改完配置机器人就不理人」
368
651
 
369
- - 在控制台改完配置、或者点一下重载插件之后,机器人有时会**整条指令都失效**:
652
+ - 在控制台改完配置、或者点一下重载插件之后,机器人有时会**整条指令都失效**:
370
653
  群里发链接没有任何反应、控制台面板也打不开。现在重载不会再出这个错。
371
654
 
372
655
  ### 其他修正
373
656
 
374
- - 播放页里的「这一段没准备好」换成了**具体原因**(以前不管是什么原因都显示
657
+ - 播放页里的「这一段没准备好」换成了**具体原因**(以前不管是什么原因都显示
375
658
  「链接已过期或视频已被清理」,很容易让人以为是链接过期了)。
376
- - 机器人重启后,**已经发出去的播放链接仍然能选剧情**(以前重启一次,那些链接里的选项按钮就消失了)。
659
+ - 机器人重启后,**已经发出去的播放链接仍然能选剧情**(以前重启一次,那些链接里的选项按钮就消失了)。
377
660
  小提醒:如果你手里是**这次更新之前**拿到的链接,需要重新发一次链接让机器人解析。
378
661
  - 另外补齐了几处内部自检(对使用者没有影响)。
379
662
 
@@ -383,23 +666,24 @@ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便
383
666
 
384
667
  ### 修「大文件永远下不完」
385
668
 
386
- 有用户反馈:解析一个 280 MB 的 B 站视频,进度一直卡在 0.0 MB/s,重试三次都是这样,
669
+ 有用户反馈:解析一个 280 MB 的 B 站视频,进度一直卡在 0.0 MB/s,重试三次都是这样,
387
670
  最后报「连接被重置」。查下来是两个原因撞在一起:
388
671
 
389
- - **B 站给的下载地址不一定是好的**:有些地址连得上、就是不传数据(实测一分钟只传了 100 多 KB)。
672
+ - **B 站给的下载地址不一定是好的**:有些地址连得上、就是不传数据(实测一分钟只传了 100 多 KB)。
390
673
  以前的程序只会一直用这一个地址,B 站同时给出的其它备用地址完全没用上。
391
- - **下载有一个 60 秒的总时限**:从开始下载算起,超过 60 秒就掐断 ——
392
- 也就是说,凡是需要超过 60 秒的文件(按 1.5 MB/s 算大约 90 MB 以上)**永远下不完**。
674
+ - **下载有一个 60 秒的总时限**:从开始下载算起,超过 60 秒就掐断 ——
675
+ 也就是说,凡是需要超过 60 秒的文件(按 1.5 MB/s 算大约 90 MB 以上)**永远下不完**。
393
676
  更麻烦的是它掐断之后,报出来的错误看着像「服务器把连接重置了」,把人往「被风控了」的方向带。
394
677
 
395
678
  现在的表现:
396
679
 
397
680
  - **只要还在传数据就不算超时**:一直有数据就继续下,真的没数据了才算断。
398
- - **下载源卡住就自动换**:有备用地址时,试一会儿(约 20 秒)还是慢得离谱就换下一个;
681
+ - **下载源卡住就自动换**:有备用地址时,试一会儿(约 20 秒)还是慢得离谱就换下一个;
399
682
  已经传了好几 MB 才断的,保留进度接着下。
400
683
  - 报错说人话:自己掐断的,不再说成「连接被重置」,而是「下载超时(60 秒内没有收到新数据)」。
401
684
  - 进度条的**速度显示**也修好了:以前会出现「0.0 MB/s 剩余 661 分钟」这种明显不对的数字。
402
685
 
686
+
403
687
  ## 3.5.0
404
688
 
405
689
  > 这一版三件事:**B 站互动视频能玩了**(一路选剧情、还能出剧情图)、**合并转发里能单独控制流程图**,
@@ -772,6 +1056,7 @@ QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便
772
1056
  - **ffmpeg 找不到 / 没权限的问题修了**:按顺序逐个候选校验,起不来就自动换下一个。
773
1057
  - **修 WebUI「推送列表里填频道 ID,点完成后整个面板黑屏」**。
774
1058
 
1059
+
775
1060
  ### 新增
776
1061
 
777
1062
  **在线看**(通用 → 在线播放器设置)