# 更新日志

## 4.0.1

> 修一个 4.0.0 带出来的问题：开了「强制在线播放」之后，**番剧还是会下载完直接发文件**，
> 在发不出视频文件的机器人上（比如 B站私聊机器人）就卡在上传那一步报错。
> 普通视频不受影响 —— 它一直都是给链接的。

### 修：番剧不走「强制在线播放」

- 「在线播放器设置」里的「强制在线播放的适配器」（默认填的是 `bilibili`）对**普通视频**
  一直是生效的：解析完给一条在线播放链接，不发视频文件。
- 但**番剧**走的是另一条分支，那一条漏了这一步 —— 于是照旧把视频下下来发文件，
  碰上发不出视频文件的机器人就卡在上传那一步报错。
- 现在两条分支一致了：**番剧也只给在线播放链接**，不再尝试发文件。

## 4.0.0

> 这是 3.0 之后攒的一次大版本。下面把 **3.0 到 4.0 之间所有你用得出来的变化**
> 按「用起来是什么样」重新整理了一遍 —— 只说你能看到、能感觉到的事。
> 一路跟着升上来的话，大部分你已经用到了，可以直接跳过。

### 出图快了很多

- 卡片以前要半分钟才出来，现在**两三秒**。卡面上那层几乎看不出区别的噪点默认去掉了，
  它要一个像素一个像素地算，占掉九成时间；想要颗粒感可以在设置里换成小图案平铺，仍然比原来快很多。
- 信息卡、评论区、图集、视频**各走各的**，谁先准备好谁先发，不再互相等。
- 每张卡片该按几倍分辨率渲染，会自己测一次、记住快的那档，不用你管。

### 图片清楚了，也不会再发糊

- 卡片、评论图、图集里的图现在都按**不会被二次压缩的方式**发，卡片上的小字不再糊成一团。
- 图片**不会再被拉变形**：显示的尺寸一律按真实宽高来，量不到就退回普通图片（会糊一点，但比例是对的）。
- 超过一定高度的图会自动切开再发，不会再「先整张发一遍、被退回来才补切」。
- 同一张图不会反复上传，也不会发两遍。

### 该发出去的，真的发出去了

- 发送失败现在**按平台给的原因**分别处理：看到「文件太大」就直接切成几张，不白等、也不重复传。
- **大文件下不完**的问题修了：下载源卡住会自动换一个，只要还在传数据就不会被掐断，
  报错也不再说成「连接被重置」那种看不懂的话。
- 快手那种好几行的长标题，以前会让视频**整个发不出来**，现在会先把名字收拾干净，还是被退就换个名字再发。
- 发特别大的视频时偶尔冒出来的一句看不懂的报错，已修。
- 没拿到发送结果就是没发出去，不再当成成功悄悄丢掉。

### 选清晰度：所有平台都能选了

- 以前只有官方 QQ 机器人能在面板上点着选，其它平台直接按设置里写死的画质走。
  现在**所有平台**发链接后都会先给一份列表，**回序号就能选**。
- QQ 系（NapCat、LLOneBot 这些）还能**用表情当按钮**：点第几个表情就是第几档。
  个别会把行内文字吞掉的协议端，表情会排在最后一行，并写明「从左到右数第几个」。
- 等多久可以自己设（默认 60 秒）。**到点没人选就按默认画质继续解析**，不会把链接一直晾着。
- 没勾「发送视频」时不会再多问一句画质。
- **「提取封面图」并进了这张面板**：最右边多一个「对的对的」表情，贴它就把封面单独提出来，
  而且**提完面板还在**，可以接着选清晰度。

### 卡片下面能单独取图

- 卡片下面多了「提取封面图」「提取评论区图片」两个按钮，B站 / 抖音 / 小红书 / 快手都有。
- **同一个按钮只放行一次**，再点不会刷屏 —— 想再要一次，重新发一遍链接就行。
  自己手敲指令不受这个限制。
- 开了「是否收集评论区的图片」时，解析完会直接把评论里的图发一条，按钮不再重复挂。

### 互动视频能一路选着玩了

- 群里发一条互动视频链接，**选项就浮在播放页的画面上**，点一条接着播下一段，全屏也看得见、点得动。
- 点完能看到下一段的下载进度，失败会给「重试这一段」，不用刷新整页；下过的段会留着，再点回去是秒开。
- **剧情图**：把整条剧情画成一张图，走过的分支加粗高亮，结局在哪一目了然（开关默认关）。
- 互动视频不再被体积上限拦住，下完才检查一次；太大的段给你播放链接，剧情照样接着玩。
- 弹幕更全了：以前轨道被白字弹幕占满后，彩色弹幕和顶部弹幕基本轮不到显示，现在会按比例抽稀，留位置给它们。

### 在线播放

- **默认不在服务器上把画面和声音合成一个文件**，打开就能放；下载分成「画面」「声音」「合成后」三个。
- 播放页上多了一行**原视频地址**，点了能在新窗口打开原站。
- 机器人重启之后，之前发出去的播放链接**照样能选剧情**。

### 合并转发

- 两种开法：通用里打开 = 所有平台都合并；或者只在某一个平台单独打开。**默认全关**。
- 可以自己挑合并哪些内容：文字 / 图片 / 视频 / 文件，**还有流程图和评论区图片**。
- 每条内容各占一个条目，图片不会再因为挤在一条里而全部加载不出来。
- 转发失败不会丢内容，会自动退回一条条发；开着合并转发时选清晰度也不会再卡住。

### 出错了会怎么样

- 出错时会自动把**错误信息、运行环境、最近的日志**上传，并给你一个**编号**，
  带着编号进群求助就行，不用再截图、翻日志。**Cookie 一律不传**，像密钥那类字段一律打码。
- 嫌那张错误卡片占地方，可以打开「**出错只发文字**」，只在群里留一行「已上传，ID：xxx」。
- 错误卡片**不会再渲染十几分钟**，超长内容会自动折叠，几秒钟就出来。
- 机器人掉线时不再甩一句英文，会直说「机器人当前不在线，等上线后下次推送会正常发出」。
- 抖音没返回数据时不再扔一句英文，会说清是哪一类问题、常见原因是什么。
- 被反爬页、风控拦下那类失败，卡片上会多一块**平台真正回的内容**，不用再照着一句套话猜。
- 日志只传本插件相关的部分，不再把整台机器的日志尾巴都传上去。

### 平台这块

- **抖音**：抖音改了风控规则，**换 cookie 是没用的** —— 是解析用的库太旧。已经换到带新签名的新版本，
  作品详情、评论区、弹幕都正常。剧集（合集里的正片）以前走的分支不对，也修了。
- **快手、小红书**：评论区以前渲染不出来、或者一解析就报错，现在都能正常显示。
- **小红书**图文笔记的图集以前会一次发两遍，现在只发一遍；关掉「图片」是真的不发了。
- **卡片解析**：B 站卡片认错 UP 主的问题修了（首行、UP 主前后行都当候选）；
  候选列表在个人号上也发得出来了（改成纯文本，一条条列标题和链接）。
- 评论、动态正文里的 emoji 以前在群里显示成**一个个方框**，现在换成苹果的表情图来画，
  肤色、国旗、`9️⃣` 这类组合也都认。

### 卡片上的小修小补

- B站卡片的**简介**以前会整块不见，现在单行、多行、带 @ 和链接的都正常（QQ 面板那张也一起修了）。
- 实况照片那张提示卡以前在群里显示成一坨（间距全没、图标只剩两三个），已修。
- 评论卡右下角的二维码**中间带上作者头像**了（B站 / 快手 / 小红书，和抖音统一）。
- 一批卡片标题和数字的字号从最粗降到次粗，小尺寸下不再糊成一团。
- 抖音评论图里的二维码地址统一成规范短链，扫出来的地址稳定；
  登录二维码在部分机器上显示成一片方格的问题也修了。
- 抖音推送不会因为「去重记录到期」就把还在列表里的历史作品重复推一遍。

### 设置和控制台

- 控制台里 40 条指令收进了 `kkk` 一个分组；`解析 <链接>` 这几种写法照旧都能用。
- 控制台插件配置页里的设置**全部隐藏**（避免两个界面各改一半互相覆盖），统一在 `/kkk` 面板里改；
  面板里多了「Koishi 设置」一组，以前只能在控制台改的几项现在也能在面板改。
- 面板里 200 多项设置全部显示、全部展开，说明都改成了看得懂的说法。
- 只支持**浏览器渲染**了：老的内置方案在 Windows 上加载不了网络图片，
  卡片里的封面、头像一直是空白框。装一个浏览器渲染插件即可。

### 升级要注意

- **数据存放方式变了**：不再自己在数据目录里开数据库文件，全部改用 Koishi 自带的数据库，
  备份和迁移跟着你的宿主走。**代价：过滤词 / 过滤标签和解析统计历史会从零开始**
  （订阅关系不受影响，每次启动自动重建）。
- 数据库服务变成**必选**，没配置数据库时插件不会加载。
- 以前在 MySQL 上建出过半截表的，需要先删掉再启动，让插件按新定义重建。
- 升级完**重启一次机器人**，并建议实测一次抖音解析。

## 3.14.0

这一版把「选清晰度」这件事带到了 OneBot 平台（NapCat / Lagrange / LLOneBot 等），
另外修掉了一处只有 OneBot 上才会露出来的显示问题。

### 新增：OneBot 群里也能选清晰度了

以前发链接后**直接按配置里写死的画质**解析，只有官方 QQ 机器人能在面板上选 ——
因为 OneBot 没有 QQ 那套「markdown + 原生按钮」。

现在改成**用表情当按钮**：机器人发一条选择消息，在下面贴一排表情，
**点第几个表情就是上面第几档**，选完还要问一句「是否在线播放」，答完才真正开始解析。
选完这条消息和那排表情都会撤掉，群里不留垃圾。

- 消息里会把表情印在选项前面，和下面那排一一对应，照着数就行；
- 用的是 QQ 系统表情（不是 emoji 字符），老客户端 / 协议端也显示得出来；
- 开关在控制台「解析面板」分组里（**默认开**），不需要就关掉，关掉后行为和以前一样。

### 修：OneBot 上会漏出一串看不懂的代码

下载提示在 OneBot 上会跟着一串 `<qqbot-cmd-input ...>` 的裸文本 ——
那是 QQ 私有的按钮标签，OneBot 不认 markdown，原样印出来就是一串乱码。
现在只在**真的支持 markdown 的平台**上发按钮，其它平台发成一句可以直接复制的话。

