koishi-plugin-kancolle-time

舰娘报时插件,报时语音来源于舰娘百科,数据来源于舰娘百科 Scrapy 项目:https://github.com/HeiBuNeko/kancollebot
依赖的数据源包括 time_list.json 时报列表
目前内置于插件中暂不支持客制化
使用方法
kancolle-time ship <ship> 指定舰娘报时
传入 random 参数时指定随机舰娘报时
- 使用示例:kancolle-time ship 长门 / kancolle-time ship random
仅限于存在于舰娘 Wiki 上有具体页面且有报时的舰娘
整点报时时会从舰娘 Wiki 上请求语音文件,请确保与舰娘 Wiki 的连接畅通
kancolle-time random 每日随机舰娘报时
开启每日随机舰娘报时,报时舰娘将于当天 0 点更新
kancolle-time status 当前群组舰娘报时状态
kancolle-time off 关闭舰娘报时
常见问题
发送群组消息 retcode: 1200 报错
[W] bot Error: Error with request send_group_msg, args: {"group_id":xxx,"message":[{"type":"record","data":{"file":"xxx.mp3","cache":0}}]}, retcode: 1200
通常是由于舰娘百科文件服务器 502 错误
2 个赞
koishi-plugin-kancolle-time

在已配置的频道中,按 Koishi 进程所在机器的本地时区 的整点推送《舰队 Collection》风格的舰娘时报:日文台词、中文台词以及一条语音。语音文件来自舰娘百科(uploads.kcwiki.cn);舰娘与时间轴数据内置在插件随附的 time_list.json 中。
依赖
在安装本插件的同时,请在 Koishi 中启用并保持运行:
| 依赖 |
说明 |
koishi-plugin-cron(或提供 cron 服务的插件) |
用于整点报时与每日换船任务 |
数据库插件(提供 Koishi database 服务) |
持久化每个频道的舰娘与「是否每日随机」设置 |
Koishi 最低版本请以 package.json 中 peerDependencies.koishi 为准。
配置
所有「在哪些频道报时、用哪艘舰娘」均通过插件配置里的 targets 数组设置,不支持在运行时通过额外子命令动态增删频道(运行时仅可查当前舰娘)。
targets 每一项
| 字段 |
类型 |
说明 |
platform |
string |
平台标识,与会话中的一致(如 OneBot 下常用 onebot) |
channelId |
string |
频道 ID,与该平台下的频道 ID 一致 |
random |
boolean |
true:每日随机换一艘有时报数据的舰娘;false:固定使用 ship |
ship |
string |
仅在 random 为 false 时必填;取值必须为内置数据中存在的舰娘名(与 time_list.json 中 ship_name 一致) |
配置示例(koishi.yml)
plugins:
kancolle-time:
targets:
- platform: onebot
channelId: '123456789'
random: true
- platform: onebot
channelId: '987654321'
random: false
ship: 长门
与数据库同步方式
插件在加载时会清空表 kancolle_time,再根据当前配置 targets 全量写入数据库:
random: true:启动时会为该行随机指派一艘舰娘并写入数据库;此后由定时任务负责在深夜更换。
random: false:写入你选择的那艘固定舰娘。
修改 targets 后需保存配置并重启/重载插件,新的频道列表才会生效。
行为说明
整点报时
- 使用 Cron:每小时的第 0 分钟执行(
0 * * * *)。
- 为减少整点漂移,插件在计算「当前是几点」时对系统时间做了 约 1 分钟的前向偏移,再换算为日文数字风格的时报标签(例如 20 点对应
time_list.json 中的「二〇〇〇时报」)。
- 对每个已配置频道,根据该行存储的舰娘查找对应整点的条目;发送内容顺序为:日文台词 → 中文台词 →
h.audio 外链语音。
- 若某舰娘缺少该小时的条目,会向日志打出警告并跳过该次发送。
每日随机舰娘(random: true)
- 每天在 23:59(本地时区)为所有
random: true 的行重新 Random.pick 一艘舰娘并写回数据库,从而在次日全天使用新的一艘舰娘的时报语音与台词。
数据来源与限制
- 仅包含有内置数据的舰娘;若固定填写了数据中不存在的名称,校验阶段即可能无法通过配置。
- 报时需要能够访问语音 URL(通常为
uploads.kcwiki.cn);若服务端返回错误 or 网关异常,机器人侧可能出现发送失败(如下文「常见问题」)。
指令
| 指令 |
作用 |
kancolle-time.info |
在当前会话所属平台与频道查询数据库中配置的舰娘名称;若该频道未在 targets 中登记,返回未设置 |
(指令名不含子命令别名;以 Koishi 市场/配置中展示的为准。)
常见问题
发送后出现 retcode: 1200 等与语音相关的报错
报错形态可能类似:
[W] bot Error: Error with request send_group_msg ... "type":"record" ... retcode: 1200
常见原因之一是语音文件 CDN(如舰娘百科侧)短时 502/不可用,导致远端文件无法作为语音正常下发。可多试几次或稍后重试;若长期失败,需检查该 URL 是否能在运行环境中访问。
整点没有消息
- 确认
targets 里 platform / channelId 与真实会话一致。
- 确认已安装 Cron 插件且插件无报错日志。
- 查看日志是否有「未找到报时条目」类警告(该舰娘可能没有该小时的内置数据)。
为什么没有 ship / random / off 等子命令?
当前代码仅实现 配置驱动的 targets + kancolle-time.info 查询。若文档或旧 README 中记载了其他子命令,请以仓库内 src/index.tsx 为准。
数据与致谢
- 时报结构与语音链接来自 舰娘百科(及 uploads 域名)。
- 历史爬虫/数据流水线可参考:
https://github.com/HeiBuNeko/kancollebot。
开源与仓库
1 个赞
[v2.0.1]koishi-plugin-kancolle-time

