使用Nonebot2和Gocq搭建QQ机器人并部署到服务器
配置机器人
QQ机器人的基本架构
这里引用一个看到过的例子:
在一个餐馆中,你点了一盘菜。此时会发生什么事情呢?
1、服务员接受你点的菜
2、服务员把你点的菜告诉大厨
3、大厨进行一个烹饪
4、服务员把菜端到你桌上
在一个QQ机器人中,go-cqhttp
就类似于一个服务员,负责接收消息、把消息传达给nonebot2
、发送消息。而nonebot2
就相当于一个大厨,负责“思考”对消息该做出什么反应。
那么go-cqhttp
如何将消息传达给nonebot2
呢?
这里我们使用的是反向websocket
连接:go-cqhttp
会主动寻找nonebot2
的程序,并将消息通过websocket
推送给nonebot2
。当然,如果你只是想要做出一个QQ机器人,你可以不需要深入了解该通信方式。
准备
我们需要:一个云服务器,nonebot2,go-cqhttp
由于nonebot2是基于python3.7+的,所以我们还需要配置一个python。
我推荐在服务器上执行命令前先使用sudo -i
切换到管理员账户来避免一些麻烦
安装系统镜像&python
首先你需要一个云服务器,并安装系统镜像。我这里选用的是Ubuntu20.07
系统镜像,因为Ubuntu20.07
自带一个Python3.8.10,可以省去python的配置步骤。
这一步按理来说是可以一键完成的,起码腾讯云和阿里云都有一键安装的入口。
安装nonebot2
执行以下命令:
|
|
如果找不到库的话,可以试试换源:
|
|
安装go-cqhttp
下载go-cqhttp
在go-cqhttp的Release页面找到go-cqhttp_linux_386.tar.gz
并下载。
或者直接点击这里下载。
这里下载的是适用于Linux的32位go-cqhttp
,如果你是64位,请找到并下载go-cqhttp_linux_amd64.tar.gz
将go-cqhttp上传至服务器
这里使用宝塔Linux面板辅助上传。宝塔yyds。
这是宝塔官网,可以在上面找到对应系统镜像的安装脚本:https://www.bt.cn/download/linux.html
如果你和我一样使用Ubuntu,直接执行以下命令吧:
|
|
执行完成后在服务器上执行bt
来配置用户名和密码。
执行/etc/init.d/bt default
查看面板入口,一般是你的ip:8888/xxxxxx
的形式并访问,用你刚刚的用户名密码登录。
配置好宝塔之后,点击左边菜单栏中“文件“即可进行文件管理、编辑和上传。
我们在根目录新建一个/bot
文件夹,上传go-cqhttp并解压。
如果你的宝塔并没有帮你解压成功,你可以在服务器上执行以下命令:
|
|
或者你也可以解压完之后再上传,反正也没有几个文件。
至此,我们需要的东西就准备好了。
配置
配置go-cqhttp
先跑一下。
|
|
出现:
|
|
输入3然后按回车,此时我们就会发现go-cq的文件夹里生成了一个config.yml
,编辑并修改以下几处:
我这里是直接用宝塔进行的编辑,我也推荐各位直接使用宝塔。
|
|
把uin
改为bot
的QQ账号。不建议填写password,在不填写password时第一次将会使用扫码登录,可以避免密码登录造成的一些问题(比如滑块验证)。
|
|
此处把xxxx替换为端口号其他不变。不建议使用会冲突的端口号,建议从5000-65535
取值。随意填一个数就行。
此时你可以试着运行一下go-cq
|
|
如果你看到这个:
|
|
说明你成功啦!
配置nonebot2
你需要新建一个文件夹给nonebot2
。不推荐使用中文文件夹名字。这里同样使用宝塔完成操作。
新建一个bot.py
,写入以下代码:
|
|
在相同目录下创建.env
文件,写入以下内容:
|
|
其中PORT
修改为刚刚你在go-cq
配置过程中输入的端口号。
COMMAND_START
字段是命令的起始符号,以该符号开头的将会被识别为”命令“被处理。我一般喜欢使用"",即所有文字都被nonebot接收并处理。
然后我们在该目录下新建一个src
文件夹,在src
内再新建一个plugins
文件夹。这里就是你存放你写的nonebot2
插件的地方啦。
运行机器人
没意外的话到这里我们的机器人就已经准备好了,直接开始运行吧!
在服务器上,以腾讯云为例,每次按”登录“只会打开一个界面。但我们需要运行两个程序。咋办呢?
首先执行:
|
|
重新打开,执行:
|
|
重新打开,执行:
|
|
这个时候你应该看到有两个进程正在运行。
用QQ给你的机器人发送:/echo Hello_World!
收到机器人的回复了!至此我们的机器人就算配置完毕了。
编写插件-实现你想要的功能
先鸽了。