两年多之前,CoolQ还没死掉的时候,我就注册了小号开了个基于CoolQ的机器人。当时CoolQ本身要使用Windows,即便有基于Wine的各种Docker容器可供使用,但对于性能较差的小鸡来讲还是负担不小,凑巧当时我还有精力拿Windows Server做Seedbox刷PT,就让自己的Hetzner独立服务器兼职做了QQ机器人。但不巧的是几个月后CoolQ就被腾讯干掉了,我群里的QQ机器人就此停摆。
最近几个月我一直沉迷《最终幻想14》,也是这段时间才后知后觉发现其实很多群里都已经有自己的QQ机器人,且现在常用的机器人框架如NoneBot、QQ支持库如go-cqhttp对性能的要求已经比先前低了很多,看起来在小鸡上运行不会有什么问题。于是我就给我所在的部队,利用闲置的甲骨文免费机器(相信各位应该都知道甲骨文给的x86架构的免费机器的性能大概是什么样的),重新做一下QQ机器人。
大致思路
前面已经说了,我想恢复QQ机器人的主要目的就是把它作为一个集成了FF14相关工具和其他一些娱乐功能的Bot,前者有一个比较成熟的框架叫做獭獭Bot(OtterBot),有现成的”獭窝“可以直接使用go-cqhttp接入;后者则需要使用NoneBot配合对应的插件自行搭建、缝合。
而将上述的机器人”大脑“连接起来并登录QQ进行发信的工具则是go-cqhttp,类似于当初CoolQ本体,而其他功能则类比CoolQ的插件。
本文中我们将先使用go-cqhttp接入QQ和獭獭Bot,完成后再使用NoneBot给自己的QQ机器人加一些娱乐功能。
使用go-cqhttp登录QQ并接入獭獭Bot
当前最适合低配置VPS的QQ运行库非go-cqhttp莫属,且安装简单,在其Github Release页面中下载对应的发行版和架构的安装包安装即可。我的VPS运行的是Ubuntu 20.04 x64,故下载AMD64的deb包,使用 dpkg -i
命令安装即可。
接入獭獭Bot
由于一些人恶意对獭窝DDoS攻击,故最近无法领养和使用獭窝。
因为我做这个QQ机器人主要原因就是使用FF14相关工具,所以我会接入獭獭Bot,直接按照 教程 进行领养即可,由于该教程使用的是Windows,所以在”正式领养“的Step2后,客户端选择go-cqhttp下载对应的配置文件,并在自己的电脑上根据自己的实际情况修改该文件。由于我们除了獭獭Bot之外还要接入自己的NoneBot,所以我们还要在该文件的最后面添加:
|
|
完成后,在该文件夹内使用命令 go-cqhttp
运行一下看是否能成功登录QQ(此时会出现 ws://127.0.0.1:8080 无法连接的报错,这是因为我们现在还没有部署自己的NoneBot机器人,所以可以忽视)。
检查是否有风控问题
腾讯有一些奇奇怪怪的风控机制,被风控的账号无法在群里发消息(私聊不会有问题),这时我们把机器人放到群里,使用任意命令看其是否能回应,如果不能,则有可能是被风控(此时终端内的log也会提示),如果有该问题,可以考虑编辑go-cqhttp运行目录下刚刚生成的 device.json
,并修改内容(使用一些Android手机信息生成器生成手机IEMI等信息,让它看起来更真实),同时删除 session.token
并重新启动go-cqhttp。如果还不行建议在go-cqhttp的 Github Issues 里面寻找答案。
如果没有问题的话,这时候我们可以暂时退出go-cqhttp,写一个简单的systemd守护进程,再开始部署NoneBot缝合想要的娱乐功能。
守护进程(Systemd)
编辑service文件 /lib/systemd/system/go-cqhttp.service
|
|
如果你不知道怎么使用systemd的话,可以参考下列命令:
|
|
使用NoneBot搭建并部署机器人
我的VPS环境是Ubuntu 20.04,apt
安装的Python为3.8,NoneBot要求至少使用Python 3.7.3 以上版本。
NoneBot是基于Python的可兼容多个聊天工具平台的机器人框架,而且使用非常简单,在有Python3的环境下使用pip安装即可,详细安装过程直接参考 官方文档 即可。需要一提的是,在Bot的目录内使用脚手架(即nb-cli
)安装插件时,程序可以自动编辑Bot配置文件把插件加载到其中,无需手动修改配置文件,故为了方便,第三方插件可以等到创建好Bot后再安装。
配置
由于我们在这里只将Bot作为QQ机器人使用,所以只需要安装OneBot这一个适配器即可,安装命令为 nb adapter install nonebot-adapter-onebot
。
安装好后找好准备存放Bot文件的目录(脚手架会帮你创建Bot文件夹),可以使用 nb create
开始创建Bot,具体流程可以查看 官方文档 ,在这里就不再赘述。因为我们是作为QQ机器人使用所以要在”适配器(Adapters)“的选择中选择OneBot。
创建完成后不要忘记编辑 .env
和 .env.*
(默认是 .env.dev
)以配置机器人框架,查看 以进行配置。
安装插件
到这里一个NoneBot的机器人框架就搭建好了,接下来可以按照自己的喜好安装插件,可以直接访问 官方商店 查看插件目录,挑选好自己喜欢的插件,直接点击”复制安装命令“,复制到终端内安装即可,非常方便(务必不要忘记查看对应插件的说明,获取详细配置信息)。
我自己的NoneBot机器人使用了以下几个插件,可以直接在NoneBot商店找到,直接使用脚手架安装,且配置都非常简单(大部分都不需要配置,开箱即用)。
|
|
此外,由于我是因为FF14兴起才打算恢复QQ机器人的,所以必然少不了FF14相关的插件,我目前给自己的Bot加了2个FF14相关组件:FF14占卜插件(onebot_Astrologian_FFXIV)和獭獭Bot,后者为独立的机器人框架且可以直接接入”獭窝“直接使用。
FF14占卜插件是没有加入NoneBot插件商店的,所以需要把该插件的源码下载到自己Bot目录下的 /[Bot名称或src]/plugins/
目录内,因为Bot默认会加载该目录下的插件所以无需再改配置文件,最后安装依赖 pip install pydantic
即可使用。
运行
插件配好后可以开始试运行了,在Bot目录下使用命令 nb run
即可,同时别忘了运行go-cqhttp(使用systemd或者新开一个终端窗口运行),运行没问题后记得试用自己插件的命令,查看是否有问题,如果有报错,则根据报错内容到对应插件的Github仓库寻找答案。
至此,NoneBot机器人就缝合好了,同样也写一个简单的Systemd守护进程方便后台运行。
编辑service文件 /lib/systemd/system/nonebot.service
|
|
如果你不知道怎么使用systemd的话,可以参考下列命令:
|
|
总结
至此,我们的基于獭獭Bot、NoneBot并使用go-cqhttp整合的QQ机器人就算是完工了,我把它放进了自己的亲友群和FF14的部队群里,尤其是色图推送和占卜插件,群友们用了都说好(乐。
顺便贴一张我和我女朋友在海都的合照(((