kancolle-time:舰娘报时插件,报时语音来源于舰娘百科

koishi-plugin-kancolle-time

npm

舰娘报时插件,报时语音来源于舰娘百科,数据来源于舰娘百科 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

npm

在已配置的频道中,按 Koishi 进程所在机器的本地时区整点推送《舰队 Collection》风格的舰娘时报:日文台词、中文台词以及一条语音。语音文件来自舰娘百科(uploads.kcwiki.cn;舰娘与时间轴数据内置在插件随附的 time_list.json 中。


依赖

在安装本插件的同时,请在 Koishi 中启用并保持运行:

依赖 说明
koishi-plugin-cron(或提供 cron 服务的插件) 用于整点报时与每日换船任务
数据库插件(提供 Koishi database 服务) 持久化每个频道的舰娘与「是否每日随机」设置

Koishi 最低版本请以 package.jsonpeerDependencies.koishi 为准。


配置

所有「在哪些频道报时、用哪艘舰娘」均通过插件配置里的 targets 数组设置,不支持在运行时通过额外子命令动态增删频道(运行时仅可查当前舰娘)。

targets 每一项

字段 类型 说明
platform string 平台标识,与会话中的一致(如 OneBot 下常用 onebot
channelId string 频道 ID,与该平台下的频道 ID 一致
random boolean true:每日随机换一艘有时报数据的舰娘;false:固定使用 ship
ship string 仅在 randomfalse 时必填;取值必须为内置数据中存在的舰娘名(与 time_list.jsonship_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 是否能在运行环境中访问。

整点没有消息

  • 确认 targetsplatform / 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

npm

在已配置的频道中,按 Koishi 进程所在机器的本地时区整点推送《舰队 Collection》风格的舰娘时报:日文台词、中文台词以及一条语音。语音文件来自舰娘百科(uploads.kcwiki.cn;舰娘与时间轴数据内置在插件随附的 time_list.json 中。

支持通过 targets 配置预置频道,也支持在会话内用指令开关报时、切换舰娘或开启每日随机。


依赖

在安装本插件的同时,请在 Koishi 中启用并保持运行:

依赖 说明
koishi-plugin-cron(或提供 cron 服务的插件) 用于整点报时与每日换船任务
数据库插件(提供 Koishi database 服务) 持久化每个频道的启用状态、舰娘与「是否每日随机」设置

Koishi 最低版本请以 package.jsonpeerDependencies 为准(当前为 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.jsonship_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: truerandom: 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 是否能在运行环境中访问。

整点没有消息

  • 确认该频道 enabledtrue(配置、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.onkancolle-time.offkancolle-time.shipkancolle-time.randomkancolle-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

npm

在已配置的频道中,按 Koishi 进程所在机器的本地时区整点推送《舰队 Collection》风格的舰娘时报:日文台词、中文台词以及一条语音。语音文件来自舰娘百科(uploads.kcwiki.cn;舰娘与时间轴数据内置在插件随附的 time_list.json 中(当前共 213 位舰娘)。

支持通过 targets 配置预置频道,也支持在会话内用指令开关报时、切换舰娘或开启每日随机。


依赖

在安装本插件的同时,请在 Koishi 中启用并保持运行:

依赖 说明
koishi-plugin-cron(或提供 cron 服务的插件) 用于整点报时与每日换船任务
数据库插件(提供 Koishi database 服务) 持久化每个频道的启用状态、舰娘与「是否每日随机」设置

Koishi 最低版本请以 package.jsonpeerDependencies 为准(当前为 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.jsonship_name 一致);random: false必填random: true 时可省略,由插件随机指派

通过指令(如 kancolle-time.onkancolle-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: truerandom: 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 是否能在运行环境中访问。

整点没有消息

  • 确认该频道 enabledtrue(配置、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.onkancolle-time.offkancolle-time.shipkancolle-time.randomkancolle-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 个赞