koishi-plugin-haruki-activity
v0.2.2
Published
基于 haruki.db 统计近7日命令命中量并生成表格图片的 Koishi 插件
Maintainers
Readme
koishi-plugin-haruki-activity
生成近 N 日命令使用量表格(16:9 PNG)。支持背景图、中文字体、趋势线、额外窗口统计。内置零点定时与并发安全的计数写入。
快速开始
- 安装:
npm i(依赖:koishi@^4.15、sql.js、pureimage)。 - 启用:在 Koishi 控制台勾选插件。
- 配置:设置
sourceDbPath指向你的haruki.db;如需自定义统计库路径,填写countDbPath。 - 使用:在会话发送
daily,收到 16:9 图片。
配置项
sourceDbPath:命令命中数据库路径。countDbPath:统计库路径,默认与源库同目录count.db。bgPath:背景图路径(可选)。backgroundStrategy:contain|cover,默认contain。imageWidth/imageHeight:图片尺寸,默认 1920x1080。title:标题文本。fontPath/fontFamily:自定义字体(建议 TTF)。windowDays:主统计窗口,默认 7。extraWindows:额外窗口数组(如[14, 30])。showTrend:是否绘制趋势线,默认 false。style:配色覆盖(bgColor、titleColor、headerBg、headerColor、textColor、separatorColor)。
提供的命令
daily:刷新今日计数、补齐窗口缺失日,渲染并发送图片。daily.fix:修正并固定近 7 日计数(默认仅 authority ≥ 4 可用)。
工作流与一致性
- 零点任务:按本地时区每天 00:00 记录“昨日”计数到
count.db。 - 命中刷新:
daily触发时实时更新“今日”计数,并回填窗口内缺失日期。 - 并发安全:对
count.db的读写已串行化,避免命令与定时器互相覆盖。 - 数据源:分日与额外窗口统计均基于
haruki.db的command_usage(本地时区)。 - 锁定机制:
daily.fix将近 7 日写入并设置locked=1,后续零点/命中不会覆盖。
生成结果
- 输出文件:
count.db(表daily_counts(day TEXT PRIMARY KEY, count INTEGER, updated_at DATETIME, locked INTEGER DEFAULT 0))。 - 输出消息:16:9 PNG 图片,包含标题、日期-计数表格,可选趋势线与额外窗口汇总。
配置示例(JSON 片段)
{
"plugins": {
"haruki-activity": {
"sourceDbPath": "/data/haruki/haruki.db",
"countDbPath": "/data/haruki/count.db",
"bgPath": "/data/assets/bg.jpg",
"backgroundStrategy": "cover",
"imageWidth": 1920,
"imageHeight": 1080,
"title": "阳子萝卜每日活跃度",
"fontPath": "/usr/share/fonts/truetype/noto/NotoSansSC-Regular.ttf",
"fontFamily": "NotoSansSC",
"windowDays": 7,
"extraWindows": [14, 30],
"showTrend": true
}
}
}测试与验证
- 聚合测试脚本:
npm run test:aggregate -- <sourceDbPath> [windowDays] [extraWindows] - 运行验证:在会话发送
daily,应收到图片,并在count.db看到最新计数。
常见问题
- 字体显示异常:确认提供 TTF,并确保
fontFamily与字体内部名称一致。 - 未生成
count.db:检查路径是否可写;留空countDbPath时默认写入sourceDbPath同目录。 - 时区偏差:依赖宿主本地时区,请确保主机时区即业务时区。