### 所有平台都能选清晰度了（不只是 QQ 系）

上面那套表情按钮只有 QQ 系能用，其它平台以前是直接按配置里写死的画质解析。现在统一了：

- 发链接后先给一份**数字列表**，**回序号就能选**（开关「发链接后先问清晰度」，默认开）；
- QQ 系（NapCat / LLOneBot 等）可以在此之上**额外**选择用表情当按钮（默认开），
  不需要就把那一个关掉，退回数字列表；
- **等多久**可以配（默认 60 秒）。到点没人点就**按配置里的默认画质继续解析**，
  不会把链接一直晾在那儿；
- LLOneBot 这类会把行内文字吞掉的协议端，表情改成排在最后一行，
  并多写一句「从左到右数第几个」。
  **修：有的 LLOneBot 上选项还是会被吞**（5 档只剩「1.」和「5.」两行）——
  排法以前把「适配器叫什么」也算进判断，用 napcat 适配器连 LLOneBot 就被当成了 NapCat。
  现在**只看对面协议端自己报的名字**，报不上来就按最保险的排（表情放最后一行）；
  日志里会打一行「表情排法判定：协议端 = … → …」，判成哪种一眼能看见。

### 修：没勾「发送视频」也会问清晰度

解析时发什么（作品信息 / 评论图片 / 视频）是分平台勾选的。以前只要开了清晰度面板，
**没勾视频也会先问一句画质**，答完才继续 —— 白问一次。
现在没勾视频就直接跳过，该发的卡片照发。

### 修：Milky 上图片发成一串看不懂的代码

Milky 上发图会变成 `![#420px #315px](https://…)` 这种裸文本，图一张都出不来 ——
因为这个尺寸写法是 **QQ 官方机器人**才认的 markdown 语法，Milky 不渲染。

「哪些平台不认 markdown」这份名单以前在四个文件里各写了一遍，**全都漏了 Milky**，
于是它被当成「会渲染 markdown」的那类。现在名单收敛到一处，Milky 明确在不渲染那边，
评论区图片、封面这些都改回普通图片发送。

### 修：Satori 适配器上「收得到表情、发不出表情」

走 Satori 适配器的协议端能收到点击、却怎么也发不出那排表情 —— 它的 Bot 上是**一个
表情方法都没有**的（适配器按协议的方法表批量生成，而表情回应还是实验性资源、不在表里，
连标准的那个方法都没生成）。

现在方法找不到时会**按 Satori 协议直接发 HTTP**（`reaction.create` / `reaction.delete` /
`reaction.list`），适配器自带的连接已经带好了身份信息，照协议发就行。
顺带 `reaction.list` 也能用了 —— 这条链路上连「谁点了」都查得到。

### 新：Milky 上也能用表情选清晰度了

Milky 是 QQ NT 的另一套实现端，**它不是 OneBot**（没有 `set_msg_emoji_like`），
所以以前在 Milky 上根本不会出清晰度面板。现在接上了：它的适配器给的是
**Satori 标准**的「贴表情 / 撤表情」接口，和 OneBot 那套形状完全不一样，
两边各走各的路，功能一样（选清晰度、提取封面图、是否在线播放都能用）。

点击这件事 Milky 反而**比 NapCat 更稳**：它的适配器把群里的表情回应直接发成标准事件，
不像 NapCat 那条会被适配器丢掉，所以不需要机器人反复去问「谁点了」。

### 新：「提取封面图」并进清晰度面板

开了「发送视频」时，链接会先出清晰度面板，作品详情卡就不再单独发一次，
而「提取封面图」原本只挂在那张卡上 —— 于是按钮整个消失。

现在它**就在清晰度面板上**：面板最右边多一个 ✅️（对的对的），**贴它就把封面单独提出来**，
而且**提完面板还在**，可以接着选清晰度；一直不选就按原来的超时处理（用默认画质继续解析）。
没有表情可点的协议端上，它在数字列表里占一个序号，回那个序号效果一样。

顺带几处小改动：

- 卡片下面那句提示现在会写明**「也可以直接给这条消息贴个表情」**
  （只在真的会贴表情时才写，做不到就不写，免得照着做了没反应）；
- 这个按钮的有效期从 3 分钟延长到 **10 分钟**，翻回去再点也能用；
- **提示里不再写 ✅️ 那种字符**了 —— 它在 QQ 上会显示成另一个图案，跟真贴上去的
  那个表情对不上，照着找一个对不上的图案等于白写。现在 NapCat 上把表情直接印在
  选项旁边，LLOneBot 上（那边表情只能排在最后一行）改成写「最右边那个『对的对的』」；
- 评论区图片**已经按配置直接发过**时，那条消息下面不再挂任何提示和表情。

### 新：「合并转发内容」里可以单独勾「评论区图片」

评论区里**用户自己贴的那些图**（就是「是否收集评论区的图片」打开时自动发出去的那一批）
现在单独算一类，可以自己决定进不进聊天记录 —— **默认不进**：评论长图里已经把这些图画过一遍了，
再在转发里收一份原图，同一批图会在一条记录里出现两遍，没意义。想要它进去就勾上「评论区图片」。

### 修：开着「解析结果合并转发」时点了表情没反应

合并转发模式下，选择提示会被先攒进转发缓冲区、拿不到真实的消息 id，
面板拿着这个假 id 去贴表情、去等回应 —— 当然永远等不到。

现在**先只发选择提示，选完把这些都撤回，解析结果才合并成一条转发发出去**：
先选、后解析、再合并。

开着合并转发时，**选清晰度这一步不再渲染作品详情卡**了 —— 只出一句选择提示，
卡片留到你选完、真正开始解析时才渲染，于是卡片、视频、评论区**合成一条**转发出去，
不会像之前那样先出一条「只有卡片」的转发、再出第二条。
（不开合并转发时不变：卡片照旧单独发一条，不会被选择提示那条消息一起撤掉。）

### 修：发送大文件时报 `Maximum call stack size exceeded`

往群里发体积较大的视频时，偶发一条看不懂的 `Maximum call stack size exceeded`，
视频发不出来，也看不到真正的失败原因。已修。

### 新：评论和动态里的 emoji 不再显示成方框

评论、动态正文里大家打的 🔥、❤ 这类表情，以前在群里渲染出来是**一个个方框**
—— 生成图片的容器里没有表情字体，画不出来。

现在改成用 Apple 的表情图来画：文字里每个表情都会被单独挑出来，换成对应的一张小图
贴回原来的位置，肤色、国旗、`9️⃣` 这类组合形态也认得（评论里常见的「不带修饰符号」
的 ❤ 也认）。

这套图源是**可选依赖**，没装的话表情会退回成原来的字符，不影响其它功能。

### 修：抖音部分账号解析被拦成 403

抖音的网页接口现在要求带一组风控签名，少了就被拦成
`403 Blocked by ArgusSecurityPlugin Uifid Not Found` ——
表现是**怎么换 cookie 都解析不了**，看着像 cookie 失效，其实不是。

这套签名能力在解析库里，这次把解析库升到了带它的新版本。
**升级后建议实测一次抖音解析**（这是唯一没法离线验证的一项）。

### 修：抖音剧集类作品走的分支不对

剧集（合集里的正片）以前没被当成视频，走的分支不对。已修。

### 修：抖音评论图里的二维码地址不规范

评论区长图里那张二维码，非视频作品（图文 / 文章）的地址以前不是规范短链。
现在统一成 `www.douyin.com` 的写法，扫出来的地址稳定。

### 修：登录二维码在部分机器上显示成一片方格

登录二维码那张图用了一个容器里未必存在的字体族，字族对不上时就渲染成一片方格。已修。

### 新：解析失败时能看到平台到底回了什么

撞上反爬页、被风控拦截那类失败，错误卡上以前只有一句「平台返回了反爬页面」
—— 那其实是库自己的兜底话，**不是平台说的**。

现在这种情况会多一块**「响应体原文」**，把平台真正回的内容截一段印出来（太长会截断）；
上面那句也改叫「错误说明」，免得被当成平台原话。

### 修：几个只在特定输入下才会出问题的隐患

这几处都是上游修的安全问题，平时用不出来，但一旦被构造输入命中就有影响：

- **引用消息里的图片地址**：以前拿到地址就去下载。如果那个地址指向内网
  （`localhost`、私有网段这类），机器人会照着去访问。现在不是公网 http(s) 地址就不下载；
- **抖音 / 小红书短链展开**：展开前先确认域名真的是这两个站，不是就不发请求；
- **抖音下载直链**：以前只要消息里出现那段链接文字，就把**整条消息**当地址拿去下载。
  现在改成逐个取出 URL、核对该站域名与路径后才下载；
- **视频临时预览地址**：以前直接用磁盘文件名寻址，会**把服务器上的文件路径暴露出去**。
  现在改成随机令牌，预览页 / 视频流 / 状态推送都不再带路径。

## 3.13.0

这一版把上游最近一批改动搬了过来，另外修了几处只有真用起来才会碰到的显示问题。

### 修：实况照片提示卡整张崩了

那张卡（「这是一张实况照片」的提示）在群里显示成一坨：文字挤在一起、间距全没、  
一排品牌图标只剩零星两三个。

原因是卡片的样式是**跟着模板按需生成**的，模板更新后新用到的样式没跟着补上。  
这类问题最坑的地方是**页面不报错**，只是悄悄少样式 —— 光看日志什么都看不出来。

现在补了一套「和上游样式逐条对齐」的机制，并加了守卫脚本，  
以后模板再更新不会再漏。顺带修好了 B站评论卡的字体，以及群统计卡缺掉的一段间距。

### 修：*抖音会重复推一遍历史作品*

*喜欢 / 推荐列表的去重记录以前是*「固定有效期」：一条作品记下之后，时间一到就作废，  
哪怕它还在你列表里，也会被当成新作品再推一次。

现在改成**跟着列表走**：每轮推送都把当前列表里所有作品的有效期一起往后延，  
只有**真正离开列表**的作品才会被清掉。清理的时机也跟着挪了 ——  
这两件事必须同时生效，否则升级的那一刻老记录会先被清掉，反而多推一轮。

### 新：评论卡片的二维码中间带上作者头像

B站 / 快手 / 小红书三张评论卡片，右下角那个二维码以前是纯黑白码，  
现在把作者头像嵌在正中间（和抖音那张卡的样子统一），深色模式也一起处理了。

