2019 年八月的一天,我闲着无聊敲下我编写的机器人“四季酱”的第一行代码。至今,在 QQ 机器人这条路上,我已经前后写下了两万多行代码了。随着机器人的功能越来越强大,我逐渐产生了将其开源的念头。于是,经过了几个月的努力,一个基于 CoolQ 和 CQHTTP 的 QQ 机器人框架 Koishi.js 就这样诞生了。
Koishi 这个名字来源于东方 Project 中的角色古明地恋(Komeiji Koishi),而图标也是以这个角色为原型设计的。直接用 Koishi 作为机器人框架的名字,心里还是挺紧张的~
开箱即用的 CLI
Koishi 拥有开箱即用的 CLI 命令。无需编写任何代码,只需下载 Node.js,CoolQ 和 CQHTTP,安装 Koishi,并在命令行中输入 koishi init 和 koishi start 就能直接搭建一个简单的机器人。你也可以通过修改 koishi init 生成的配置文件来定制你的机器人。与此同时,Koishi 还配备了丰富和人性化的提示,进一步提高调试体验。
功能强大的 API
Koishi 的 API 包括下面几个部分:
- Receiver:将收到的信息转化为事件进行分发,且同时支持 HTTP 和 WebSocket
- Sender:完美契合 CQHTTP API 的一套异步发送器,同样支持 HTTP 和 WebSocket
- Middleware:支持异步操作的中间件系统,可以让你高效地处理每一条信息
- Context:用上下文描述了机器人可能的运行环境,让你得以对不同的群进行不同的处理
- Plugin:将逻辑以插件的形式封装,可以实现更好的模块化和配置化
- Command:Koishi 的核心功能之一,使用链式调用轻松创建指令,同时提供了大量的实用特性
- Database:内置的数据库系统,但并不依赖具体的数据库实现,无论何种数据库都可以在 Koishi 中使用
每一个部分都经过了精心的编写,可以让你轻松实现任何需求。
丰富的生态系统
Koishi 在编写时,也同样编写了大量的官方插件作为补充。它们有些 Koishi 的基础功能,有些则为 Koishi 的使用提供了许多便利。更重要的是,这十多个插件都可以作为 Koishi 插件开发的极好示范。
下面是一些例子:
- koishi-plugin-common:常用的十余种功能共同组成的内置插件
- koishi-plugin-schedule:添加和管理计划任务
- koishi-plugin-teach:教机器人说话
- koishi-plugin-image-search:让机器人搜图
除了现在已经发布的十多种官方插件外,还有更多的插件正在开发中。
支持多机器人、用户管理……
Koishi 不仅能迅速实现简单的需求,对于大型项目也有自己专业的支持。Koishi 原生地支持了多机器人开发,同时为这些机器人之间互通数据、共用服务器、保证数据安全提供了原生的解决方案,这有助于在保持高性能的同时,将腾讯风控造成的影响降低到最小。除此以外,Koishi 还内置了一套用户管理机制,不仅几乎能满足一切需求,还具有良好的扩展性,任何人都可以在插件中扩展用户的字段。
类型与单元测试
Koishi 在开发时借助了下面的工具:
- 使用 TypeScript 编写
- 使用 Jest 进行单元测试
- 使用 Eslint 进行代码风格检查
- 使用 GitHub Actions 进行持续集成
作为一个拥有万余行代码的大项目,Koishi 主要模块的测试覆盖率已经达到了 99%。你大可以放心使用。顺便说一句,Koishi 现在已经支持直接调用 TypeScript 了,如果你想为你的 Node 机器人开发提供完整的代码提示和类型检查的话,相信没有更好的选择。
体积小,却五脏俱全
下面的图展示了 Koishi 与其他 CQHTTP 的 Node SDK 的对比:
注:依赖数量如果表示为 X/Y,则 X 表示核心库依赖数量,Y 表示命令行工具依赖数量。
详细的帮助文档
说了这么多,如果你已经对编写 QQ 机器人、对使用 Koishi 产生兴趣的话,那么就去看看 Koishi 的官方文档吧!相信这份详细的帮助文档将打消你的一切疑虑。
Koishikoishi.js.org下面是 Koishi.js 的源代码,如果觉得不错的话,记得点个 star 哦:
https://github.com/koishijs/koishigithub.com