koishi-plugin-kkk 1.2.0-beta.1 → 2.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.
package/CHANGELOG.md CHANGED
@@ -1,116 +1,147 @@
1
1
  # 更新日志
2
2
 
3
- ## 1.2.0-beta.1(预览版)
3
+ ## 2.0.0
4
4
 
5
- > 这是一个**预览版**(npm 上的 `beta` 标签),装着还没正式发布的一批改动。
6
- > 正式版仍请用 `latest`(当前 1.1.0)。预览版建议先在小范围群里试,遇到问题把日志发我。
5
+ > 这是 Koishi 移植版从 **1.0.0 到 2.0.0** 的一次总更新(把此前 `1.2.0-beta.1` 的全部内容也并了进来)。
6
+ > 一句话:**配置面板、QQ 面板与体积、解析链路、弹幕、在线播放器、合并转发、进度与错误处理**,
7
+ > 这一路上的改动都在这一版里说清楚。升级到本版**一般不用改配置**:所有新开关都有默认值,
8
+ > 老配置里缺这些键时行为与以前一致(每条都标了默认值)。
7
9
 
8
10
  ### 本版重点
9
- - **在线播放器**(通用 →「在线播放器设置」):选「弹幕」时不再把弹幕烧进视频,而是把视频放到一个播放页,
10
- 给用户一条链接;播放页照着 B站播放页做(夜间风格、标题/UP/统计、弹幕设置面板),
11
- 支持弹幕开关/字号/透明度/显示区域/滚动·顶部·底部三类开关/彩色弹幕,链接到期自动删文件。
12
- - **「弹幕」与「在线看」按钮合并**(播放器开着时两者是同一个动作),表格后的说明不再被当成表格行。
13
- - **解析流程统一成「先下载视频、再渲染卡片」,单步失败不再中断**(抖音 / B站 / 小红书 / 快手),
14
- 失败的步骤会在最后合成**一张**错误卡片。
15
- - **进度阶段补齐**:正在获取下载链接 → (正在合并音轨)→ 正在烧录 / 正在准备在线播放 → 正在发送。
16
- - 面板新增「打开原站」链接;播放页与过期页新增「直接跳转 / 手动复制」;播放页可下载视频。
17
- - 修复:**av 号链接解析失败**(av→BV 转换返回结构多包一层导致 bvid 取不到、静默失败);
18
- QQ 面板链接用 `mqqapi://` 被服务端拒绝导致整条面板发不出去;错误卡片切片 `e is not defined`;
19
- `getFriendList` 刷屏;浏览器禁访端口(ERR_UNSAFE_PORT)自动退回。
20
-
11
+ - **在线播放器(弹幕在线看)**:选「弹幕」不再把弹幕烧进视频,而是把视频放进播放页、回一条链接;
12
+ 播放页照着 B站播放页做(夜间风格、标题/UP/统计、弹幕设置面板),链接到期自动删文件。
13
+ - **解析结果合并转发**:一次解析产生的所有内容合并成**一条转发**发出(**不含过程提示**),
14
+ 在 OneBot 系适配器上走的是 **OneBot 的合并转发 API**(`send_group_forward_msg` / `send_private_forward_msg`)。
15
+ - **关掉某个平台的解析,那个平台就彻底不处理**(不回复、不提示缺 Cookie、不记统计)。
16
+ - **面板「在线播放器设置」**:样式与其它分组完全一致(同一套卡片容器),并且有了**这一组自己的总开关**,
17
+ 关掉时组内其它字段全部变灰不可改。
18
+ - **ffmpeg 不再被「相对路径 / 没有执行权限」那份拖死**:按候选逐份校验,起不来就换下一份。
19
+ - **修 WebUI「推送列表 → 推送目标 → 填频道 id → 点完成 → 整个面板黑屏」**。
21
20
 
22
21
  ### 新增
23
- - **在线播放器(弹幕在线看)**(通用 →「在线播放器设置」,总开关**默认开启**):
22
+ - **在线播放器(弹幕在线看)**(通用 →「在线播放器设置」):
24
23
  解析面板里那一列按钮写「**弹幕**」,点它不再把弹幕烧进视频,而是把视频下下来放进播放器目录、