### 修：B站卡片的简介（这次修的是 QQ 面板那张）

上一版修的是「解析出来那张卡」。但 QQ 上开着解析面板的时候，  
**解析卡其实是不发的** —— 群里那一张是面板自己画的，它的简介从出生起就是空的，  
所以修完看起来毫无变化。现在两张卡走同一份简介逻辑，单行、多行、带 @ 和链接的都正常。

### 其它

- **修**：小红书评论里「回复的图片」以前按一串网址处理，接口其实给的是带宽高的对象，  
  现在按真实结构解析；
- **修**：抖音推送图里「谁在喜欢 / 谁推荐」那行取不到人，会退回显示作品作者，现在正常了；
- **改**：一批卡片标题和数字的字重从最粗降到次粗（B站、抖音、小红书、单张统计卡都覆盖了），  
  小尺寸下不再糊成一团。

## 3.12.1

### 修：B站卡片的简介没了

有一批 B 站视频解析出来的卡片，标题下面直接跳到播放数据，**视频简介整块不见了**。  
不是渲染糊了，是压根没画上去。

原因是 B 站接口有时会把简介放在「分段简介」里、有时只放在普通简介字段里，  
之前的代码碰上第一种情况以外的数据会算出一份空简介，然后把「空的」当成「有内容」画出来，  
结果整块简介反而被吃掉了。

现在两个字段都试，哪个真的有内容就用哪个 —— 单行简介、多行简介、带 @ 和链接的简介  
都能正常显示出来。

顺手还修了一处：接口返回的简介字段是空的时候不会再让解析报错。

## 3.12.0

### 新：提取图片的按钮只能点一次

卡片下面「提取封面图 / 提取评论区图片」这两个按钮以前可以一直点。有人一直点，  
群里就被同一张图刷屏，而且看不出是谁在点。

现在**同一张卡片上的同一个按钮只放行一次**：

- 再点不会往群里发任何东西（不再刷屏），但日志里会记下「这次是谁点的、之前是谁点过」，  
  真被人刷了能查出来；
- 封面和评论区是两个按钮，各点各的，互不影响；换一个作品也照常能点；
- 想再要一次，**重新发一遍链接**就行，新卡片下面的按钮又是可点的（不会被永久锁死）；
- 自己手敲 `kkk封面` / `kkk评论` 不受这个限制，随时都能用。

还有一处顺手修的：万一这次没发出去（图过期了、或者发送报错），这次点击**不算数**，  
再点一次还是能发 —— 以前那种「点一次就永久作废」的情况不会出现。

## 3.11.1

这一版修的主要是两类事：**东西发不出去**，和**按钮点了没反应**。

### 修：视频发不出来（快手的长标题）

快手有些作品的标题是好几行的长文案。QQ 收群文件时会先看文件名，  
标题里带换行就直接把整个上传退回来了 —— 视频明明已经下好，  
却一个都没发出去，只在群里留一张报错卡（同一个视频连着失败了三次）。

现在发之前会把名字收拾干净（去掉换行和非法字符、太长就截断）；  
万一还是被 QQ 退回，会自动换个临时名字再发一次。

顺带把报错信息也修好了：以前只写一句「失败」，现在会带上 QQ 给的原因，  
真出问题一眼就能看出是什么。

### 新：卡片下面可以单独提取封面图 / 评论区的图

解析出来的卡片是一整条长图，想单独存封面、或者只看评论里别人贴的图，以前只能自己截图。  
现在卡片下面多了一行按钮：

- **提取封面图** —— 把封面单独发一遍；
- **提取评论区图片** —— 发的是**评论里用户自己贴的图**（不是插件渲染的那张评论长图）。

B站、抖音、小红书、快手都做了。只有 QQ / QQ 频道会有按钮，  
其它平台会提示你引用那条消息、手敲 `kkk封面` / `kkk评论`。

### 修：「是否收集评论区的图片」打开没反应

打开这个开关，解析完就会**直接把评论区里的图发一条**，卡片下面不再重复挂按钮；  
关着（默认）保持原样，想单独存图自己点一下。

另外，评论区一条图都没有的时候，那个按钮不会再显示了 —— 反正点了也没东西可发。

### 改：指令在控制台里收进「kkk」分组

控制台的指令页面以前有 40 条指令铺一地，现在统一收在 `kkk` 下面。  
**几种写法照旧都能用**：`解析 <链接>`、`/解析 <链接>`、`kkk.解析 <链接>`、`kkk 解析 <链接>`。

### 修：图片被强制拉伸

QQ 的 markdown 图片必须写死尺寸。以前尺寸读不出来时会随便猜一个，  
比例和原图对不上就被硬拉变形。现在尺寸一律实测，实在量不到就退回普通图片发送  
（会糊一点，但比例是对的、也看得见）。

### 其它

- 图片超过 6000 像素就自动切开再发（这个高度可以在设置里改），不再先整张发一遍、被退回来才补切。
- 短时间内重复发同一条链接，不会一遍一遍重新出面板了。
- 推送消息下面多了「解析」按钮，点的是动态里带的那个作品（不是动态本身）。
- 修：点「提取评论区图片」以前会变成把视频重新解析一遍。
- 修：日志里的视频预览地址端口是空的、打不开。

## 3.10.2

> 修小红书图文笔记的图集一次解析发两遍的问题。

### 修小红书图集发两遍

- 图文笔记的图集有**两个发送点**：一个不看「发送内容」开关、直接发一条 markdown 全套图，  
  另一个按 `sendContent` 里的「图片」发（含实况图处理）。两个都命中时就是**两套图集**。
- 删掉前面那个不看开关的，图集统一由「图片」那处发送；关掉「图片」现在是真的不发了  
  （以前关掉照样会发一份）。
- 顺带给图集发送加了失败兜底：发不出去只记一步失败，后面的视频和错误卡片照常，  
  不再把整条解析掀翻。

## 3.10.1

> B站的复制跳转修一下：3.10.0 改成用用户发的那条链接后，B站 App 复制了反而不跳。

### B站跳转链接改回标准视频页

- 3.10.0 让跳转块统一用用户发出来的那条链接，B站照做之后反而不能用：  
  用户发的多半是 `b23.tv/xxx` 短链，**B站 App 复制了不跳转**。
- B站的跳转块固定用 `https://www.bilibili.com/video/<bvid>`（分 P 带 `?p=N`），  
  不再用用户发的那条。卡片右下角的二维码同步改成这条，两边一致。
- 抖音、快手、小红书仍按 3.10.0 的规则：用用户原样发的那条短链。

## 3.10.0

> 解析消息底部的「打开原站」链接换成了**代码块形式的跳转卡片**：  
> 整段复制后打开对应 App 会直接跳到那条作品，不再依赖 QQ 会不会把链接渲染成可点的东西。  
> 快手和小红书以前完全没有这条链接，现在补上了。

### 原站跳转改成「复制码」

- 发出的东西从 `[打开原站](链接)` 变成代码块：
  ````
  ```复制后打开抖音自动跳转 →
  https://v.douyin.com/iQabcdef/  :1pm Mai:/ 2237886846@qq.com
  ```
  ````
  各家 App 都认「剪贴板里有一条自家链接」——复制整段文本打开 App 会弹直达询问，  
  比点链接稳；官方 QQ 对 markdown 里的链接也经常直接拒收整条消息，代码块没有这个问题。
- 提示文案放在**围栏的语种位**（` ``` ` 后面那截），不占正文一行，  
  代码块里就只有链接本身，全选复制不会带上多余文字。
- **抖音附带唤起口令**：光有链接 App 不一定弹跳转，接一段口令才稳。  
  这是抖音 App 生成的固定串（每条作品都一样），不是模板。
- **快手、小红书单独发一条**：这两个平台没有清晰度面板——原来的跳转代码挂在画质表格下面，  
  它们压根走不到，等于一条都没发过。现在在解析内容发完后补一条同格式的消息。
- 开关沿用 WebUI 的「原站跳转」（QQ 适配器分组，`qqPanelSourceLink`，默认开）；  
  跳转发送失败只记日志，**不影响解析结果**。

### 跳转链接用用户发的那条

- 一开始让跳转链接和卡片右下角的二维码保持一致（`b23.tv/<bvid>`、抖音 `share_url`），  
  实测行不通：那种链接带 `xsec_token` / `u_code` 一串参数，**太长，App 剪贴板识别不了**。
- 改成优先用用户原样发的那条（`b23.tv/xxx`、`v.douyin.com/xxx`、`v.kuaishou.com/xxx`、  
  `xhslink.com/o/xxx`）——那本来就是各家 App 自己生成的分享形态，最短也最容易被识别。  
  取不到时才退回插件拼的标准链接。
- 卡片二维码**没动**：扫码不吃 URL 长度，换个链接反而要重测，保持原样。
- 顺带修了快手卡片二维码：以前填的是视频 CDN 直链，扫出来是段播放地址而不是作品页，  
  现在指向作品页（`photoId` 取不到时仍退回原逻辑）。

### markdown 只对 QQ / QQ 频道发

- 能渲染 markdown 的只有官方 QQ 适配器和 QQ 频道，其它平台（OneBot / Discord / Telegram /  
  KOOK…）会把代码块的 ` ``` ` 围栏原样显示成一串反引号。
- 判定从 OneBot 黑名单改成**平台白名单**（`qq` / `qqguild`）：这两个发 markdown 代码块，  
  其余一律发去围栏的纯文本（提示一行 + 链接一行），照样整段复制、App 一样认。

## 3.9.1

> 修 MySQL 上启动直接报 `ER_TOO_LONG_KEY`、插件起不来的问题。  
> 3.9.0 建的索引太宽了：索引字段现在按实际数据长度定长，最宽的索引从 4080 字节降到 1152 字节。

### 修复 MySQL 索引过长（ER_TOO_LONG_KEY）

- **现象**：MySQL 环境启动就报 `ER_TOO_LONG_KEY`（Specified key was too long），索引超过 3072 字节，表建不出来。
- **原因**：字符串字段没给长度，MySQL 按 `VARCHAR(255)` 建，`utf8mb4` 下每字符 4 字节，  
  单个字段就是 1020 字节。抖音作品缓存表那个由 **四个** 字段组成的唯一键  
  （作品 id + sec_uid + 群号 + 推送类型）算下来 4080 字节，直接超了上限。  
  另有几张统计表卡在 3060 字节 —— 离上限只差 12 字节，随时会爆。
