【bangumi-onair】动画放送情况查询插件

查询 今日/本季 放送的动画。同时支持通过 偏移参数 查询任意 一天/一个季度 的动画放送情况。

详细介绍见仓库 README

npm 仓库: bangumi-onair

GitHub 仓库:bangumi-onair

支持的数据源:

  • bangumi-API
    • 换季更新快
    • 只包含本季动画
    • 不包含播出时间
  • bangumi-data
    • 换季更新慢
    • 包含历史动画
    • 包含播出时间(精确到分钟)

这是我开发的第一个 Koishi 插件,同时也是我现学现用 JS/TS 的第一个项目~

为了收集反馈和建议以便更好地学习语言和框架,开了这个发布帖,请多指教!

4 个赞

开发计划

  • 功能:显示本季动画 → .season | .cseason
    • 参数:季度(每三月)偏移 → .season [offset: number]
  • 功能:显示今日动画 → .day | .cday
    • 参数:日期偏移 → .day [offset: number] | .cday [offset: number]
  • 功能:更新动画数据 → .update
  • 功能:清除动画数据 → .drop
  • 设置:排除 bangumi-data 非本季度开播动画 → excludeOld
  • 设置:显示中文标题 → showChineseTitle
  • 设置:限制标题长度 → maxTitleLength
  • 设置:自定义格式化输出 → formatConfig
  • 设置:按星期分割显示季度动画,避免消息过长 → separateWeekdays
  • 设置:使用三十小时制组织 bangumi-data 动画 → thirtyHourSystem
  • 基础:使用数据库减少请求
  • 基础:使用 bangumi-data 获取数据
  • 基础:使用 bangumi-API-Calendar 获取数据
  • 语言:中文设置和提示
  • 功能:查询指定时间戳
  • 功能:订阅动画
  • 功能:仅显示订阅
  • 功能:订阅开播提醒
  • 功能:参数覆写设置
  • 功能:以图片展示
  • 文档:格式化输出使用方法

已知问题

  • bangumi-data 含有过时数据,会使部分早已完结的动画被判定为未完结。暂未找到好的解决办法。

已修复

折叠
  • onair.day 指令缺漏 bangumi-data 接口下部分未完结动画
  • MySQL 插入时 id 为 null
  • 我忘了在最新发布版本中标记依赖 数据库 服务,欸嘿~
5 个赞

更新日志

v1.5.1

修复:

  • .cseason 格式化输出时星期不正确
v1.5.0

新增:

  • 设置 thirtyHourSystem:使用三十小时制组织 bangumi-data 的动画数据

修复:

  • 老动画(如海贼王)应该使用开播当日的星期而非周期累加计算播出星期
  • 如果 broadcast 存在,应优先使用其作为开播日,适用于开播日曾变更过的动画
  • 未完结老动画的判定,ova & movie 类型不参与完结日判定,只使用开播日判定
v1.4.1

修复:

  • 设置本地化文件构建后为 json 格式,而代码导入路径为 .yml,导致插件无法正常加载
v1.4.0(无法运行的版本)

重构:

  • 独立的配置文件,不同配置项占用不同命名空间,便于拓展
  • 解耦查询与结果格式化,便于自定义格式化输出

新增:

  • 设置 maxTitleLength:限制动画标题最大长度
  • 设置 formatConfig:自定义各命令输出的格式化字符串

修复:

  • bangumi-API 下中文标题为空时没有回退到原文标题,而是返回空值的问题
v1.3.4

其他:

  • .cday.cseason 本地化和 help 信息
  • .update 网络请求失败提示信息本地化
  • 设置中推荐 imagify 插件作为分割消息的替代
  • help 列表隐藏 .drop 指令
v1.3.3

修复:

  • v1.3.0 起至此版本前因不正确的全局变量定义导致的插件无法加载
v1.3.2(无法运行的版本)

其他:

  • 清除多余构建文件
v1.3.1(无法运行的版本)

重构:

  • 使用 Koishi 框架内 ctx.http.get 代替 fetch 发送请求

修复:

  • 向请求中添加符合 bangumi-API 要求的 UserAgent 信息
v1.3.0(无法运行的版本)