25
24
  回一条链接 —— 点开就是带弹幕的播放页(深色界面、手机也能看,弹幕用 canvas 自己画,
26
- 有弹幕开关 / 字号 / 透明度三个控件,进度条可拖动)。页面不依赖任何外网 CDN,服务端支持 HTTP Range。
27
- - 配置项:**在线播放器**(默认开启)、**播放器公网地址**(默认空,留空会退化成「本机 IP + 端口」
28
- 并在日志里提醒,本机 / 内网照样能看)、**播放器端口**(默认 0 = 复用 Koishi 自己的端口)、
29
- **链接有效期(分钟)**(默认 60,最小 1、最大 1440,到点自动删视频和弹幕,链接变「链接已过期」)、
30
- **在线播放最大文件(MB)**(默认 0 = 跟随全局的「文件大小限制」,超过就不走在线播放、改回原来的发送流程)、
31
- **超限转在线播放**(默认关:打开后,超过全局「文件大小限制」的视频不再回「视频太大了,还是去B站看吧」,
32
- 而是照常下载并改成在线播放 —— 用户拿到播放链接,视频不发群、也不占群文件)。
33
- - **只有总开关**「弹幕重定向在线播放器」和通用里的「强制不烧录弹幕」联动:
34
- 关掉「强制不烧录弹幕」(= 打开弹幕功能)之后才能改它,其余四项随时可编辑。
35
- - 关掉总开关就回到原来的 ffmpeg 烧录流程(列头也从「弹幕」变回「烧录弹幕」)。
36
- - 路由:`/kkk/player/:token`(播放页)、`/kkk/player/:token/video`(支持 Range)、
37
- `/kkk/player/:token/danmaku`(弹幕 JSON);令牌是随机串且只允许 `[0-9a-z]{8,64}`。
38
- - 播放器出问题不会连累解析:登记失败会回一句说明并退回「直接发视频文件」。
39
- - **通用 → 强制不烧录弹幕**(默认开启):弹幕烧录的总开关,优先级最高。
40
- 开着时不管是指令、面板按钮还是平台配置,都不会烧录弹幕,一律按纯视频解析;要用弹幕功能就先把它关掉。
41
- - **QQ 适配器 → 面板带「打开原站」链接**(默认开启):解析面板(以及番剧选集面板)下方多一个
42
- 「打开原站」按钮,点一下直接跳到抖音 / B站 的原作品页。
43
- - **QQ 适配器 → 面板显示「烧录弹幕」列**(默认关闭):打开后,QQ 里的解析面板会从
44
- 「清晰度 | 大小」两列变成「清晰度 | 烧录弹幕 | 大小」三列 —— 用户点中间那列就按对应画质
45
- 带弹幕解析,左边的画质按钮仍是纯视频。面板里没有额外的开关按钮,显示与否只看这一项配置。
25
+ 有弹幕开关 / 字号 / 透明度 / 显示区域 / 滚动·顶部·底部三类开关 / 彩色弹幕)。页面**零外网依赖**,
26
+ 服务端支持 HTTP Range,进度条可拖动。
27
+ - 配置项(都在「通用 → 在线播放器设置」,括号里是默认值):
28
+ **在线播放器总开关**(开)、**面板显示「在线看」按钮**(开)、**播放器公网地址**(空)、
29
+ **播放器端口**(0 = 复用 Koishi 端口)、**链接有效期(分钟)**(60)、
30
+ **在线播放最大文件(MB)**(0 = 跟随全局「文件大小限制」)、**超限转在线播放**(关)。
31
+ - **这一组有自己的总开关**:关掉后组内其它设置全部变灰不可改,解析回到原来的 ffmpeg 烧录流程
32
+ (面板列头变回「烧录弹幕」、不再有「在线看」列);这一组在面板里的样式与「缓存设置 / 交互设置」
33
+ 等分组**完全一致**(同一套卡片容器、标题与间距)。
34
+ - **「在线看」按钮**(面板「弹幕」右边一列):点它**直接在线播放**(带弹幕、视频不发群),
35
+ 即使面板弹幕列关着、配置里弹幕功能关着也照样带弹幕;总开关关掉时这一列不出现。
36
+ - **超过 QQ 档位上限(默认 200MB)的画质档照样列出来**:在线播放的视频不发到 QQ,
37
+ 所以那个体积上限不该再把档位藏掉;超限档位的「清晰度」那一格标「超上限」,
38
+ 右边的「在线看」仍可用(受下面那条播放器上限约束)。
39
+ - **「在线播放最大文件」**:显式填了就用它;留空或 0 = 跟随全局的「文件大小限制」;
40
+ **超限不走在线播放**(判定发生在把文件搬进播放器目录**之前**,一点磁盘都不占),
41
+ 退回原来的发送流程并说明「超过在线播放的体积上限,按原来的方式处理」。
42
+ 「超限转在线播放」也吃这条上限(开了转播也不突破)。
43
+ - **「超限转在线播放」**(默认关):打开后,超过全局「文件大小限制」的视频不再回
44
+ 「视频太大了,还是去B站看吧」,而是照常下载并改成在线播放(视频不发群、也不占群文件)。
45
+ - **播放器公网地址**留空时:链接退化成「本机 IP + 端口」(本机 / 内网可用),
46
+ 日志里警告一次,机器人回复与播放页上都会带一句「未配置公网地址,仅本机可访问」。
47
+ - 播放页:**下载按钮**(服务端带 `Content-Disposition`,文件名做过安全处理)、
48
+ 过期页与播放页的「直接跳转 / 手动复制」、作品信息(标题 / UP 主 / 封面 / 播放量 / 点赞 / 投币 /
49
+ 收藏 / 评论 / 分享 / 发布时间 / 时长,**只用真实数据,没有就不显示**)、封面走**同源**地址(断网不裂图)、
50
+ 在线播放优先选 **H.264** 的流(避免「只有声音没有画面」)。
51
+ - 路由:`/kkk/player/:token`(播放页)、`/kkk/player/:token/video`(支持 Range;`?download=1` 下载)、
52
+ `/kkk/player/:token/download`、`/kkk/player/:token/danmaku`(弹幕 JSON)、
53
+ `/kkk/player/:token/cover`;令牌是随机串且只允许 `[0-9a-z]{8,64}`。
54
+ - **解析结果合并转发**(通用 →「交互设置 → 伪造合并转发消息」,默认开):
55
+ 一次解析产生的**所有内容**(卡片 / 图片 / 视频 / 评论…)合并成**一条转发**发出,
56
+ **过程提示不进转发**(「检测到链接,开始解析」「收到请求,开始下载」「加载中…」「发送中…」照常单独发)。
57
+ - 走的是**适配器自己的合并转发 API**:OneBot 系会调用
58
+ `send_group_forward_msg` / `send_private_forward_msg`(转发节点里带 uin / name);
59
+ - **身份**:开着 = 用**触发者**身份展示,关着 = 用**机器人**身份展示;
60
+ - 只对支持合并转发的适配器有效果;QQ 官方适配器没有这个能力,会自动退化成逐条发送;
61
+ - 发给别人(例如错误日志发给主人)的消息不会被吞进这条转发里。
62
+ - **通用 → 强制不烧录弹幕**(默认开):弹幕烧录的总开关,优先级最高;要用弹幕功能先把它关掉。
63
+ - **平台解析开关**(抖音 / B站 / 快手 / 小红书):**关掉某个平台后,那个平台彻底不处理** ——
64
+ 不管是从自动解析、`#解析` / 引用解析还是面板按钮进来,都不回复、不提示缺 Cookie、不记统计。
65
+ - **QQ 适配器**新增一批开关(面板 → WebUI 的「QQ 适配器」分类,与控制台同一份字段表):
66
+ **链接解析面板**(开)、**自动撤回面板**(开)、**画质档体积上限**(200MB)、
67
+ **番剧选集面板行列数**、**超大图片自动切片**(开)、**切片高度**(2000)、
68
+ **卡片文字识别密钥**(OCR)、**面板显示「烧录弹幕」列**(关)、**面板带「打开原站」链接**(开)、
69
+ **群文件发送阈值**(30MB)、**强制不烧录弹幕**(开)。
70
+ - 面板与播放页的**下载 / 跳转 / 复制**这类按钮:一律内联 SVG 图标,**不用 emoji**。
71
+ - 文档:README、帮助指令、更新日志改成用户视角(配置入口 + 指令表 + QQ 用法)。
46
72
 