- **处理**：凡是进索引（主键 / 唯一键）的字段，都按实际数据长度定长：
  | 字段                                | 长度    | 说明                |
  | --------------------------------- | ----- | ----------------- |
  | 群号 / QQ 号 / botId / 作品 id / 动态 id | 64    | 最多几十个字符           |
  | 抖音 `sec_uid`                      | 128   | 实际最长见过 76         |
  | 平台 / 内容形态 / 日期 / 指标名              | 16–32 | 固定枚举、`YYYY-MM-DD` |
  | 过滤词 / 过滤标签                        | 128   | 自定义文本             |
  | 备注、昵称等                            | 不限制   | 不进索引，不影响          |
  现在最宽的索引是 1152 字节（原来是 4080），其它都在 1024 以内。
- **在 MySQL 上已经建出过半截 `kkk` 表的**，需要先删掉再启动 —— 已有索引不一定能被自动改过来：
  ```sql
  SELECT TABLE_NAME FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME LIKE 'kkk%';
  ```
  确认是插件的表之后 `DROP` 掉，重启 Koishi 会按新定义重建。
- sqlite / postgres 不受影响，也不用做上面这一步（字段长度本来就够）。

## 3.9.0

> 插件不再自己建数据库了，全部改用 Koishi 自带的数据库服务。  
> 数据统一落在宿主配置的那个库里（sqlite / mysql / postgres 都行），备份和迁移跟着宿主走，  
> 不用再单独惦记插件数据目录里那几个 `.db` 文件。  
> **代价：过滤词 / 过滤标签和解析统计历史会从零开始**（订阅关系不受影响，每次启动自动从推送列表重建）。

### 数据库改用 Koishi 原生数据库服务

- 以前插件自己在数据目录里开三个 sqlite 文件（`douyin.db` / `bilibili.db` / `statistics.db`）；  
  现在所有数据都走 Koishi 的 `ctx.database`，表由插件注册（`kkk.douyin.*` / `kkk.bilibili.*` / `kkk.statistics.*`），  
  落在宿主配置的那一个库里（sqlite / mysql / postgres 都行），插件不再创建任何 sqlite 文件。
- **`database` 服务变成必选**：没有配置数据库插件时 Koishi 会直接不加载本插件（以前是可选的，因为那时插件自己建库）。
- **旧库不迁移**：三个旧 `.db` 文件保留不动，但不再被读取。订阅关系每次启动都会从配置里的推送列表  
  （`config.json` 的 `pushlist`）自动重建，**不受影响**；**过滤词 / 过滤标签、解析统计历史会从零开始**。
- 想保留过滤词或统计历史的，可以在切换前自己从旧 `.db` 里导出，或改配置里的推送列表重新加过滤规则。

## 3.8.0

> 抖音解析修好了。抖音那边改了风控规则，**换 cookie 是没用的** —— 问题出在解析用的那个库太旧；  
> 顺带修好快手、小红书的评论区渲染。

### 抖音：解析不了 / 一直提示 Cookie 失效

- **现象**：发抖音链接，机器人回「抖音没有返回这条作品的数据（错误码 500：抖音数据获取失败），  
  常见原因：Cookie 失效、被风控」，可同一个 cookie 换个插件却能正常解析。
- **原因**：抖音现在要求每个网页接口都带上设备标识（`uifid`）和一套新的签名头  
  （`x-secsdk-web-signature`，由抖音自己的风控 SDK 算出来）。  
  插件用的解析库 6.6.0 里根本没有这套东西，请求直接被抖音拦下  
  （服务器回的是「Blocked by ArgusSecurityPlugin Uifid Not Found」），  
  库再把它包成一句「抖音数据获取失败」—— 看起来就像 cookie 过期，怎么换都没用。
- **处理**：把解析库升到 7.x（目前是 7.0.0-beta.5；npm 上标着「最新」的 6.6.0 反而是坏的）。  
  升级后实测：作品详情、评论区、弹幕都正常。
- 更新完**重启一次机器人**即可；手动 `npm i` 更新插件时会自动装上对应版本的解析库。

### 日志更好排查

- 以后再遇到这类失败，日志里会直接写明「**多半是解析库版本过旧**」，  
  不用再照着「换 cookie、换网络」排查半天。

### 修复快手评论渲染

- 快手评论区接口以前未实现，现已实现

### 修复小红书评论渲染

- 小红书评论区接口变更导致失效，现已重新接好，评论能正常显示了

## 3.7.2

> 群里发的图片**统一改走 markdown** 了 —— 普通图片消息会被 QQ 压得发糊，markdown 图片不会；  
> 顺手把互动视频那张**剧情图的字放大**了。

### 图片不再被压糊

- 卡片、评论图、图集、推送里的图……以前都是当「普通图片」发出去的，QQ 会二次压缩，  
  卡片上的小字糊成一团。现在**图片一律按 markdown 图片发**：先传到机器人自己的图床，  
  再用带尺寸的图片写法发出去，字是清楚的。
- markdown 图片**必须写死尺寸**（`![#宽px #高px](地址)`）—— 不写尺寸的话手机端根本不显示这张图，  
  所以每一张都会先把真实的宽高读出来（JPEG / PNG / GIF / WebP 都认）。
- **平台不一样，处理不一样**（客户端能力决定的，不是选择）：
  - QQ 官方机器人：走 markdown 图片；
  - OneBot 系（NapCat、Lagrange、go-cqhttp、Chronocat 等）：客户端不认 markdown，  
    收到只会显示成一串网址、图片全丢，所以这条链路**照旧发普通图片**；
  - QQ 频道（qqguild）同理，也不改写。
- 一条消息里**同时有视频 / 语音 / 文件**时不改写：那种消息会按媒体发出去，markdown 内容会被丢掉。
- 转发里的图、合并转发收集中的图也不改写，保持原样。
- 传图床失败（或者宿主没装 assets 服务）时**照旧发普通图片**，不会因为改写不了就把图弄丢。
- 同一张图反复发（推送封面、面板卡片）不会再反复上传。

### 互动视频：剧情图的字大了

- 剧情图里每个选项 / 结局的**字号调大**了（大约 1/3），手机上看得清多了。
- 长文字不再按「14 个字」硬切，改成**按这一列还能放多少像素**来截断，  
  字大了也不会压到下一列的圆圈上；最后一列右边本来空着，会多显示几个字。
- 「已选」「图例」「提示」这些说明文字也跟着放大了一点。

## 3.7.1

> 修一个 3.7.0 改过头的地方：**视频直接发到群里的那种互动视频，照旧要在群里发带按钮的选择面板**；  
> 而且点完选项之后，**上一段视频会撤回**，群里只留当前这一段。

### 互动视频：两种玩法各归各位

- **选了在线播放**（或者视频太大、自动转成在线播放）：选项在网页播放器里贴出来，群里不再问一遍。
- **视频直接发到群里**（没有播放页）：照旧在群里发**带按钮的选择面板** ——  
  QQ 官方机器人是按钮，其它平台是一行一个选项的文字，点一下接着播下一段。
- **点完选项会撤回上一段视频**：不然玩几段之后，群里会躺着一串视频。  
  顺序是先发新的、再撤旧的，中间不会出现「一段视频都没有」的空档；  
  选择面板照旧是发新的时候撤掉旧的。
- 剧情图（勾了「流程图」时）照常：第一段出一张，走到结局再出一张。

## 3.7.0

> 互动视频这一版基本重做了：**选剧情搬到了网页播放器里**（选项就贴在画面上、点完能看到下载进度），  
> 群里不再发一串选择按钮；顺带修掉「改完配置机器人不理人」等几个老毛病。

### 互动视频：剧情在播放页上点

- 从群里拿到播放链接、打开网页，**这一段放完，题目和选项就会浮在画面下方**，点一条接着播下一段；  
  全屏时照样看得见、点得动。
- 不想等它自己弹？控制条上有&#x4E2A;**「选项」**&#x6309;钮，随时点出来；点卡片外面的画面就把它收起来。
- **点完有进度**：下一段要从 B 站现取（第一次要几秒），这段时间卡片会显示  
  「正在下载这一段 42%」这样的进度；失败会直接说明原因，还给一&#x4E2A;**「重试这一段」**&#x6309;钮，  
  不用刷新整页。
- **已经下过的段会留着**，再点回去是秒开。
- **弹幕跟着段走**：互动视频每一段都是单独的一段视频、弹幕也各是各的；  
  以前切段之后画面里飘的还是第一段那批，现在跟着你正在看的那段。

### 互动视频：不再被「体积上限」拦住

- 互动稿天然就是一段段很短的切片，以前拿整段视频的体积去预估、去拦，既不准又容易误伤。  
  现在互动视频**不预估体积、评论卡片上也不显示体积**，只在真正下好、合并完之后检查一次：  
  超过你设的「文件大小限制」时，开着「超限转在线播放」就给你播放链接，没开就明说一句  
  「这一段太大了，先不发到群里，剧情还能接着玩」。
- 画面和声音分开存（不再额外花时间合成一个文件），点完选项少等一步。

### 在线播放页

- **多了一行「原视频」**：以前页面上显示的是「本页链接」（你人就在这一页，等于废话），  
  现在显示 B 站 / 抖音上的**原视频地址**，点一下能在新窗口打开，也能一键复制。
- 修好一个老问题：把「播放器端口」设成 0（跟随机器人自己的端口）时，  
  页面上的「下载画面 / 下载声音 / 封面」点了会报错，现在正常。
- 页面补了小图标，浏览器不会再提示「找不到 favicon」。

### 彩色弹幕、顶部弹幕现在看得到了

- 有些视频弹幕特别密（几秒钟几百条）。以前轨道被白字弹幕占满之后，后面的**直接丢掉**，  
  于是少数派 —— 彩色弹幕、顶部「置顶」弹幕 —— 基本永远轮不到显示。  
  现在白字弹幕会按比例抽稀，**彩色和顶部 / 底部的照常显示**。

### 修掉「改完配置机器人就不理人」

- 在控制台改完配置、或者点一下重载插件之后，机器人有时会**整条指令都失效**：  
  群里发链接没有任何反应、控制台面板也打不开。现在重载不会再出这个错。

### 其他修正

