认识生态
简单调研了下现在的 QQ 机器人生态。
发现出了一个很有之前老版本机器人 feel 的 先驱机器人,熟悉的味道令人唏嘘。
但生态这么封闭肯定不是我要的东西。
继续看发现 OneBot 标准已经更新到 v11 不说,连 v12 都有 草案 了。
回想当年酷 Q 刚挂的时候,我还配合 官方 HTTP API 插件 的消息上报和回调接口,用原生 PHP 硬写过业务。
后来新功能写着写着,发现不得不现造的轮子实在太多太累了,就换成了 OneBot Mirai(记得当时还叫 cqhttp-mirai)+ NoneBot(一代)。
选定底层
根据 目前生态(2021.6.1)得知公开的 OneBot 实现共以下六种:
| OneBot 实现 | 底层 | 核心作者 | 说明 |
|---|---|---|---|
| richardchien/coolq-http-api | CKYU | richardchien | 已死,酷 Q 时代的老前辈 |
| Mrs4s/go-cqhttp | MiraiGo | Mrs4s | 备选 |
| yyuueexxiinngg/onebot-kotlin | Mirai | yyuueexxiinngg | 备选 |
| takayama-lily/node-onebot | node-oicq | takayama | 排除,不想试错回调地狱 |
| Yiwen-Chan/OneBot-YaYa | 先驱 | Kanri | 排除,底层未开源* |
| ProtobufBot/ProtobufBot | Mirai / MiraiGo | lz1998 | 排除,未完全兼容 OneBot |
* 未开源:「加群获取更多信息」不叫开源,我说的。
显然问题变成了在 OneBot Mirai(onebot-kotlin)和 go-cqhttp 之间二选一。
二选一
截至 2021.6.1,OneBot Mirai 依然采用 标准。
而 go-cqhttp 兼容绝大多数 标准并在其基础上进行了扩展。
对比文档可知 go-cqhttp 多出了以下标准 API:
/set_group_admin群组设置管理员/get_stranger_info获取陌生人信息/set_restart重启 go-cqhttp/.handle_quick_operation对事件执行快速操作
都还蛮实用的,那就是 go-cqhttp,底层敲定了。
选定 SDK
写 bot 用 Python 最大的好处可以无缝接入人工智能,就算暂时没用上,考虑到以后的扩展性也要提前做准备。以前我就是出于这一点选的 NoneBot v1,不说要上多牛逼的 NLP,反正最基本的结巴分词我就用得挺舒服的。
那就是 NoneBot v2 了。
对我来说,用 NoneBot2 还解决了一个痛点,计划扩展到 Telegram。
我可是曾经考虑过 Telegram Bot API + Go + OneBot 技术栈的,后来发现是伪需求(我对 TG 并没有那种硬性需求)放弃了。
虽然目前 NoneBot2 的 Telegram 支持……不能说一张白纸吧,这饼就画了个圈。
开工
| |
安装插件
本地文档
| |
nb run 后直接访问 /docs 查看离线文档。
前端测试
https://github.com/nonebot/plugin-test
| |
nb run 后直接访问 /test 在浏览器 mock 数据进行测试。
定时任务
| |
| |
写自己的插件
| |
如果新建的插件不是单文件而是文件夹,在
__init__.py里写业务比在data_source.py里方便。
启动 bot
| |