47
73
  ### 修复
48
- - **在线播放页按B站播放页重做**(用户要求「参考 B站 UI」):
49
- 深灰底 + 白字的夜间风格;顶部封面小卡(带时长角标)+ 大字标题(最多两行)+ 一行小图标统计
50
- (播放量 / 弹幕数 / 发布时间 / UP 主);视频下方是弹幕控制条(**样式化开关** + 「弹幕设置」按钮),
51
- 设置面板默认收起,点开后有**字号 / 透明度 / 显示区域**三行;最下面是B站那排操作按钮
52
- (点赞 / 投币 / 收藏 / 评论 / 分享,**只用真实数据,没有就不显示,不编数字**)。
53
- 移动端控件不挤:字号 / 显示区域都是大号分段按钮,统计行自动换行。
54
- 仍然是**零外网依赖**(无 CDN、无第三方库,图标全是内联 SVG),弹幕仍是 canvas 自绘。
55
- - **播放页会带上作品信息**:解析时顺手把标题 / UP 主 / 封面 / 播放量 / 点赞 / 投币 / 收藏 /
56
- 评论 / 分享 / 发布时间 / 时长存进播放会话(B站取 `infoData.data.data`,抖音取 `aweme_detail`),
57
- 页面上按B站那样展示;封面在登记会话时下到本地、走**同源** `/kkk/player/<token>/cover`,
58
- 所以断网 / 内网也不会裂图;拿不到的字段就不显示。
59
- - **在线播放优先选 H.264 的流**(用户实测「返回的视频只有声音」):B站同一个清晰度会同时给出
60
- `avc1` 和 `hev1` 两路,接口常把 HEVC 排在前面,浏览器(没装 HEVC 扩展的 Chrome / Edge)
61
- 只能放声音。现在在线播放模式选流时优先挑 H.264(自动档位是去重之前把 H.264 排到前面),
62
- 正常发视频的行为不变;页面上也补了提示:真遇到解不了的编码会明说「只有声音没有画面」。
63
- - **播放器链接打不开、浏览器报 `ERR_UNSAFE_PORT`**(用户实测把端口配成了 6666,属于 IRC 段):
64
- 服务端一切正常,是浏览器按黑名单**禁止访问**这类端口。现在:
65
- - 启动时与生成链接时都会打一条明确警告(换端口,或者配公网地址走反向代理);
66
- - **端口在黑名单里、又没配「播放器公网地址」时自动退回 Koishi 自己的端口**(链接照常能用,
67
- 不用先去改配置);配了公网地址的反向代理场景照旧用你配的端口;
68
- - 「播放器端口」的字段说明里写明了别用 6665-6669 这类端口。
69
- - **打开了在线播放器,面板里却没有「弹幕」按钮**(用户实测):那一列当时还被 QQ 适配器里的
70
- 「面板显示「烧录弹幕」列」(默认关)管着,等于要开两个开关才有入口。
71
- 现在在线播放模式下这一列**只跟「弹幕重定向在线播放器」走**(开着就有),
72
- 烧录模式下才由那个旧开关决定;旧开关的说明也同步写清楚了。
73
- - **在线播放器设置整组被锁住**(用户实测):上一轮加的「需先开启弹幕功能才能编辑」判断**写反了** ——
74
- 实际效果是「开着『强制不烧录弹幕』(= 弹幕功能关着)时能编辑,关掉之后反而整组变灰」,
75
- 而且把 5 个字段全绑上了。现在改成:**只有总开关**(顺带改名为「弹幕重定向在线播放器」)
76
- 受「强制不烧录弹幕」联动,方向已修正(关掉它之后才能改总开关),
77
- 其余四项(公网地址 / 端口 / 有效期 / 最大文件)随时可编辑。
78
- - **「打开原站」链接把整条面板拖挂了**(严重):链接原来写成 `mqqapi://forward/url?...`,
74
+ - **WebUI「推送目标填完频道 id 点完成 → 整个面板黑屏」**(线上事故):
75
+ 后端 `/kkk/v1/groups/batch` 返回的是 `data: null`,而面板前端拿到后直接 `data.find(...)`,
76
+ 渲染期抛 `TypeError: Cannot read properties of null (reading 'find')`,React 卸载整棵树 → 整页空白。
77
+ 现在该接口**永远返回数组**(并补上群名 / 头像 / 机器人在线状态),前端也加了一层兜底,
78
+ 另外给面板加了**错误边界**:任何没被接住的异常都会顶出一块可读的中文报错卡片(带文件名:行:列),
79
+ 不再是黑屏。
80
+ - **`spawn ./downloads/ffmpeg-linux-amd64-… EACCES`**(B站 m4s → mp4 修复失败、整条解析跟着失败):
81
+ 兼容层把「拿到的那份 ffmpeg」原样交给 spawn、从不校验,而自动下载/缓存下来的那份常常是**相对路径**
82
+ 且没有执行权限。现在按 **Koishi 的 ffmpeg 服务 → 配置里的 ffmpegPath → 环境变量 → PATH** 逐份校验
83
+ (相对路径按数据目录 / 工作目录归一化成绝对路径、必须存在、Linux/macOS 查 `X_OK`、Windows 查可执行扩展名),
84
+ 跳过时打一条带原因的日志、选中时写明用的是哪一份;**spawn 起不来会自动换下一个候选重试**,
85
+ 全部不行时 stderr 里列出「都试过哪些」,并给出可以照做的 `chmod +x` 提示。
86
+ - **关了小红书的解析,还是会提示没有 Cookie**:平台开关原来只作用在「自动解析」那条命令上,
87
+ 走 `#解析` / 引用解析进来的链接照样跑到底并抛「我还没有小红书的 Cookies」。
88
+ 现在四个平台的 handler 最前面都判断自己的开关,关掉时直接返回(见上面的「平台解析开关」)。
89
+ - **合并转发没生效**:发给适配器的元素少了 `forward` 属性,OneBot 只会把它当成普通消息内容。
90
+ 现在带上 `forward` 与 `<author>`(决定这条转发显示成谁发的),实测会走 OneBot 的合并转发 API。
91
+ - **「打开原站」链接把整条面板拖挂**(严重):链接原来写成 `mqqapi://forward/url?...`,
79
92
  QQ 官方接口直接拒收(`[40034028] 请求参数不允许包含url mqqapi://forward/url`),
