koishi-plugin-kkk 3.8.0 → 3.9.1
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 +50 -0
- package/lib/build-metadata.json +5 -5
- package/lib/index.js +8 -3
- package/lib/karin/module/db/bilibili.js +185 -393
- package/lib/karin/module/db/douyin.js +219 -500
- package/lib/karin/module/db/index.js +30 -5
- package/lib/karin/module/db/model.js +208 -0
- package/lib/karin/module/db/statistics.js +197 -242
- package/lib/karin/setup.js +2 -4
- package/package.json +2 -1
- package/scripts/build.mjs +38 -5
- package/scripts/deploy.mjs +76 -27
- package/scripts/smoke-db-koishi.cjs +213 -0
- package/src/index.ts +8 -3
- package/src/karin/module/db/bilibili.ts +189 -448
- package/src/karin/module/db/douyin.ts +219 -587
- package/src/karin/module/db/index.ts +30 -4
- package/src/karin/module/db/model.ts +457 -0
- package/src/karin/module/db/statistics.ts +213 -380
- package/src/karin/setup.ts +2 -4
- package/lib/compat/sqlite3.js +0 -117
- package/lib/karin/module/db/migration.js +0 -199
- package/src/compat/sqlite3.ts +0 -123
- package/src/karin/module/db/migration.ts +0 -249
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## 3.9.1
|
|
4
|
+
|
|
5
|
+
> 修 MySQL 上启动直接报 `ER_TOO_LONG_KEY`、插件起不来的问题。
|
|
6
|
+
> 3.9.0 建的索引太宽了:索引字段现在按实际数据长度定长,最宽的索引从 4080 字节降到 1152 字节。
|
|
7
|
+
|
|
8
|
+
### 修复 MySQL 索引过长(ER_TOO_LONG_KEY)
|
|
9
|
+
|
|
10
|
+
- **现象**:MySQL 环境启动就报 `ER_TOO_LONG_KEY`(Specified key was too long),索引超过 3072 字节,表建不出来。
|
|
11
|
+
- **原因**:字符串字段没给长度,MySQL 按 `VARCHAR(255)` 建,`utf8mb4` 下每字符 4 字节,
|
|
12
|
+
单个字段就是 1020 字节。抖音作品缓存表那个由 **四个** 字段组成的唯一键
|
|
13
|
+
(作品 id + sec_uid + 群号 + 推送类型)算下来 4080 字节,直接超了上限。
|
|
14
|
+
另有几张统计表卡在 3060 字节 —— 离上限只差 12 字节,随时会爆。
|
|
15
|
+
- **处理**:凡是进索引(主键 / 唯一键)的字段,都按实际数据长度定长:
|
|
16
|
+
|
|
17
|
+
| 字段 | 长度 | 说明 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| 群号 / QQ 号 / botId / 作品 id / 动态 id | 64 | 最多几十个字符 |
|
|
20
|
+
| 抖音 `sec_uid` | 128 | 实际最长见过 76 |
|
|
21
|
+
| 平台 / 内容形态 / 日期 / 指标名 | 16–32 | 固定枚举、`YYYY-MM-DD` |
|
|
22
|
+
| 过滤词 / 过滤标签 | 128 | 自定义文本 |
|
|
23
|
+
| 备注、昵称等 | 不限制 | 不进索引,不影响 |
|
|
24
|
+
|
|
25
|
+
现在最宽的索引是 1152 字节(原来是 4080),其它都在 1024 以内。
|
|
26
|
+
- **在 MySQL 上已经建出过半截 `kkk` 表的**,需要先删掉再启动 —— 已有索引不一定能被自动改过来:
|
|
27
|
+
|
|
28
|
+
```sql
|
|
29
|
+
SELECT TABLE_NAME FROM information_schema.TABLES
|
|
30
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME LIKE 'kkk%';
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
确认是插件的表之后 `DROP` 掉,重启 Koishi 会按新定义重建。
|
|
34
|
+
- sqlite / postgres 不受影响,也不用做上面这一步(字段长度本来就够)。
|
|
35
|
+
|
|
36
|
+
## 3.9.0
|
|
37
|
+
|
|
38
|
+
> 插件不再自己建数据库了,全部改用 Koishi 自带的数据库服务。
|
|
39
|
+
> 数据统一落在宿主配置的那个库里(sqlite / mysql / postgres 都行),备份和迁移跟着宿主走,
|
|
40
|
+
> 不用再单独惦记插件数据目录里那几个 `.db` 文件。
|
|
41
|
+
> **代价:过滤词 / 过滤标签和解析统计历史会从零开始**(订阅关系不受影响,每次启动自动从推送列表重建)。
|
|
42
|
+
|
|
43
|
+
### 数据库改用 Koishi 原生数据库服务
|
|
44
|
+
|
|
45
|
+
- 以前插件自己在数据目录里开三个 sqlite 文件(`douyin.db` / `bilibili.db` / `statistics.db`);
|
|
46
|
+
现在所有数据都走 Koishi 的 `ctx.database`,表由插件注册(`kkk.douyin.*` / `kkk.bilibili.*` / `kkk.statistics.*`),
|
|
47
|
+
落在宿主配置的那一个库里(sqlite / mysql / postgres 都行),插件不再创建任何 sqlite 文件。
|
|
48
|
+
- **`database` 服务变成必选**:没有配置数据库插件时 Koishi 会直接不加载本插件(以前是可选的,因为那时插件自己建库)。
|
|
49
|
+
- **旧库不迁移**:三个旧 `.db` 文件保留不动,但不再被读取。订阅关系每次启动都会从配置里的推送列表
|
|
50
|
+
(`config.json` 的 `pushlist`)自动重建,**不受影响**;**过滤词 / 过滤标签、解析统计历史会从零开始**。
|
|
51
|
+
- 想保留过滤词或统计历史的,可以在切换前自己从旧 `.db` 里导出,或改配置里的推送列表重新加过滤规则。
|
|
52
|
+
|
|
3
53
|
## 3.8.0
|
|
4
54
|
|
|
5
55
|
> 抖音解析修好了。抖音那边改了风控规则,**换 cookie 是没用的** —— 问题出在解析用的那个库太旧;
|
package/lib/build-metadata.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.
|
|
3
|
-
"buildTime": "2026-09-
|
|
4
|
-
"buildTimestamp":
|
|
2
|
+
"version": "3.9.1",
|
|
3
|
+
"buildTime": "2026-09-29T10:19:42.069Z",
|
|
4
|
+
"buildTimestamp": 1790677182093,
|
|
5
5
|
"name": "koishi-plugin-kkk",
|
|
6
6
|
"description": "抖音 / B站 / 快手 / 小红书 视频解析与动态推送,带 QQ 交互面板与弹幕烧录(karin-plugin-kkk 的 Koishi 移植版)",
|
|
7
7
|
"homepage": "https://github.com/maimai993/koishi-plugin-kkk#readme",
|
|
8
|
-
"commitHash": "
|
|
9
|
-
"shortCommitHash": "
|
|
8
|
+
"commitHash": "0dde6fc426986698fb0e937768eb4aa86d24f2d4",
|
|
9
|
+
"shortCommitHash": "0dde6fc"
|
|
10
10
|
}
|
package/lib/index.js
CHANGED
|
@@ -119,13 +119,18 @@ try {
|
|
|
119
119
|
catch { /* 同上 */ }
|
|
120
120
|
exports.name = 'kkk';
|
|
121
121
|
exports.inject = {
|
|
122
|
+
// database:**必选**。订阅关系、推送缓存、解析统计全走 Koishi 原生数据库服务
|
|
123
|
+
// (表由 ctx.model.extend 注册,落在宿主自己的库里,插件不再自己开 sqlite 文件)。
|
|
124
|
+
// 之前它是 optional,因为那会儿插件自己建库;现在没有数据库服务就没有地方存数据,
|
|
125
|
+
// 直接声明成必选,让 Koishi 在没有配置数据库插件时明确地不加载本插件。
|
|
126
|
+
required: ['database'],
|
|
122
127
|
// server 只给「插件自带控制台」用,已经移除;这里留着不需要的服务反而会拖慢加载
|
|
123
128
|
// ffmpeg:由 koishi-plugin-ffmpeg-path 提供,兼容层的 ffmpeg()/ffprobe() 会优先用它
|
|
124
129
|
// assets:koishi-plugin-assets-qqbot-part-file 之类提供的图床服务,
|
|
125
130
|
// 面板卡片要上传成 https 地址才能放进 QQ 的 markdown 图片里
|
|
126
131
|
// 渲染:只用浏览器渲染服务(koishi-plugin-puppeteer 或同类插件)
|
|
127
132
|
// 3.5.0 起不再支持 shotkit 内核(它在 Windows 上加载不了 https 资源,卡片会缺图)
|
|
128
|
-
optional: ['puppeteer', '
|
|
133
|
+
optional: ['puppeteer', 'http', 'ffmpeg', 'assets', 'server', 'console']
|
|
129
134
|
};
|
|
130
135
|
/**
|
|
131
136
|
* 配置表单 = 「Koishi 集成选项」 + 「上游插件配置」。
|
|
@@ -1112,11 +1117,11 @@ async function apply(ctx, rawConfig) {
|
|
|
1112
1117
|
logger.warn('加载 app %s 失败(该功能暂不可用): %s', app, error?.message ?? error);
|
|
1113
1118
|
}
|
|
1114
1119
|
}
|
|
1115
|
-
//
|
|
1120
|
+
// 初始化数据库实例(走 Koishi 原生数据库服务 ctx.database)
|
|
1116
1121
|
// 原实现用顶层 await 立即初始化,CJS 下改成在这里显式引导,否则 module/db 导出的实例是 null
|
|
1117
1122
|
try {
|
|
1118
1123
|
const { bootstrapDatabases } = await Promise.resolve().then(() => __importStar(require('./karin/module/db')));
|
|
1119
|
-
const { douyinDB, bilibiliDB, statisticsDB } = await bootstrapDatabases();
|
|
1124
|
+
const { douyinDB, bilibiliDB, statisticsDB } = await bootstrapDatabases(ctx);
|
|
1120
1125
|
logger.debug('数据库初始化完成:%s / %s / %s', douyinDB.constructor.name, bilibiliDB.constructor.name, statisticsDB.constructor.name);
|
|
1121
1126
|
}
|
|
1122
1127
|
catch (error) {
|