使用go-cqhttp搭建一个QQ机器人
前言
之前看到博客群里出现了很多机器人,感觉挺有趣的,并且github上有许多现成的框架和插件库,群友们也有相关的文章,于是便自己搭建了一个机器人,并添加了一些新功能。
相关项目和相关资料请参考参考项目及文章,在此对开源项目开发者和相关文章作者表示感谢。
此教程旨在以更简单并容易理解的方式使用go-cqhttp协议库和ZeroBot-Plugin插件合集搭建一个QQ bot(ATRI)。
注:由于源项目持续更新中,因此本教程可能会有错误;并未使用docker部署,如果需要请参考参考项目及文章。
准备条件
- linux服务器及相关知识
- golang 1.18或以上版本及相关知识
- ssh工具
- git
- 一个qq号 (建议小号)
- 会使用搜索引擎
以上环境请自行安装,后续操作默认已安装完毕。
如果你喜欢较为直观德观察bot运行状况,可以使用图形化界面。
开始配置
本文主要使用go-cqhttp协议库和ZeroBot-Plugin插件合集搭建,关于它们的简单介绍如下:
go-cqhttp: 基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现
ZeroBot-Plugin : ZeroBot-Plugin 是 ZeroBot 的 实用插件合集
简单地说,go-cqhttp协议库类似于bot的服务端,ZeroBot-Plugin插件则类似于bot的后台。
服务端可以向后台发送数据,并提供api供后台调用,以达到消息的发送和接收。go-cqhttp现已经实现大多数QQ功能,可查阅go-cqhttp 帮助中心
后台负责对bot接收的消息进行处理,通过编写各种功能的插件或者程序来实现各种的功能。(这意味着你并不一定要使用ZeroBot-Plugin,其他支持go-cqhttp服务的插件也可以搭建bot,也并不限制语言),本文使用的是基于go语言开发的ZeroBot-Plugin插件。如果你并不满足于它提供的功能,那建议自己添加。
搭建go-cqhttp
1、打开一个命令行/ssh,在你喜欢的位置新建一个文件夹bot,并下载go-cqhttp
最好使用v1.0.0-beta8-fix2后的版本,不然很可能出问题
1 | mkdir bot && cd bot |
2、解压并赋权
1 | tar -zxvf go-cqhttp_linux_amd64.tar.gz |
3、运行go-cqhttp(建议使用命令运行,而不是双击)
1 | ./go-cqhttp |
第一次运行时,首先根据需要选择通信方式,在这里选择正向http通信即可,然后会出现以下信息:
1 | [WARNING]: 尝试加载配置文件 config.yml 失败: 文件不存在 |
显然是让我们修改config.yml这个文件后再次运行go-cqhttp,将config.yml修改为如下内容:
1 | # go-cqhttp 默认配置文件 |
事实上,只需要配置uin 为你的bot的QQ账号和 post-format为Array,其他只需要保持默认(如果你知道如何修改)。
记住正向WS服务器监听端口为6700。
5、修改保存并重启go-cqhttp。
此时你可以向bot发送消息,bot会接收消息,并在终端显示。
确认无误后先暂时暂停终端。
搭建ZeroBot-Plugin
作者提供了三种搭建方式,分别是本地运行,github actions和可执行文件,但是我在尝试几次后发现使用github actions编译总是报错,这里我就采取本地运行方式,可执行文件方式在我搭建时并没有,可以自己尝试。
1、新开一个终端/ssh,新建一个文件夹ZeroBot,克隆项目
1 | git clone https://github.com/FloatTech/ZeroBot-Plugin.git |
2、修改ZeroBot-Plugin目录下的main.go
作者main.go文件已更新,下面代码仅作示例
1 | func main() { |
按注释修改,需要修改管理员账号,以及注意OneBot 正向WS 默认使用 6700 端口,与go-cqhttp正向监听端口一致。建议设置AccessToken。
确认以上无误后保存退出。
3、运行run.bat
1 | ./run.bat |
第一次运行时,将是一长串的代码编译和下载依赖过程,可能花费一段时间。
4、编译完成后保持此终端/ssh运行,然后打开之前运行go-cqhttp的终端/ssh,运行go-cqhttp:
1 | ./go-cqhttp |
会出现以下提示:
即代表成功运行bot!大功告成!
注:当go-cqhttp和ZeroBot-Plugin同时运行时并连接成功时才能保证bot正常运行。
Screen部署
Screen是什么就不多言了。在测试机器人成功运作后,我们就可以使用screen来进行部署,以免关掉ssh后机器人停止工作。
其实很简单,仅需创建两个screen窗口来分别运行cqhttp和ZeroBot-Plugins即可。
1 | screen -S cqhttp |
1 | screen -S zerobot |
参考项目及文章
再次感谢以下优秀的开源项目提供者🍭
Mrs4s/go-cqhttp: cqhttp的golang实现,轻量、原生跨平台. (github.com)
wdvxdr1123/ZeroBot: 一个基于onebot协议的机器人Go开发框架 (github.com)
FloatTech/ZeroBot-Plugin: 基于 ZeroBot 的 OneBot 插件 (github.com)