80
- **整条面板消息都发不出去** —— 面板失败 → 解析失败 → 最后只剩一张错误卡片。
81
- 现在改成普通 markdown 链接 `[打开原站](https://…)`(同一条消息里的卡片图用的就是 https 链接,
82
- 说明这种形式是被接受的),并加了兜底:面板带链接发送失败时**自动去掉链接行重发一次**
83
- (解析面板、番剧面板都走这条兜底),链接发不出去再也不会连累解析。
84
- - **错误卡片切片失败 `e is not defined`**:`sliceImageToMarkdown` 里混进来一段从
85
- `sendSlicedImage` 复制过来的「非 QQ 平台」分支,用了这个函数根本不存在的 `e` / `valid` ——
86
- 函数一调用就 ReferenceError,错误卡片永远切不了片,最后那张 8.9MB 的长图直接原样发出去
87
- (还可能被 QQ 拒收)。该分支已删除,切片恢复正常。
88
- - **`getFriendList 失败: TypeError` 刷日志**:兼容层直接调了适配器不一定实现的方法
89
- (qq-crack 就没有)。改成先做能力判断,没有这个方法就安静返回空数组。
90
- - **「下载进度详情」里看不到解析阶段了**:现在 B站 / 抖音 / 快手 / 小红书 四条链路都能看到
91
- 「正在获取下载链接 → 正在合并音轨(有的话)→ 正在烧录 / 正在准备在线播放 → 正在发送」。
92
- 之前只有抖音 / 快手 / 小红书登记过「正在获取下载链接」(B站一个阶段都没有),
93
- 「正在烧录」「正在发送」这两个状态则从来没实现过;解析流程改成「先下载、再渲染、最后上传」之后,
94
- 中间几段更是完全没有登记点,用户点「下载进度」只会看到「当前没有正在进行的下载」。
95
- - 阶段挂在**解析共用的一个 key** 上:后一个阶段覆盖前一个,同一次解析永远只有一条,
96
- 不会出现「正在烧录」和「正在发送」并排打架;
97
- - 登记点集中在共用出口:解析入口(`beginParseStage`)、音视频合成(`mergeVideoAudio`)、
98
- 烧录(`withDownloadStage` 包住 B站 / 抖音的烧录调用)、上传(`uploadFile`)、
99
- 在线播放(`publishOnlinePlayer`);
100
- - 每个阶段结束都会清理(成功失败都清),解析结束还会在命令入口兜底清一遍,
101
- 不会再卡在「正在获取下载链接」;顺带修掉了实况合成带 BGM 那条分支漏清理的问题。
102
- - **弹幕烧录一直不生效**:上一轮「移除弹幕功能」时把烧录请求写死成了 false,
103
- 指令 `弹幕解析`、参数 `--dm=1` 和平台配置里的 `burnDanmaku` 都不会真的烧弹幕,现在都恢复,
104
- 并且统一过一遍上面那个总开关(不存在「面板关了、指令还能烧」这种半开状态)。
105
- - 「弹幕解析」指令重新注册(控制台指令列表里能看到),指令说明同步改成用户能看懂的说法。
106
- - 面板在「所有画质都超过体积上限」时补回提示:「这里只保留最小的一档,发送可能失败」。
93
+ **整条面板消息都发不出去**。现在改成普通 markdown 链接,并加了兜底:
94
+ 面板带链接发送失败时**自动去掉链接行重发一次**。
95
+ - **在线播放器设置整组被锁住 / 判断写反**:改为只有总开关受「强制不烧录弹幕」联动(方向已修正),
96
+ 其余字段随时可编辑;后来又进一步改成「总开关关掉 → 组内其它字段变灰」。
97
+ - **开了在线播放器,面板里却没有「弹幕」按钮**:那一列当时还被 QQ 适配器里那个旧开关管着,
98
+ 等于要开两个开关才有入口;现在在线播放模式下这一列只跟播放器总开关走。
99
+ - **在线播放器设置和别的分组样式不一致**:它被注入进了「交互设置」的卡片内部(卡片套卡片 + 两列网格),
100
+ 现在改成和「缓存设置 / 交互设置」并列的兄弟分组,用的是面板同一套卡片容器。
101
+ - **播放器链接点开报 `ERR_UNSAFE_PORT`**(把「播放器端口」配成了 6665-6669 这类 IRC 段):
102
+ 服务端正常,是浏览器按黑名单禁止访问;现在启动/生成链接时都会明确警告,
103
+ 且**端口在黑名单里、又没配公网地址时自动退回 Koishi 自己的端口**;字段说明里也写明了别用这类端口。
104
+ - **av 号链接解析失败**:av→BV 转换的返回结构多包一层,取不到 bvid 导致静默失败。
105
+ - **错误卡片切片失败 `e is not defined`**:`sliceImageToMarkdown` 里混进了一段用了不存在变量的分支,
106
+ 一调用就 ReferenceError,超长错误卡片永远切不了片(最后原样发一张 8.9MB 的长图,还可能被拒收)。
107
+ - **弹幕烧录一直不生效**:此前「移除弹幕功能」时把烧录请求写死成了 false,
108
+ 指令 `弹幕解析`、参数 `--dm=1` 与平台配置里的 `burnDanmaku` 都不会真的烧;现已恢复并统一过总开关。
109
+ - **「下载进度详情」看不到解析阶段**:现在四条链路都能看到
110
+ 「正在获取下载链接 → 正在合并音轨(有的话)→ 正在烧录 / 正在准备在线播放 → 正在发送」,
111
+ 阶段挂在解析共用的一个 key 上(不会两条打架),每个阶段结束都会清理,不会卡在某个状态。
112
+ - **快手解析崩溃**(`sendParseTip` 循环 import)、**小红书解析**(`sendContent` 为空导致什么都不发 /
113
+ 表情数组类型 / 渲染顺序 / 视频笔记字段 / 评论兜底)、**抖音与快手接口形状适配**。
114
+ - **图集 / 评论图片 / 实况图**:原来会因为元素类型判断错误(Satori 是 `img` 不是 `image`)导致
115
+ markdown 永远为空、退化成一张一张发;现在统一合并成**一条 markdown**,超长图按需切片。
116
+ - **卡片消息解析**(群里转发的分享卡片没有链接时):接入 OCR + 平台搜索定位作品,
117
+ 多个候选时给一张 markdown 表格让用户点;只处理 B站平台卡片(看卡片自带的 source)。
118
+ - **QQ 群文件阈值不生效**(读不到值 / 平台判断取不到):改成读 Koishi 运行时配置 +
119
+ 用适配器真实平台名判断,并补了判定日志。
120
+ - **发送失败重试**:普通发送 3 次退避重试、切片上传 3 次重试;切片前的失败判断不再只看消息 ID。
121
+ - **`getFriendList 失败` 刷日志**:兼容层先做能力判断(qq-crack 没这个方法),没有再安静返回空数组。
122
+ - 控制台侧边栏入口消失(`try/else` 语法错误)、入口包缓存导致改了看不到、面板 token 过期报
123
+ 「加载配置失败 / 鉴权失败」、生产环境面板报 `assets/web/index.html 缺失`。
107
124
 