- 播放页里的「这一段没准备好」换成了**具体原因**（以前不管是什么原因都显示  
  「链接已过期或视频已被清理」，很容易让人以为是链接过期了）。
- 机器人重启后，**已经发出去的播放链接仍然能选剧情**（以前重启一次，那些链接里的选项按钮就消失了）。  
  小提醒：如果你手里是**这次更新之前**拿到的链接，需要重新发一次链接让机器人解析。
- 另外补齐了几处内部自检（对使用者没有影响）。

## 3.6.0

> 下载更稳了：**大文件不会再下到一半就失败**，遇到卡住的下载源会自动换一个。

### 修「大文件永远下不完」

有用户反馈：解析一个 280 MB 的 B 站视频，进度一直卡在 0.0 MB/s，重试三次都是这样，  
最后报「连接被重置」。查下来是两个原因撞在一起：

- **B 站给的下载地址不一定是好的**：有些地址连得上、就是不传数据（实测一分钟只传了 100 多 KB）。  
  以前的程序只会一直用这一个地址，B 站同时给出的其它备用地址完全没用上。
- **下载有一个 60 秒的总时限**：从开始下载算起，超过 60 秒就掐断 ——  
  也就是说，凡是需要超过 60 秒的文件（按 1.5 MB/s 算大约 90 MB 以上）**永远下不完**。  
  更麻烦的是它掐断之后，报出来的错误看着像「服务器把连接重置了」，把人往「被风控了」的方向带。

现在的表现：

- **只要还在传数据就不算超时**：一直有数据就继续下，真的没数据了才算断。
- **下载源卡住就自动换**：有备用地址时，试一会儿（约 20 秒）还是慢得离谱就换下一个；  
  已经传了好几 MB 才断的，保留进度接着下。
- 报错说人话：自己掐断的，不再说成「连接被重置」，而是「下载超时（60 秒内没有收到新数据）」。
- 进度条的**速度显示**也修好了：以前会出现「0.0 MB/s 剩余 661 分钟」这种明显不对的数字。


## 3.5.0

> 这一版三件事：**B 站互动视频能玩了**（一路选剧情、还能出剧情图）、**合并转发里能单独控制流程图**，
> 另外把图片渲染统一交给浏览器 —— **删掉了老的内置渲染方案**（它在 Windows 上加载不了网络图片，
> 卡片里的封面、头像一直是空白框）。

### B 站互动视频：剧情能选着玩

群里发一条互动视频链接，机器人先把视频和卡片发出来，然后**一段一段问你怎么选**：

- QQ 官方机器人上是按钮（点一下就行，最后一个按钮固定是「渲染流程图」）；
  其它平台发纯文字，一行一个选项，回字母、数字或者选项原文都认。
- 只有第一组选项带标题和说明，之后只发选项本身，不会越聊越长；发新的时候会撤回上一条选项。
- 群里别人正常聊天、你自己随口说句话，机器人都不会插一句「没听懂」，就安静等你的选择；
  超过 180 秒没人回就收尾。
- 走到结局会撤回最后一条选项，说一句「互动视频走到结局了」，并把结局位置再画一张图。
- 剧情在后台跑，不影响视频发送速度。

**剧情图**：把整条剧情画成一张图 —— 有哪几条分支、哪里是结局，一张看完；
你走过的分支会加粗高亮，B 站的默认选项标「默认」；分支太多会注明「图上只画了前半部分」。

- 开关在 **通用 → 解析时发送的内容 → 流程图**（默认不勾）。不勾也能正常玩，只是不出图。
- 想随时补一张：QQ 官方是选项按钮里的「渲染流程图」，其它平台回复「渲染流程图」。
- 只有互动视频有这套玩法，普通视频完全不受影响。

> 说明：**3.7.0 起，选剧情搬到了网页播放器里**（选项贴在视频上、点完还能看进度），
> 群里不再发选择按钮；只有「流程图」那张图会照常发。

### 合并转发：流程图可以单独勾

- 「合并转发内容」里多了 **流程图** 这一项：勾了就进聊天记录，不勾就单独发出去 ——
  和文字、图片、视频是同一套规则，**不会丢内容**。
- 抖音 / 快手 / 小红书 没有这一项（它们没有剧情图，加了也是永远匹配不到的假选项）。
- 顺带堵了一个毛病：剧情图是后台画的，可能比解析结果晚 ——
  以前这种「晚到的东西」会被漏掉、再也没人发出去；现在解析一结束就收尾，晚到的一律直接发。

### 图片渲染：只用浏览器

- 以前可以在「内置渲染方案（默认）」和「浏览器」之间选。内置方案在 Windows 上**加载不了网络图片**
  —— 卡片里的封面、头像全是空白框，还会一直等到超时
  （实测页面里只要有一张连不上的图片，出图就从 1.5 秒变成 22 秒）。
- 3.5.0 起**只支持浏览器渲染**：装 koishi-plugin-puppeteer 或同类插件即可。
  面板里那个选项已经撤掉，老配置里的值会被忽略，不用手动改。
- 没装浏览器渲染服务时会直说「需要安装浏览器渲染服务才能渲染图片」，
  不再悄悄换方案，也不会给你一张缺图、裂图的卡片。

### 出错时的卡片更好用了

- **错误卡片终于发得出去**：以前一遇到大报错，卡片会长到 QQ 拒收（等于「报错本身也发不出去」）；
  现在只保留末尾 200 行、每行截断，尺寸稳定在能发出去的范围内。
- 卡片上会印上报编号、详情页地址和反馈群（以前那个加群链接点开是 404）。
- 新增「解析库错误诊断」：出错时给出平台、请求次数、耗时等线索，并告诉你这类错误重试有没有用。
- 卡片上的适配器一栏终于显示**真的适配器名字和版本**（以前一直是空的）。
- 「kkk版本」诊断卡片多了版本一致性提示和本版更新内容；这张图**不采集**你的账号、
  主机名、文件路径、网络地址、环境变量等隐私信息（因为它可能被发到群里）。
- 「kkk更新日志」出图失败时改发纯文字，不再只剩一张错误卡片。
---

## 3.4.2

### 出错上报的内容更全，也更好看懂

- 上报里的「来源信息」以前常常是一排「—」：定时推送没有群号这些东西。现在会补上机器人名、
  群名、用户名，还会标出问题卡在哪一步 —— 一眼就知道是谁在哪个群发的什么。
- **顺便把配置也带上**，方便复现问题：你改过的设置、画质、发送内容、推送列表都会带过去。
  两条硬规矩：**Cookie 一个都不传**，凡是名字像 token / secret / password 的字段一律显示成 ***。
- **日志只传本插件的部分**：以前会把整台机器所有插件的日志尾巴都传上去，现在只挑本插件相关的，
  看的人不用大海捞针。

### 机器人掉线时不再是满屏英文

- 机器人掉线后，推送常常炸出一句英文堆栈，你根本看不出发生了什么。现在会提前拦住并说清楚：
  「机器人 xxx 当前不在线，这条消息发不出去；等它重新上线后下次推送会正常发出」。
- 指定的机器人掉线时**不会偷偷换另一个机器人发**（那样会串号），只会如实报出来。

---

## 3.4.1

### 抖音解析失败时的提示看得懂了

- 抖音没返回数据时（常见原因：Cookie 过期、被风控，或者作品已经删了），以前会直接扔一句英文错误，
  你收到一张满屏英文的错误卡片。现在会明说是哪一类问题，并给出常见原因，不再让你猜。
- 日志里会留下接口的错误码和返回内容，一眼能看出是风控还是 Cookie 过期。

---

## 3.4.0

> 这一版修的都是「用起来别扭」的地方：图片不再重复发、面板不再和卡片挤在一起、
> 出错时发什么由你决定、控制台里的设置终于都能看懂了。

### 图片不会再发两张了

- 以前机器人发大图时，如果适配器 15 秒还没返回结果，它会以为「没发出去」，于是切成几片再发一遍 ——
  结果群里出现两张（第一张其实发出去了）。现在 15 秒只在日志里写一句「还在传」，
  120 秒才怀疑卡住，再宽限 30 秒；真的等不到也不会重试。

### 解析面板：卡片和选择表分开

- 信息卡片单独一条消息，选清晰度 / 选第几集的那张表单独一条。
- 你点完按钮之后，机器人**只撤回那张表**，卡片还留在群里；只有你下次再发链接（出新卡片）时，
  旧卡片才会被撤掉。
- 番剧翻页也一样：只换表格，不会因为翻几页就在群里堆一排卡片。

### 出错的时候：上报照旧，发什么你说了算

- 新增开关「**出错只发文字（不渲染错误卡片）**」（面板 → 通用 → 错误上报，默认关闭）。
  打开后出错只在群里发一行「错误信息已上传，ID：xxx」—— 上传的内容一点不少，
  只是省掉十几秒渲染和一张几 MB 的大图。想法来自 @Jingmozhiyu 的 PR #1。
- 错误提示里的加群链接以前点开是 404，现在换成真正的分享链接，能直接点进去。
- 以前遇到「一行日志里塞了几 MB 图片数据」这种报错，错误卡片要渲染十几分钟、最后还发不出去；
  现在这种超长内容会自动折起来，几秒钟出图。

### 控制台里的设置终于都能看懂了

- 控制台的插件配置页里，200 多项设置全部显示、全部展开，不用一个个点开；
- 所有说明都改成了给用户看的说法，去掉了 **加粗**、反引号这类符号
  （控制台是按纯文本显示的，写了只会看到一堆星号）；
- 面板里「合并转发（哔哩哔哩）」这种重复后缀也去掉了 —— 分类名本来就写着平台名。

### 不再因为「慢」就白丢内容

- 小红书拉评论、拉表情以前到点就放弃（评论区会变成「无法获取评论数据」）。现在 15 秒
  （表情 8 秒）只在日志里提示，60 秒（表情 30 秒）才怀疑挂住，再宽限一段时间等结果 ——
  接口只是慢的时候，评论照样能出来。

### 顺手修掉的几个老毛病

- 同一条卡片消息被 QQ 重复投递时只处理第一遍（以前会 OCR、搜索各跑两遍，
  看起来就是「解析完了又解析一遍」）。
- 快手、小红书一发链接就报错的问题。
- 「强制在线播放的适配器」等几个设置以前配了不生效，现在真的生效了。
- 不支持的适配器不再尝试合并转发（B 站私聊那种适配器没有聊天记录功能，以前会整条发不出去）。
- 播放链接显示「已过期」时，日志里会说清原因：多半是同机另一台机器人抢占了播放器端口，
  域名连到了那一台。

