koishi-plugin-kkk 2.0.1-beta.1 → 2.1.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.
- package/CHANGELOG.md +59 -11
- package/assets/web/assets/index-BRROK0vh.js +1 -1
- package/config/default_config/app.yaml +3 -3
- package/lib/configBridge.js +18 -7
- package/lib/index.js +4 -3
- package/lib/karin/module/utils/ParseForward.js +40 -13
- package/lib/karin/module/utils/Render/index.js +36 -3
- package/lib/schema.js +23 -4
- package/lib/webui.js +35 -2
- package/package.json +1 -1
- package/scripts/patch-webui.mjs +34 -12
- package/scripts/smoke-config.cjs +66 -4
- package/scripts/smoke-kkkshot-render.cjs +76 -0
- package/scripts/smoke-parse-forward.cjs +34 -17
- package/src/configBridge.ts +29 -6
- package/src/index.ts +4 -3
- package/src/karin/module/utils/ParseForward.ts +39 -13
- package/src/karin/module/utils/Render/index.ts +37 -2
- package/src/karin/types/config/app.ts +5 -3
- package/src/schema.ts +24 -4
- package/src/webui.ts +33 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,24 +1,72 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
3
|
+
## 2.1.0
|
|
4
4
|
|
|
5
|
-
>
|
|
6
|
-
>
|
|
5
|
+
> 这一版把之前两个预览版(`2.0.1-beta.1` / `2.0.1-beta.2`,内容已一并收进来)和一次新联动一起发了:
|
|
6
|
+
> **卡片渲染接上了新的高速截图服务 `kkkshot`**,另外修掉几个实测反馈的问题。
|
|
7
7
|
>
|
|
8
|
-
>
|
|
8
|
+
> 升级不需要改配置:所有新开关都有默认值;老配置缺这些键时行为与以前一致。
|
|
9
|
+
|
|
10
|
+
### 本版重点
|
|
11
|
+
- **卡片渲染快 2 倍以上**:新增**联动插件 `koishi-plugin-kkkshot`**(注册 `kkkshot` 服务)。
|
|
12
|
+
装了它,kkk 会**默认优先用它渲染卡片**;没有装(或它渲染失败)就自动退回 `koishi-plugin-puppeteer`,
|
|
13
|
+
行为与以前完全一致。本机实测同一张卡片:**1.54s → 0.60s**(详见下面「配套插件」)。
|
|
14
|
+
- **「短时间不重复解析」变成可配置**:通用里新增这个开关 + 「重复解析间隔(分钟)」,
|
|
15
|
+
去重覆盖面也从「抖音 / B站」扩到**快手 / 小红书**。
|
|
16
|
+
- **合并转发开关语义修正**:打开才合并(触发者身份),**关掉就不合并**、内容逐条发;
|
|
17
|
+
并且修好了「在面板里打开它却不生效」(面板保存现在会真的写进 config.json)。
|
|
18
|
+
- **权限字段能填用户 ID 了**:修掉「选『指定账号』填 ID 一保存就报 `reading 'logger'`」。
|
|
9
19
|
|
|
10
20
|
### 新增
|
|
21
|
+
- **配套插件 `koishi-plugin-kkkshot`(可选)**:给 kkk 用的高速截图服务,注册 `kkkshot` 服务后
|
|
22
|
+
kkk 检测到它就**默认用它渲染卡片**。它和常规 puppeteer 用法的区别:
|
|
23
|
+
- **常驻页面池**(默认 2 个页面反复用)而不是每次新建页面再关掉;
|
|
24
|
+
- 导航只要 `domcontentloaded`,然后**只等字体和图片**(`document.fonts.ready` + 图片 `complete`),
|
|
25
|
+
不再用 `networkidle0` 白等那一整段静默期;
|
|
26
|
+
- 按卡片元素自己的盒子 `clip` 截图(贴合卡片、不带白边),页面底色设成卡片底色;
|
|
27
|
+
- **优先复用 `ctx.puppeteer` 的浏览器**(省内存),没有才自己启动;
|
|
28
|
+
- 页面用满 `recycleAfter`(默认 100)次回收重建,长跑不涨内存;启动时预热一个页面。
|
|
29
|
+
- 加载顺序:`kkk` 把 `kkkshot` 声明成**可选依赖** —— 装了就用,没装就退回 puppeteer,不会因为少装它报错。
|
|
11
30
|
- **通用 →「短时间不重复解析」**(默认开启):同一条链接在一段时间内只解析一次。
|
|
12
31
|
QQ 的指令按钮是「发一条消息 + 再发一个交互事件」,用户连点、客户端重发也会把同一条链接投递两遍,
|
|
13
32
|
跑两遍就是两次「开始解析」、两次下载、两次发送(第二次还常因为缓存已被清理而失败)。
|
|
14
|
-
去重键包含会话、作品 ID、画质与弹幕开关 ——
|
|
15
|
-
关掉这个开关后**每条消息都会解析**,需要反复调试同一条链接时可以临时关掉。
|
|
33
|
+
去重键包含会话、作品 ID、画质与弹幕开关 —— 换画质、换作品、换群都不会被误伤;关掉后每条消息都会解析。
|
|
16
34
|
- **通用 →「重复解析间隔(分钟)」**(默认 1,可填 1 ~ 60):上面那个开关打开时才生效,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
35
|
+
开关关掉时这一项在面板里会变灰不可改。取值兜底:超出范围夹到最近的边界(0 → 1 分钟,90 → 60 分钟),
|
|
36
|
+
非数字按默认 1 分钟。
|
|
37
|
+
- 去重覆盖面扩到 **快手 / 小红书**(这两条链路以前完全没有去重)。
|
|
38
|
+
|
|
39
|
+
### 修复
|
|
40
|
+
- **「合并转发打开了没用」**(用户实测):开关在面板里打开、保存也提示「已保存」,
|
|
41
|
+
但日志还是「「解析结果合并转发」关着,本次按逐条发送处理」。根因在「面板/控制台设置 → config.json」的同步规则:
|
|
42
|
+
老规则把「传进来的值正好等于上游默认值」当成「用户没动过」直接跳过,而 `app.fakeForward` 的**默认值就是 true** ——
|
|
43
|
+
于是「把它打开」等于回到默认值,永远写不进 config.json,插件读到的还是 false。
|
|
44
|
+
现在**面板保存走 authoritative 模式**(表单里那份配置就是用户想要的,值等于默认值也照写),
|
|
45
|
+
控制台那条路仍保持保守规则(不拿表单里的默认值盖掉手改的 config.json);
|
|
46
|
+
保存后日志会打一行「面板设置已写入 config.json: xxx」,方便确认到底写进去了没有。
|
|
47
|
+
- **「关闭合并转发 还是合并的」**(用户实测):通用里那个开关以前**只管「转发用谁的身份展示」**,
|
|
48
|
+
关掉之后照样合并成一条转发。现在它的语义是**要不要合并**:
|
|
49
|
+
打开 → 一次解析产生的所有内容合并成一条转发(用触发者身份展示);
|
|
50
|
+
**关掉 → 不合并**,内容像以前一样一条一条发(过程提示本来就不进转发,这条不受影响)。
|
|
51
|
+
面板里的标签也从「伪造合并转发消息」改成「**解析结果合并转发**」,说明写清了这两句;
|
|
52
|
+
控制台字段说明、配置注释同步更新;冒烟里加了「关掉不合并 / 再打开又合并」的用例守着。
|
|
53
|
+
- **选了「指定账号」填上 ID,一保存就报 `Cannot read properties of null (reading 'logger')`**(严重):
|
|
54
|
+
这句报错其实是**被盖掉**的 —— 真正的原因是字段值没通过 Schema 校验。
|
|
55
|
+
`loginPerm` / `permission` / `errorLogSendTo` 这几个「允许手填账号」的字段被渲染成了**枚举下拉**
|
|
56
|
+
(union of consts),手填的用户 ID 不在选项里,保存时 cordis 的 `resolveConfig` 抛错,
|
|
57
|
+
而它 emit 的 `internal/error` 又被 `@cordisjs/logger` 的监听器再抛一个 `reading 'logger'` ——
|
|
58
|
+
用户就只看到这一句,完全看不出该改哪里。
|
|
59
|
+
现在这几个字段改成普通文本(数组那个是字符串数组):**用户 ID、关键字、多个用逗号分隔**都能保存,
|
|
60
|
+
非法类型仍然会被 Schema 拒掉(校验没有形同虚设);保存失败时的提示也换成能照做的说法,
|
|
61
|
+
并在日志里带上调用栈,下次再遇到不用猜。
|
|
62
|
+
- **文案说错了**:原来写「选「指定账号」后填 QQ 号」—— Koishi 这边匹配的是**用户 ID**(session.userId),
|
|
63
|
+
不是 QQ 号。面板的下拉说明与输入框占位符、控制台里的字段说明、以及插件设置里那句
|
|
64
|
+
「主人账号(QQ 号)」都改成了「用户 ID」。
|
|
65
|
+
|
|
66
|
+
### 变更
|
|
67
|
+
- 面板标签:**「伪造合并转发消息」→「解析结果合并转发」**(名字要能看出「关掉就逐条发」)。
|
|
68
|
+
- **合并转发开关的语义**:从「只决定展示身份」变成「决定要不要合并」(身份固定为触发者)。
|
|
69
|
+
- 「谁可以触发扫码登录」与「错误日志接收人」的说明统一成「填用户 ID」。
|
|
22
70
|
|
|
23
71
|
## 2.0.0
|
|
24
72
|
|