新增:

  • 基础:支持 bangumi-API 数据源
  • 命令 .cday:使用 bangumi-API 数据返回今日动画
  • 命令 .cseason:使用 bangumi-API 数据返回本季动画

其他:

  • 使用 Promise.all() 处理 .update.drop,提高性能
  • 优化 day 系列查询返回结果的格式
  • 整理代码
v1.2.2

重构:

  • 不再在 .update 前尝试 .drop,因为 v1.2.1 中的修复解决了之前直接更新数据库时出现重复值的 bug

其他:

  • 导出对 Koishi database 服务的 inject,以提醒用户安装服务
v1.2.1

修复

  • MySQL 插入时 id 为 null

其他

  • package.json 中注明 Koishi database 服务依赖项
v1.2.0

新增:

  • 设置 separateWeekdays:按星期分割季度动画消息,以防消息过长无法成功发送
  • 参数 offset:用于命令 .day.season,查询 日期/季度 的偏移量,可供查询明日,上季度等

修复:

  • 对接 QQ 平台时无法成功发送季度动画。原因为消息过长。由新增设置 separateWeekdays 解决

其他:

  • 优化了输出的 日期/时间 标注,方便带 offset 查询时看清查询日期和年份/季度
v1.1.1

重构:

  • 放弃从 bangumi-data 包获取动画信息。该包只在 build 时更新数据。改从指定 CDN 抓取数据
  • 将层级式子命令 root/sub 改为派生式子命令 root.sub

新增功能:

  • 基础:使用数据库减少网络操作
  • 命令 onair.update:更新数据库
  • 命令 onair.drop:删除数据库
  • 本地化:zh-CN
  • 本地化:en-US

修复:

  • utils/data-calc.ts:计算周期时跨年不停止

其他:

  • 优化了指令的错误处理
  • 配置了命令信息供 help 等调用
v1.0.0

新增功能:

  • 命令 onair/seaon :返回本季动画
  • 命令 onair/day :返回今日动画
  • 设置 excludeOld :排除非本季开播的动画,默认不启用
  • 设置 showChineseTitle :优先显示中文标题,默认启用
4 个赞

好棒!

3 个赞

谢谢!

3 个赞

好强大!

3 个赞

Failed to get bangumi data from CDN.

当我把全局代理清除后仍然是这样

环境信息
System:
OS: Windows 11 10.0.22621
CPU: (12) x64 Intel(R) Core™ i7-10750H CPU @ 2.60GHz

Binaries:
Node: 20.9.0
Yarn: 4.0.1

Koishi:
Core: 4.16.3
Console: 5.22.6
Koishi Desktop: 0.11.2

4 个赞

感谢反馈!

这个报错仅会在从 CDN 获取数据失败时出现,这是获取链接

你可以确认一下在你的部署环境下能否正常访问该链接吗?

4 个赞

刚刚在沙盒成功更新了数据库,我再去试试QQ

4 个赞

QQ也成功了,或许是重新添加全局代理后重启了实例的原因?感谢回复

4 个赞

数据库似乎是截止2023年12月31号了,请问可以正向偏移查询未来的动画吗?如果数据库支持的话。

4 个赞

目前使用的数据来源(bangumi-data)更新较慢,优势在于包含历史动画,我正在写更新支持 bangumi API,虽然只包含本季动画,但是准确且快速。

预计下一个中版本将包含这个功能。应该会在这两天更新。


bangumi-API 已在 v1.3.0 更新中支持

4 个赞

才发现一直把 bangumi-APIbangumi-data 的特性写反了,不知道有没有误导到人(すみませんでした!

3 个赞

感觉每个中版本还是单独发一层更方便在论坛展示更新状况和收集对应问题建议,所以这个中版本开始除了更新日志也单发一层更新内容好了(


v1.5.0

新增:

  • 设置 thirtyHourSystem:使用三十小时制组织 bangumi-data 的动画数据

修复:

  • 老动画(如海贼王)应该使用开播当日的星期而非周期累加计算播出星期
  • 如果 broadcast 存在,应优先使用其作为开播日,适用于开播日曾变更过的动画
  • 未完结老动画的判定,ova & movie 类型不参与完结日判定,只使用开播日判定
3 个赞

忘了在论坛发版了(


v1.5.1

修复:

  • .cseason 格式化输出时星期对应不正确
1 个赞