在已配置的频道中,按 Koishi 进程所在机器的本地时区 的整点推送《舰队 Collection》风格的舰娘时报:日文台词、中文台词以及一条语音。语音文件来自舰娘百科(uploads.kcwiki.cn);舰娘与时间轴数据内置在插件随附的 time_list.json 中。
支持通过 targets 配置预置频道,也支持在会话内用指令开关报时、切换舰娘或开启每日随机。
依赖
在安装本插件的同时,请在 Koishi 中启用并保持运行:
| 依赖 |
说明 |
koishi-plugin-cron(或提供 cron 服务的插件) |
用于整点报时与每日换船任务 |
数据库插件(提供 Koishi database 服务) |
持久化每个频道的启用状态、舰娘与「是否每日随机」设置 |
Koishi 最低版本请以 package.json 中 peerDependencies 为准(当前为 Koishi ^4.18.11、@satorijs/element ^3.2.0)。插件使用 JSX 渲染消息元素,需由 Koishi 运行时提供 @satorijs/element。
配置
频道报时通过插件配置里的 targets 数组登记。每个频道还可通过指令在运行时调整启用状态、舰娘与随机模式(见下文「指令」)。
targets 每一项
| 字段 |
类型 |
说明 |
enabled |
boolean |
是否启用报时,配置 Schema 默认 false;也可在频道内用 kancolle-time.on / kancolle-time.off 切换 |
platform |
string |
平台标识,与会话中的一致(如 OneBot 下常用 onebot) |
channelId |
string |
频道 ID,与该平台下的频道 ID 一致 |
random |
boolean |
true:每日随机换一艘有时报数据的舰娘;false:固定使用 ship |
ship |
string |
舰娘名(与 time_list.json 中 ship_name 一致);未指定时由插件随机指派,random: false 时需在配置中填写 |
通过指令(如 kancolle-time.ship)首次为频道写入数据库、且未携带 enabled 字段时,数据库默认 initial: true,即默认开启报时。在 targets 中预置的频道仍建议显式设置 enabled: true。
配置示例(koishi.yml)
plugins:
kancolle-time:
targets:
- enabled: true
platform: onebot
channelId: '123456789'
random: true
与数据库同步方式
配置与数据库之间是双向同步的:
| 方向 |
触发时机 |
| 配置 → 数据库 |
插件加载 / 重载时:清空表 kancolle_time,再按 targets 全量写入 |
| 数据库 → 配置 |
频道指令(on / off / ship / random)或 23:59 换船完成后,调用 syncScope(),通过 ctx.scope.update 将数据库中的全部频道写回 targets 并持久化 |
各字段含义:
enabled: true:该频道参与整点报时与(若开启)每日换船。
random: true:启动或换船时会随机指派一艘舰娘;23:59 更换后同样会回写配置。
random: false:使用固定舰娘 ship。
在频道内通过指令修改启用状态、舰娘或随机模式后,变更会立即生效并写回配置文件,一般无需再手动编辑 koishi.yml。若你在控制台或直接修改 koishi.yml 中的 targets(增删频道、改初始参数等),则需保存并重启/重载插件,才会按文件中的配置覆盖数据库。
行为说明
整点报时
- 使用 Cron:每小时的第 0 分钟执行(
0 * * * *)。
- 为减少整点漂移,插件在计算「当前是几点」时对系统时间做了 约 1 分钟的前向偏移,再换算为日文数字风格的时报标签(例如 20 点对应
time_list.json 中的「二〇〇〇时报」)。
- 仅对数据库中
enabled: true 的频道发送报时。
- 对每个已启用频道,根据该行存储的舰娘查找对应整点的条目;发送内容顺序为:日文台词 → 中文台词 →
h.audio 外链语音。
- 若某舰娘缺少该小时的条目,会向日志打出警告并跳过该次发送。
每日随机舰娘(random: true)
- 每天在 23:59(本地时区)为所有
enabled: true 且 random: true 的行重新 Random.pick 一艘舰娘并写回数据库,从而在次日全天使用新的一艘舰娘的时报语音与台词。
数据来源与限制
- 仅包含有内置数据的舰娘;若固定填写了数据中不存在的名称,校验阶段即可能无法通过配置。
- 报时需要能够访问语音 URL(通常为
uploads.kcwiki.cn);若服务端返回错误或网关异常,机器人侧可能出现发送失败(如下文「常见问题」)。
指令
以下指令均在当前会话所属平台与频道上生效,并写入数据库。
| 指令 |
作用 |
kancolle-time.info |
查询当前频道的启用状态、舰娘名称与是否每日随机;若该频道未登记,返回「未设置」 |
kancolle-time.list |
列出全部可选舰娘(共 {N} 位),并提示设置方式 |
kancolle-time.on |
开启当前频道的舰娘报时(enabled: true) |
kancolle-time.off |
关闭当前频道的舰娘报时(enabled: false) |
kancolle-time.ship <舰娘名> |
将当前频道的报时舰娘设为指定名称,例如 kancolle-time.ship 长门 |
kancolle-time.random <true|false> |
开启或关闭当前频道的每日随机舰娘,例如 kancolle-time.random true |
(指令名不含子命令别名;以 Koishi 市场/配置中展示的为准。)
常见问题
发送后出现 retcode: 1200 等与语音相关的报错
报错形态可能类似:
[W] bot Error: Error with request send_group_msg ... "type":"record" ... retcode: 1200
常见原因之一是语音文件 CDN(如舰娘百科侧)短时 502/不可用,导致远端文件无法作为语音正常下发。可多试几次或稍后重试;若长期失败,需检查该 URL 是否能在运行环境中访问。
整点没有消息
- 确认该频道
enabled 为 true(配置、kancolle-time.on,或通过指令首次登记时的数据库默认值)。
- 确认该频道已在
targets 中登记,且 platform / channelId 与真实会话一致。
- 确认已安装 Cron 插件且插件无报错日志。
- 查看日志是否有「未找到报时条目」类警告(该舰娘可能没有该小时的内置数据)。
手动改配置后,和指令里的设置对不上?
插件重载时按 koishi.yml 中的 targets 覆盖数据库。通过指令做的修改会先经 syncScope() 写回配置,因此正常重载不会丢失。若你绕过指令、直接编辑配置文件后又重载,则以文件内容为准;请确认文件中的 targets 与预期一致。
数据与致谢
- 时报结构与语音链接来自 舰娘百科(及 uploads 域名)。
- 历史爬虫/数据流水线可参考:
https://github.com/HeiBuNeko/kancollebot。
开源与仓库
更新日志
2.0.1
- 新增
targets 配置项 enabled,用于控制频道是否参与报时。
- 新增频道级指令:
kancolle-time.on、kancolle-time.off、kancolle-time.ship、kancolle-time.random、kancolle-time.list。
kancolle-time.info 现同时返回启用状态与每日随机设置。
- 整点报时与每日换船仅作用于
enabled: true 的频道。
- 指令与 23:59 换船完成后通过
syncScope() 将数据库状态回写 targets 配置。
- 数据库
enabled 字段 initial 改为 true:通过指令首次登记频道时默认开启报时,无需额外执行 kancolle-time.on。
- 声明
@satorijs/element 为 peerDependency,修复 JSX 构建时的依赖缺失报错。
2.0.0
- 重构为
targets 配置驱动:在 koishi.yml 中预置平台、频道、舰娘与随机模式。
- 引入数据库表
kancolle_time 持久化各频道状态;插件加载时按配置全量同步。
- 新增
kancolle-time.info 查询当前频道舰娘。
- 统一报时数据结构(
time_list.json),使用 ctx.broadcast 投递整点报时。
- 移除旧版基于会话子命令动态增删频道的用法,改为配置 + 指令组合。
1 个赞
[v2.0.2]koishi-plugin-kancolle-time