---

## 3.3.3

### 同一条卡片消息不再解析两遍

- **卡片消息被重复投递时只处理第一遍**：QQ 会把同一次发送投递多遍，实测同一条 B 站卡片会在几秒内
  进来两次 —— 于是识别文字、搜索各跑两遍，看起来就是「解析完了又解析一遍」。
  现在在识别文字**之前**就去重，而且会先把图片链接里会变的签名部分去掉再比，
  同一条卡片重投不会被当成两条。
- 顺带加了排查用的调试日志：收到卡片时会打一行「收到卡片消息（消息 ID / 平台）」，
  一眼能看出是平台重复投递，还是别的插件又发了一遍。

## 3.3.2

> 修 3.3.1 的一个**致命笔误**：插件里写错了一处引用路径，导致**整个插件加载不起来**。
> 当时打包流程只搬代码、不检查路径，没能拦住 —— 现在补了一条自检，
> 保证每个编译出来的文件都能正常加载。

## 3.3.1

> 3.3.0-beta.1 ~ beta.3 是给先行测试的人用的预览版，内容全部并进这一版；从 3.2.2 直接升上来就行。

### 修了两个「设置根本不生效」的问题

- **「强制在线播放的适配器」这类设置以前配了没用**：程序内部有一份手写的「认识哪些设置」清单，
  新加的开关（强制在线播放、面板「在线看」列、按需切片、解析去重…）忘了往清单里补一行，
  运行时读到的就是「没有这个设置」—— 表现就是 B 站私聊明明配了强制在线播放，**还是发视频文件**。
  现在改成以设置表为准，以后再加开关不会漏。
- **不支持的适配器不再硬去合并转发**：以前判断「这个适配器支不支持聊天记录」用的是一份黑名单，
  于是任何自定义适配器都被当成支持 —— B 站私聊适配器也在里面，整条转发发出去「没有拿到消息 ID」，
  退回来的逐条发送也失败，用户什么都没收到。现在改成白名单，并在日志里写明
  「适配器 xxx 不支持合并转发，本次逐条发送」。

### 播放链接显示「已过期」的原因说清楚了

- **端口被别的机器人占了，链接就会指向「另一台机器人」**：同机跑两台机器人（正式 + 测试）时，
  只有一台能占用播放器端口；占不到的那台会退回机器人自己的端口，而域名指向的是独立端口 ——
  你点开链接，访问到的其实是**抢到端口的那台**，它不认识这条链接，页面就显示「链接已过期」。
  现在遇到这种情况会打一条明确的警告，生成链接时也会提醒一次。

### 控制台里的设置全部隐藏，面板补上「Koishi 设置」

- **控制台里的设置项全部隐藏了**：只剩一段说明「所有设置都在面板（/kkk）里改」。
  原因是同一份配置在两个界面各改一半时，谁后保存谁覆盖对方（「面板里关了、控制台一保存又回来了」）。
  隐藏**不等于删除**，所以在控制台点保存不会把面板里的设置弄丢。
- **面板多了「Koishi 设置」一组**：数据目录、调试日志、自动解析、面板是否要求先登录控制台 ——
  以前这几项只能在控制台改，现在统一挪到面板里。**主人账号不在里面**：它属于机器人权限体系，
  面板是免登录页面，不给自己开这个口子（仍然在配置文件里改）。

### 顺手修掉的几个问题

- **预览版不会再被提示「有新版本」了**：更新检测以前一律拿网上的正式版比较，
  本地跑预览版时会说「有新版本」—— 那其实是**降级**。现在预览版看预览通道，而且只在真有更新时才提示。
- **修了快手 / 小红书一解析就报错的问题**（这两个平台调用了一个没引入的功能）。
  另外加了自检，把这类「用了却没引入」的问题挡在发布前。
- **错误提示的分段加了空行**：以前两段会被拼成一整行，字号被撑得很难看。
- **卡片解析不再去搜抖音**：抖音没有「卡片消息」这种东西，以前那条「没有抖音搜索能力，跳过」
  的日志就是多搜了一个平台留下的 —— 现在只搜 B 站，少一次风控风险、也少几秒等待。

## 3.2.2

### 卡片解析：按 UP 主模糊匹配，候选也发得出来了

- **认错 UP 主的问题修了**：B 站卡片的文字里，「UP主」上面一行**不一定是昵称** ——
  你那张卡的上一行是封面上的「半身像」，真名在**第一行**。以前只认「UP主前一行」，
  于是拿「半身像」去搜、标题又对不上，六个候选一个都不敢选。现在首行、UP主前后行都当候选，
  任意一个对上就算命中，命中的那个会写进日志和提示语。
- **候选列表在个人号上发不出去的问题修了**：候选以前是一张表格，只有 QQ 官方机器人能显示，
  个人号（NapCat 等）发过去整条消息都出不去 —— 你只看到「正在提取卡片信息…」然后就没下文。
  现在按平台分开发：官方 QQ 还是表格 + 按钮（点一下直接解析）；个人号改成纯文本，
  一条条列「标题 —— UP主」和完整链接，点链接或复制发回来就能解析。

实测（用你那条识别结果）：首选候选「雾小霜暗区突围」，拿它去 B 站搜索**自动定位成功**。

## 3.2.1

### 出错时自动上报，进群报个编号就行

- **新增错误上报（默认开启）**：插件出错时，自动把**错误信息、错误详情、运行环境、最近的日志**
  上传到收集站，站长在网页上就能看到全部细节 —— 不用再让你截图、也不用让你翻日志文件。
  上传地址在面板「通用 → 错误上报」里能改，也能一键关掉；上传失败不影响报错本身，错误卡片照常发。
- **错误消息里带上编号和群**：卡片下面会跟一条「错误信息已上传，ID：xxxxxxxx」，
  并提示可以带着这个编号进群求助。QQ 官方机器人那边是可以点的加群链接，个人号给纯文本链接。
- 面板「通用」多了「错误上报」一栏，里面**只有一个开关**（默认开），地址、令牌这些全部写死，
  没有可以填错的地方 —— 关掉开关就完全不上传。

### 错误卡片不再卡十几分钟

- **它以前会被一行日志撑爆**：某类发送失败会把**整个请求参数**（含一张 4.6 MB 的图片数据）
  拼进报错信息里，于是卡片长度暴涨、渲染十几分钟都出不来（报错本身也就发不出去了）。
  现在超长内容会自动折叠、截断，日志行数也封顶，同一张卡片从「十几分钟」降到 **5 秒内**。
- 折叠对上报同样生效：那行 4.6 MB 的日志折完只剩一百多字符。

## 3.1.0

### 卡片渲染：先量再定倍率，快的那个留下

拿各个平台的真实卡片在同一台机器上测过（同一份内容，各测两遍取平均）：

| 卡片 | 1 倍分辨率 | 2 倍分辨率 | 现在固定用 |
| --- | --- | --- | --- |
| 抖音评论区 | **1.5 秒** | 4.2 秒 | 1 倍 |
| B 站评论区 | **2.2 秒** | 6.8 秒 | 1 倍 |
| 快手评论区 | **0.4 秒** | 1.0 秒 | 1 倍 |
| 抖音作品卡 | **1.7 秒** | 2.8 秒 | 1 倍 |
| B 站视频卡 | **1.5 秒** | 2.5 秒 | 1 倍 |
| 小红书笔记卡 | 15.5 秒 | **5.2 秒** | 2 倍 |
| 抖音图集卡 | 8.0 秒 | **3.3 秒** | 2 倍 |

两处原因，都修了：

- **有些卡片一直在用两倍分辨率渲染，然后被扔掉一半**：卡片按 1440 宽排版，长图切片时又会压回 1440 宽
  —— 两倍渲染出来的像素一个都用不上。但不能一刀切：不同卡片表现不一样，评论卡 1 倍快得多，
  小红书笔记卡反而 2 倍快。所以现在每条链路**各测一次**：第一次用你设的倍率，第二次换另一档，
  之后固定用快的那档。你把「渲染精度」设成 50（就要 1 倍）时不测，直接听你的。
- **渲染器在等它根本加载不了的东西**：老的内置渲染方案在 Windows 上拉不到网络图片
  （卡片里的远程头像、封面本来就是空白框），但它照样去请求、还等到超时 ——
  实测页面里只要有一张连不上的图片，出图就从 1.5 秒变成 **22 秒**。
- 顺带：渲染日志现在会写清**每张卡片花了多久**（排版多少毫秒 / 截图多少毫秒），慢的时候一眼看出慢在哪。

### 在线播放：声音不再等服务器

- **默认不在服务器上把画面和声音合成一个文件了**：播放页会同时放画面和声音，由浏览器自己对好
  （原来要等服务器合完才能开始放，等得久）。
- **下载按钮分成三个**：「下载画面」「下载声音」「合成后下载」（点下去服务器才去合并，
  合过一次会记住，再点马上就好）。
- 页面上的静音按钮现在同时管画面和声音；拖动进度条时声音也会跟着对齐。

## 3.0.0

> 这一版主要两件事：**让它快**、**该发出去的东西真的发出去**。
> 另外按你的实际用法，把「合并转发」和「在线播放」重做了一遍。

### 快了这么多

- **卡片渲染从 31 秒降到 3 秒**。每张卡片上都铺了一层噪点，那层要一个像素一个像素地算，
  占掉九成时间；现在默认去掉，画面上几乎看不出区别。想保留颗粒感也可以在配置里换成「小图案平铺」，
  仍然比原来快 9 倍。
- **不再互相等**：信息卡、评论区、图集、视频各走各的，谁先好了谁先发。
  以前视频都下载完了，还要等卡片渲染完才肯发出去。
- 顺手剔掉了 384 条「指向不存在的字体文件」的声明，渲染又快了一点。

### 发不出去 / 重复发的问题

- **失败现在按错误码判断**：以前只看「有没有拿到消息 ID」，会把「上传文件太大」误判成「回复超频」，
  于是同一张图被传两遍。现在看到「上传文件太大」就直接切成多张，不白等。
- **没拿到消息 ID 就是没发出去**，不再当成成功悄悄丢掉；日志里会写清是哪个错误码。
- **个人号（NapCat 这类）上的图片改发普通图片**：那种带 `![#1440px #2000px](链接)` 的写法
  只有 QQ 官方机器人认，个人号显示不出来。现在切片、图集、评论图片都会自动改成普通图片。