108
125
  ### 变更
109
- - **解析流程改成「先下载视频,再渲染卡片」,并且单步失败不再中断整个解析**(抖音 / B站 / 小红书 / 快手):
110
- - 选完清晰度后先下载(需要烧录的连合成、烧录一起做完),再去渲染信息卡、评论区;
111
- - 中间任何一步失败都只跳过这一步、继续跑后面的,能发的视频/卡片照发;
112
- - 全部跑完后如果确实有失败,才渲染**一张**错误卡片(里面会列出是哪几步失败了),
113
- 错误不再出现在「视频明明能发、却因为一张卡片渲染失败而什么都没有」的场景里。
126
+ - **解析流程统一成「先下载视频 → 再渲染卡片 / 评论区 → 最后发送」,并且单步失败不再中断**
127
+ (抖音 / B站 / 小红书 / 快手):中间任何一步失败只跳过这一步、继续跑后面的,能发的视频/卡片照发;
128
+ 全部跑完后如果确实有失败,才渲染**一张**错误卡片(里面列出是哪几步失败了)。
129
+ - **合并转发语义**:从「只影响转发时用谁的身份」变成「把一次解析产生的所有内容合并成一条转发」
130
+ (身份仍由那个开关决定:开 = 触发者,关 = 机器人)。
131
+ - **在线播放不受 QQ 的「文件大小限制」约束**(视频根本不发到 QQ),改由「在线播放最大文件」约束;
132
+ 面板也不再按前者隐藏画质档。
133
+ - **配置入口统一**:插件配置里的设置项全部收到 WebUI 面板(`/kkk`)里改;
134
+ 权限(谁可以触发扫码登录)与错误日志接收人改成手填(支持 `*` 与账号,多个用逗号分隔)。
135
+ - 解析面板的「烧录弹幕」列与总开关改为**配置驱动**(面板里不再有开关按钮)。
136
+ - 评论区图片不再单独发一遍(评论卡片里已有),减少刷屏。
137
+
138
+ ### 兼容与升级说明
139
+ - 老配置缺新键时的行为:在线播放器与「在线看」按钮**默认可用/显示**、面板仍默认有弹幕列;
140
+ 「超限转在线播放」默认关(维持「太大了就拒绝」的老行为);「强制不烧录弹幕」默认开。
141
+ - **合并转发**需要适配器支持:OneBot 系(NapCat / Lagrange 等)走 OneBot 的合并转发 API;
142
+ QQ 官方适配器没有这个能力,会自动退化成逐条发送(功能不报错,只是不合并)。
143
+ - 需要 ffmpeg 的功能(弹幕烧录、音视频合成、m4s 修复、图片裁剪):按上面的候选顺序自动找,
144
+ 装一份系统 ffmpeg(或在配置 / 环境变量里指定绝对路径)即可;插件本身**不会**再自动下载 ffmpeg。
114
145
 
115
146
  ## 1.1.0
116
147