在已配置的频道中,按 Koishi 进程所在机器的本地时区 的整点推送《舰队 Collection》风格的舰娘时报:日文台词、中文台词以及一条语音。语音文件来自舰娘百科(uploads.kcwiki.cn);舰娘与时间轴数据内置在插件随附的 time_list.json 中(当前共 213 位舰娘)。
支持通过 targets 配置预置频道,也支持在会话内用指令开关报时、切换舰娘或开启每日随机。
依赖
在安装本插件的同时,请在 Koishi 中启用并保持运行:
| 依赖 |
说明 |
koishi-plugin-cron(或提供 cron 服务的插件) |
用于整点报时与每日换船任务 |
数据库插件(提供 Koishi database 服务) |
持久化每个频道的启用状态、舰娘与「是否每日随机」设置 |
Koishi 最低版本请以 package.json 中 peerDependencies 为准(当前为 Koishi ^4.18.11、@satorijs/element ^3.2.0)。插件使用 JSX 渲染消息元素,需由 Koishi 运行时提供 @satorijs/element。
配置
频道报时通过插件配置里的 targets 数组登记。每个频道还可通过指令在运行时调整启用状态、舰娘与随机模式(见下文「指令」)。
targets 每一项
| 字段 |
类型 |
默认值 |
说明 |
enabled |
boolean |
true |
是否启用报时;也可在频道内用 kancolle-time.on / kancolle-time.off 切换 |
platform |
string |
— |
平台标识,与会话中的一致(如 OneBot 下常用 onebot) |
channelId |
string |
— |
频道 ID,与该平台下的频道 ID 一致 |
random |
boolean |
false |
true:每日随机换一艘有时报数据的舰娘;false:固定使用 ship |
ship |
string |
随机 |
舰娘名(与 time_list.json 中 ship_name 一致);random: false 时必填;random: true 时可省略,由插件随机指派 |
通过指令(如 kancolle-time.on、kancolle-time.ship)首次为频道写入数据库时,若该行尚未存在,数据库字段 enabled 默认 true,即默认开启报时。在 targets 中预置的频道,enabled 配置项默认亦为 true。
配置示例(koishi.yml)
每日随机舰娘:
plugins:
kancolle-time:
targets:
- enabled: true
platform: onebot
channelId: '123456789'
random: true
固定舰娘:
plugins:
kancolle-time:
targets:
- enabled: true
platform: onebot
channelId: '123456789'
random: false
ship: 长门
与数据库同步方式
配置与数据库之间是双向同步的:
| 方向 |
触发时机 |
| 配置 → 数据库 |
插件加载 / 重载时:删除不在 targets 中的频道记录,再 upsert targets 中的条目 |
| 数据库 → 配置 |
加载 / 重载完成 upsert 后、频道指令(on / off / ship / random)或 23:59 换船完成后,调用 syncScope(),通过 ctx.scope.update 将数据库中的全部频道写回 targets 并持久化 |
各字段含义:
enabled: true:该频道参与整点报时与(若开启)每日换船。
random: true:启动或换船时会随机指派一艘舰娘;23:59 更换后同样会回写配置。
random: false:使用固定舰娘 ship(配置校验要求填写有效舰娘名)。
在频道内通过指令修改启用状态、舰娘或随机模式后,变更会立即生效并写回配置文件,一般无需再手动编辑 koishi.yml。若你在控制台或直接修改 koishi.yml 中的 targets(增删频道、改初始参数等),则需保存并重启/重载插件,才会按文件中的配置覆盖数据库中对应条目。
行为说明
整点报时
- 使用 Cron:每小时的第 0 分钟执行(
0 * * * *)。
- 为减少整点漂移,插件在计算「当前是几点」时对系统时间做了 约 1 分钟的前向偏移,再换算为日文数字风格的时报标签(例如 20 点对应
time_list.json 中的「二〇〇〇时报」)。
- 仅对数据库中
enabled: true 的频道发送报时。
- 对每个已启用频道,根据该行存储的舰娘查找对应整点的条目;发送内容顺序为:日文台词 → 中文台词 →
<audio> 外链语音。
- 若某舰娘缺少该小时的条目,会向日志打出警告并跳过该次发送。
- 单个频道发送失败时仅记录警告日志,不影响其他频道。
每日随机舰娘(random: true)
- 每天在 23:59(本地时区)为所有
enabled: true 且 random: true 的行重新 Random.pick 一艘舰娘并写回数据库,从而在次日全天使用新的一艘舰娘的时报语音与台词。
数据来源与限制
- 仅包含有内置数据的舰娘;配置 Schema 会将
ship 限定为 time_list.json 中的名称,kancolle-time.ship 指令也会校验舰娘名是否有效。
- 报时需要能够访问语音 URL(通常为
uploads.kcwiki.cn);若服务端返回错误或网关异常,机器人侧可能出现发送失败(如下文「常见问题」)。
指令
以下指令均在当前会话所属平台与频道上生效,并写入数据库。
| 指令 |
作用 |
kancolle-time.info |
查询当前频道的启用状态、舰娘名称与是否每日随机;若该频道未登记,返回「未设置」 |
kancolle-time.list |
以合并转发消息列出全部可选舰娘(共 213 位,全角序号),并提示设置方式 |
kancolle-time.on |
开启当前频道的舰娘报时(enabled: true) |
kancolle-time.off |
关闭当前频道的舰娘报时(enabled: false) |
kancolle-time.ship <舰娘名> |
将当前频道的报时舰娘设为指定名称,例如 kancolle-time.ship 长门;名称无效时返回提示 |
kancolle-time.random <true|false> |
开启或关闭当前频道的每日随机舰娘,例如 kancolle-time.random true |
(指令名不含子命令别名;以 Koishi 市场/配置中展示的为准。)
常见问题
发送后出现 retcode: 1200 等与语音相关的报错
报错形态可能类似:
[W] bot Error: Error with request send_group_msg ... "type":"record" ... retcode: 1200
常见原因之一是语音文件 CDN(如舰娘百科侧)短时 502/不可用,导致远端文件无法作为语音正常下发。可多试几次或稍后重试;若长期失败,需检查该 URL 是否能在运行环境中访问。
整点没有消息
- 确认该频道
enabled 为 true(配置、kancolle-time.on,或通过指令首次登记时的数据库默认值)。
- 确认该频道已在
targets 中登记,且 platform / channelId 与真实会话一致。
- 确认已安装 Cron 插件且插件无报错日志。
- 查看日志是否有「未找到报时条目」类警告(该舰娘可能没有该小时的内置数据)。
手动改配置后,和指令里的设置对不上?
插件重载时会按 koishi.yml 中的 targets upsert 数据库,并移除不在 targets 中的频道记录。通过指令做的修改会先经 syncScope() 写回配置,因此正常重载不会丢失。若你绕过指令、直接编辑配置文件后又重载,则以文件内容为准;请确认文件中的 targets 与预期一致。
数据与致谢
- 时报结构与语音链接来自 舰娘百科(及 uploads 域名)。
- 历史爬虫/数据流水线可参考:
https://github.com/HeiBuNeko/kancollebot。
开源与仓库
更新日志
2.0.2
enabled 配置项默认值改为 true,与数据库 initial 及指令首次登记行为一致。
- 插件加载时不再清空整张
kancolle_time 表:仅删除不在 targets 中的频道,再 upsert 配置条目,随后 syncScope() 写回配置。
- 加载 / 重载完成后也会执行
syncScope(),保证配置文件与数据库一致。
2.0.1
- 新增
targets 配置项 enabled,用于控制频道是否参与报时。
- 新增频道级指令:
kancolle-time.on、kancolle-time.off、kancolle-time.ship、kancolle-time.random、kancolle-time.list。
kancolle-time.info 现同时返回启用状态与每日随机设置。
- 整点报时与每日换船仅作用于
enabled: true 的频道。
- 指令与 23:59 换船完成后通过
syncScope() 将数据库状态回写 targets 配置。
- 数据库
enabled 字段 initial 改为 true:通过指令首次登记频道时默认开启报时,无需额外执行 kancolle-time.on。
- 声明
@satorijs/element 为 peerDependency,修复 JSX 构建时的依赖缺失报错。
2.0.0
- 重构为
targets 配置驱动:在 koishi.yml 中预置平台、频道、舰娘与随机模式。
- 引入数据库表
kancolle_time 持久化各频道状态;插件加载时按配置全量同步。
- 新增
kancolle-time.info 查询当前频道舰娘。
- 统一报时数据结构(
time_list.json),使用 ctx.broadcast 投递整点报时。
- 移除旧版基于会话子命令动态增删频道的用法,改为配置 + 指令组合。
1 个赞