- **错误卡片不再变成 10 MB 的大图**：以前报错信息里几 MB 的图片数据会被原样画进卡片
  （渲染 28 秒、而且这么大还是会被拒收）；现在会折叠掉，只留有用的部分。

### 合并转发

- **两级开关，默认全关**：通用里打开 = 所有平台都合并；全局关着时，可以在
  抖音 / 哔哩哔哩 / 快手 / 小红书 里**单独打开**。
- **可以选合并哪些内容**：文字 / 图片 / 视频 / 文件。**语音和 markdown 去掉了** ——
  QQ 的聊天记录不支持语音气泡，而 markdown 只有官方机器人认、官方机器人偏偏又不能合并转发，
  这两个选项本来就是死的。
- **每条内容一个条目**：信息卡、评论区、视频各占一条「聊天记录」，长图切片仍留在同一条里
  （以前全挤在一条里，结果只有视频能加载、图片全不显示）。
- 开着合并转发时**不会再跳过切片**，**转发失败也不会丢内容**（会自动退回逐条发）。
- 面板里就能改：通用页多了「合并转发内容（全局）」，四个平台页各多了一栏「合并转发」。
- 顺手：解析提示（「检测到链接，开始解析」）不会再混进转发里。

## 2.1.0

> 这一版把之前两个预览版（内容已一并收进来）和一次新联动一起发了：
> **卡片出图接上了新的高速服务 kkkshot**，另外修掉几个实测反馈的问题。
>
> 升级不需要改配置：所有新开关都有默认值；老配置缺这些键时，行为与以前一致。

### 本版重点

- **卡片出图快一倍以上**：新增可选插件 **koishi-plugin-kkkshot**。装上它，kkk 会**默认优先用它出图**；
  没装（或者它出图失败）就自动退回 koishi-plugin-puppeteer，行为和以前完全一样。
  本机实测同一张卡片：**1.54 秒 → 0.60 秒**（细节见下面「配套插件」）。
- **「短时间不重复解析」变成可配置**：通用里新增这个开关和「重复解析间隔（分钟）」，
  去重范围也从「抖音 / B 站」扩到**快手 / 小红书**。
- **合并转发开关的说明修正**：打开才合并（用触发者的身份展示），**关掉就不合并**、内容逐条发；
  另外修好了「在面板里打开它却不生效」。
- **权限字段终于能填用户 ID 了**：以前选「指定账号」再填 ID，一保存就报一句看不懂的英文错，现在正常。

### 新增

- **配套插件 koishi-plugin-kkkshot（可选）**：给 kkk 用的高速出图服务。它和常规出图方式的区别：
  常驻几个页面反复用（不是每次新建）、只等字体和图片加载好（不白等一段固定的静默期）、
  按卡片本身的边界截图（贴合卡片、不带白边）、优先复用已有的浏览器（省内存）、
  长时间运行也不会越占越多内存。装了就用，没装就退回原来的方式，不会因为少装它报错。
- **通用 →「短时间不重复解析」**（默认开启）：同一条链接在一段时间内只解析一次。
  QQ 的按钮是「发一条消息 + 再发一个交互事件」，用户连点、客户端重发也会把同一条链接投递两遍，
  跑两遍就是两次「开始解析」、两次下载、两次发送（第二次还常因为缓存已被清理而失败）。
  去重会区分会话、作品、画质和弹幕开关 —— 换画质、换作品、换群都不会被误伤；关掉后每条消息都会解析。
- **通用 →「重复解析间隔（分钟）」**（默认 1，可填 1 ~ 60）：上面那个开关打开时才生效，
  开关关掉时这一项在面板里会变灰不可改。填超出范围的数字会自动夹到最近的边界，填错按默认 1 分钟。
- 去重范围扩到 **快手 / 小红书**（这两条链路以前完全没有去重）。

### 修复

- **「合并转发打开了没用」**：面板里打开、保存也提示「已保存」，日志却还是按逐条发送处理。
  现在已经修好：面板保存会真正写进配置，保存后日志里还会打一行确认。
- **「关闭合并转发，结果还是合并的」**：那个开关以前只管「转发用谁的身份展示」，
  关掉之后照样合并成一条。现在它的意思就是**要不要合并**：打开 → 一次解析的内容合并成一条转发
  （用触发者身份展示）；关掉 → 不合并，内容一条一条发。面板里的名字也从「伪造合并转发消息」
  改成了「**解析结果合并转发**」，说明写清了这两句。
- **「指定账号」填上 ID 一保存就报一句看不懂的英文错**：现在这几个「允许手填」的字段改成了普通输入框，
  用户 ID、关键字、多个用逗号分隔都能保存；填错类型仍然会被拦下，提示也换成了能照做的说法。
- **文案说错了**：以前写「填 QQ 号」，其实这里要的是**用户 ID**（不是 QQ 号）；
  面板、控制台和说明文字都改过来了。

### 变更

- 面板标签：「伪造合并转发消息」→「**解析结果合并转发**」（名字要能看出「关掉就逐条发」）。
- 合并转发开关的含义：从「只决定展示身份」变成「决定要不要合并」（身份固定为触发者）。
- 「谁可以触发扫码登录」和「错误日志接收人」的说明统一成「填用户 ID」。

## 2.0.0

> 这是移植版从 1.0.0 到 2.0.0 的一次总更新（把此前的预览版内容也并了进来）。
> 一句话：**配置面板、QQ 面板、解析链路、弹幕、在线播放器、合并转发、进度与错误处理**，
> 这一路上的改动都在这一版里。升级一般不用改配置：新开关都有默认值，老配置缺这些键时行为和以前一致。

### 本版重点

- **在线看（弹幕在线播放）**：选「弹幕」不再把弹幕烧进视频，而是给你一条网页链接 ——
  点开就是带弹幕的播放页（照着 B 站播放页做：深色界面、标题 / UP主 / 统计、
  弹幕开关 / 字号 / 透明度 / 彩色弹幕）。链接到期自动删文件。
- **解析结果合并转发**：一次解析的内容合并成**一条转发**（过程提示不进转发）。
- **关掉某个平台的解析，那个平台就彻底不处理**（不回复、不提示缺 Cookie、不记统计）。
- **面板「在线播放器设置」**：样式和其它分组一致，并且有**这一组自己的总开关**
  （关掉时组内其它设置变灰不可改）。
- **ffmpeg 找不到 / 没权限的问题修了**：按顺序逐个候选校验，起不来就自动换下一个。
- **修 WebUI「推送列表里填频道 ID，点完成后整个面板黑屏」**。


### 新增

**在线看**（通用 → 在线播放器设置）

- 解析面板里那一列按钮写「弹幕」，点它不再烧录，而是把视频下下来放进播放器目录、回一条链接；
  点开就是播放页（手机也能看；弹幕开关 / 字号 / 透明度 / 显示区域 / 滚动·顶部·底部三类开关 / 彩色弹幕都有），
  页面不依赖任何外部网站，进度条可以拖。
- 配置项（括号里是默认值）：**在线播放器总开关**（开）、**面板显示「在线看」按钮**（开）、
  **播放器公网地址**（空）、**播放器端口**（0 = 用机器人自己的端口）、
  **链接有效期（分钟）**（60）、**在线播放最大文件（MB）**（0 = 跟随全局「文件大小限制」）、
  **超限转在线播放**（关）。
- 「在线看」按钮：点它直接在线播放（带弹幕、视频不发群），即使弹幕相关的开关关着也照样带弹幕。
- **超过 QQ 上限的画质档也会列出来**（在线播放的视频根本不发到 QQ），超限那档标「超上限」。
- **超限转在线播放**打开后：视频太大不再回「还是去 B 站看吧」，而是照常下载并改成在线播放。
- **播放器公网地址留空**时：链接只能本机 / 内网打开，日志会警告一次，给用户的回复里也会写明。
- 播放页有下载按钮、作品信息（**只用真实数据，没有就不显示**）、封面走同源地址（断网不裂图）。

**解析结果合并转发**（通用 → 交互设置，默认开）

- 一次解析的内容（卡片 / 图片 / 视频 / 评论…）合并成一条转发，过程提示不进转发。
- 身份：开着 = 用触发者身份展示，关着 = 用机器人身份展示。
- 只有在支持的适配器上有效果；QQ 官方机器人没有这个能力，会自动退化成逐条发送。
- 发给别人（比如把错误日志发给主人）的消息不会被吞进这条转发。

**其它新增**

- **通用 → 强制不烧录弹幕**（默认开）：弹幕烧录的总开关，优先级最高。
- **平台解析开关**（抖音 / B 站 / 快手 / 小红书）：关掉某个平台后，那个平台彻底不处理。
- **QQ 适配器**新增一批开关：链接解析面板、自动撤回面板、画质档体积上限、番剧选集面板行列数、
  超大图片自动切片与切片高度、卡片文字识别密钥、面板是否显示「烧录弹幕」列、
  面板是否带「打开原站」链接、群文件发送阈值等。
- 面板与播放页的按钮一律用图标，不用 emoji。
- 文档（README / 帮助指令 / 更新日志）改成用户视角。

### 修复

- **WebUI 填完频道 ID 点完成，整个面板黑屏**（线上事故）：现在接口永远返回列表，
  面板也加了兜底 —— 万一有异常，会显示一张能看懂的中文报错卡片，不再是黑屏。
- **ffmpeg 报「找不到 / 没有权限」导致解析失败**：现在按
  「机器人自带的 ffmpeg 服务 → 配置里填的路径 → 环境变量 → 系统 PATH」逐个试，
  相对路径会先转成绝对路径，Linux/macOS 还会检查执行权限；
  都不行时日志里会列出试过哪些，并给出能照做的解决办法。
- **关掉小红书的解析，还是提示没有 Cookie**：现在四个平台都会先看自己的开关，关掉就直接不处理。
- **合并转发没生效**：修好了，现在真的会走适配器的合并转发。
- **「打开原站」链接把整条面板拖挂**：那种链接 QQ 官方接口直接拒收，导致整条面板都发不出去；
  现在换成普通链接，并在发送失败时自动去掉链接那一行重发一次。
- **在线播放器设置整组被锁住 / 判断写反**：现在只有总开关跟「强制不烧录弹幕」联动，
  其余字段随时可改；总开关关掉时组内其它设置变灰。
- **开了在线播放器，面板里却没有「弹幕」按钮**：这一列现在只跟播放器总开关走，不用同时开两个开关。
- **播放器链接点开报「不安全端口」**：如果「播放器端口」填成了浏览器禁止的端口
  （例如 6665-6669 这类），现在启动和生成链接时都会明确警告，
  没配公网地址时还会自动退回机器人自己的端口。
- 另外修了一批具体问题：av 号链接解析失败、超长错误卡片切不了片、弹幕烧录一直不生效、
  「下载进度详情」看不到解析阶段、快手 / 小红书解析崩溃、图集 / 评论图片 / 实况图发不出来、
  卡片消息解析、群文件阈值不生效、发送失败重试、控制台侧边栏入口消失、
  面板提示「鉴权失败」等。

### 变更

- **解析流程统一成「先下载视频 → 再渲染卡片 / 评论区 → 最后发送」，并且单步失败不再中断**：
  中间任何一步失败只跳过那一步，能发的照发；全部跑完后如果确实有失败，
  才发**一张**错误卡片说明是哪几步失败了。
- **合并转发的含义**：从「只影响转发显示成谁发的」变成「把一次解析的内容合并成一条转发」。
- **在线播放不受 QQ 的「文件大小限制」约束**，改由「在线播放最大文件」约束。
- **配置入口统一**：所有设置都在面板（/kkk）里改；扫码登录权限与错误日志接收人改成手填
  （支持多个，用逗号分隔）。
- 评论区图片不再单独发一遍（评论卡片里已经有了），少刷屏。

### 兼容与升级说明

- 老配置缺新键时的行为：在线播放器与「在线看」按钮默认可用 / 显示；
  「超限转在线播放」默认关（维持「太大了就拒绝」的老行为）；「强制不烧录弹幕」默认开。
- **合并转发**需要适配器支持：OneBot 系（NapCat / Lagrange 等）走适配器的合并转发接口；
  QQ 官方机器人没有这个能力，会自动退化成逐条发送（不报错，只是不合并）。
- 需要 ffmpeg 的功能（弹幕烧录、音视频合成、格式修复、图片裁剪）：请自己装一份系统 ffmpeg
  （或在配置 / 环境变量里指定路径）；本插件**不会**再自动下载 ffmpeg。

## 1.1.0

### 变更

- **插件设置只在面板里改**：控制台插件配置页里的设置项全部隐藏，新加的字段也会自动出现在面板对应分类里，
  不会再出现「控制台改了一半、面板改了另一半」。
- **扫码登录权限 / 错误日志接收人支持手填**：可以直接写 \*（所有人）或账号（多个用逗号分隔），
  错误日志也能私聊发给指定账号。界面上是先选模式，选「指定账号」时才出现输入框。
- 权限说法统一：all / admin（权限等级 4 及以上）/ 指定账号。
- 「自动撤回面板」开关挪到面板的「通用」分类（原来藏在 QQ 适配器里，不好找）。
- 插件说明重写为面向使用者的说法：去哪儿配置、有哪些指令、QQ 上怎么用。
- **API 服务默认关闭**：不需要的人不用被迫多开一个端口。

### 修复

- **QQ 群文件阈值在面板里改了不生效**：现在会正确读取，超阈值的视频会走群文件发送。
- QQ 平台识别取不到平台名，导致「群文件发送」这条路走不到。
- 面板里的下拉框改用面板自带的样式（以前是浏览器默认样式，和面板不搭）。

## 1.0.9

### 变更

- **面板不再从独立网址进**：直接访问相关地址会返回「找不到」（以前是一个「需要先登录」的提示页）。
  面板只从控制台侧边栏的「kkk 配置」进，凭据由控制台登录态换取。
- **QQ 单独的视频体积阈值**：新增设置项（QQ 适配器分组，默认 30MB）——
  视频超过这个体积就改用「群文件」发送；其它平台仍按原来的「群文件上传 + 阈值」判断。

### 修复

- 以前 30MB~100MB 的视频没有按群文件发送，会走视频通道被 QQ 压缩、改名；现在按上面的独立阈值判断。

## 1.0.8

### 修复

- 控制台侧边栏「kkk 配置」整个消失的问题（上一版改日志时把一段代码写到了错误的位置）。
- 面板前端加了「不使用缓存」：以前浏览器会一直用旧版本，出现「代码改了但界面没变」。

### 变更

- 取登录凭据改成两条路依次尝试，都不行时**把失败原因直接显示在页面上**，
  一眼能看出是没登录还是别的问题。

## 1.0.7

### 修复

- **面板提示「加载配置失败 / 鉴权失败」**：面板的登录凭据存在服务端内存里，机器人一重启就失效，
  而页面以为本地还留着有效凭据、就跳过了登录，于是一直拿着过期的凭据请求、所有接口都失败。现在：
  每次打开面板都会重新换一份新凭据；接口鉴权也同时接受控制台带来的登录状态，凭据过期也能正常读写配置。

## 1.0.6

### 变更

- **配置面板默认要求登录**：装了登录插件的部署，未登录时打开面板会看到「需要先登录控制台」。
  没装登录插件的部署不受影响（本来也没有登录这回事）。
- 面板页面不再需要手动填「鉴权密钥」：能进来就说明已经授权，登录状态由服务端自动补齐。

## 1.0.5

### 修复

- 「关于插件」页的大标题还写着旧名字，现在改成正确的插件名。

## 1.0.4

### 修复

- 上一版注入版本号的写法有误，导致面板的几个样式脚本报错、面板打不开；现在已恢复正常。

## 1.0.3

### 变更

- **「添加推送目标」里的推送群改为手填群号**：以前是从下拉框里选，拿不到群列表时就完全没法选
  （只显示「请先选择机器人账号」）。现在直接输入群号即可，需要指定平台时写「平台:群号」。
- 「关于插件」页更新：标题、版本号、仓库 / 反馈 / 头像链接都指向本项目的正式地址，
  并标明这是 Koishi 移植版。

## 1.0.2

### 变更

- 配置面板去掉了写死的用户信息块（以前侧栏一直显示别人的名字和身份）。
- 面板里残留的旧项目名全部改成 Koishi，「帮助文档」按钮改为指向本项目文档站。
- 配置文件里字段说明的旧项目名同步改掉。

### 新增

- 打开「面板要求登录」后，面板页面和它的静态资源同样要求登录控制台；默认关闭（免登录，
  行为和以前一致）。

## 1.0.1

### 修复

- 生产环境下配置面板报「页面文件缺失」：现在会自动向上查找面板文件所在的目录，
  启动日志里会打印查找结果，找不到时给出警告。
- 配置面板不再强制登录：装了登录插件的部署，以前要求先登录控制台才能打开面板，现在默认免登录；
  想恢复登录校验，把设置项「面板要求登录」打开即可。

## 1.0.0

首个公开版本：**karin-plugin-kkk 的 Koishi 移植版**，把上游的解析 / 推送 / 面板能力完整搬到了 Koishi。

### 链接解析与推送

- **B 站**：视频、番剧（先选分集 → 再选画质）、动态、直播、专栏、评论
- **抖音**：作品、图集、直播、评论区
- **快手 / 小红书**：作品解析
- 解析内容（信息卡片 / 视频 / 评论）、画质、体积上限、是否带弹幕都能配置，QQ 面板上还能临时选
- 动态推送：B 站 / 抖音关注列表更新推送，推送目标、过滤规则、强制推送都能配置
- 卡片解析：群里转发的分享卡片没有链接时，识别封面文字再搜索定位作品

### QQ 官方机器人交互面板

- 普通视频：先发一张**解析结果同款卡片图**（带热门弹幕），下面是「清晰度 / 视频 / 弹幕 / 大小」四列表格
- 番剧：卡片图 + 集数表格（默认 5×4、倒序），表格下方是「上一页 / 第 x/y 页 / 下一页」
- 图片按 QQ 要求的写法上传成链接
- 超过体积上限（默认 200MB）的画质自动隐藏 —— 点了也发不出去
- 面板按钮**没有状态**：机器人重启后旧面板依然能用
- **下载进度反馈**：「开始下载」那条消息带一个「查询下载进度」按钮，只看本次任务；
  发送前会提示「发送中…」（走群文件时会提前说明）
- **自动撤回**：解析过程中每发一条新消息就撤回上一条，群里只留最新状态

### 图片发送（QQ）

- 评论区那种超长图默认按普通图片发；只有**超过 20MB** 或**发送失败**时才自动切片
- 切片前缩到 1440 宽、按高度等分，最后用一条消息把切片拼回一整张，视觉上仍是一张图
- 切片与合并只对 QQ 生效，其它平台按普通图片发

### 弹幕烧录

- B 站弹幕烧进视频（「弹幕解析」指令，或面板上点「弹幕」那一列）
- 编码器自动探测与回退（优先硬件加速，不行就换软件编码）
- 低码率视频用更清晰的方式编码，保证弹幕文字看得清；能识别横竖屏与旋转信息

### 配置管理

- **面板（/kkk）**：插件自带的一体化配置页，免登录，保存即写回配置文件并热重载；
  分类沿用上游：接口库 / 通用 / 抖音 / 哔哩哔哩 / 快手 / 小红书 / 推送列表，另有「QQ 适配器」一组
- **轻量配置页（/kkk/edit）**：适合直接改 JSON
- **控制台入口**：侧边栏「kkk 配置」打开的就是面板；控制台里的表单与面板共用同一份字段定义
- 面板自动登录：打开即用，不用手点登录框

### 错误诊断

- 错误诊断卡片：框架版本 / 插件版本 / 适配器、错误详情与运行环境，方便直接贴群里问
- 错误通知接收人可配：触发者 / 管理员
- 「kkk版本」指令输出一张运行环境卡片

### 卡片与模板

- 卡片上显示的是 Koishi 版本，页脚换成 Koishi 的标识，支持作者署名
- 与 Koishi 的浏览器渲染插件配合：大卡片不再因为一次渲染吃掉几 GB 内存而崩溃；
  卡片四角和底部不再有空白
- 评论区默认开启解析，评论图片合并进评论卡片（不再单独发一遍）
---

## 移植说明

上游 [karin-plugin-kkk](https://github.com/ikenxuan/karin-plugin-kkk) 的完整功能清单请看它自己的仓库。
本仓库保留其业务逻辑，由兼容层提供框架等价的实现；配置以 `koishi.yml` 为准，启动时同步给插件使用。