基于go-cqhttp和NoneBot2的QQ机器人实现

QQ机器人介绍

什么是QQ机器人

QQ机器人,简单来说就是为某个QQ号添加监听聊天信息的功能,该QQ号自动根据聊天信息触发相应的回复。

QQ机器人实现原理

机器人的基本结构分为前台监听后台处理两部分。

通过前台机器人监听聊天信息判断是否需要调用后台服务,如果触发关键词,则调用后台服务;后台根据关键词启动相应的服务并返回结果给前端机器人,前端机器人将该结果发送出去。

🏠以餐馆类比,餐馆(QQ群)中顾客(群成员)在聊天过程中呼叫服务员(机器人)或者提出上菜服务(触发关键词),服务员将需求转达后厨(后台处理),后厨将做好的菜品(处理完成的结果)交给服务员并由服务员交给顾客(机器人发送至群聊)。

QQ机器人发展过程

以酷Q、晨风为代表的的机器人框架曾经是QQ机器人繁荣发展的代表。

2020年8月开始,腾讯对第三方机器人进行封锁,第三方QQ机器人逐渐没落。

之后腾讯逐渐推出官方的QQ机器人。第三方QQ机器人的使用有着被腾讯风控的风险。

如何看待近期大量的第三方QQ机器人停止运营? - 知乎 (zhihu.com)

QQ 机器人 | QQ机器人文档

QQ机器人可用框架汇总(持续更新) - 哔哩哔哩 (bilibili.com)

写在前面

因此,现在QQ机器人的发展及使用场景并不理想,现存的一些收费提供服务的机器人对于小群主来说并不划算。本文也是基于兴趣,参照教程对搭建过程进行了一些探索而已。

如果你需要功能完善的QQ机器人服务,请寻找相应的机器人提供商。

😄如果你想了解QQ机器人基本原理或动手尝试实现基本的功能,请继续看下去。

基于go-cqhttp和NoneBot2的QQ机器人实现

该部分参考B站 Well404 系列视频【零基础搭建QQ机器人】

环境要求

❗ ❗ Python3.8或以上版本

⚠️ 其他要求:准备一个QQ小号,避免风险控制对QQ大号造成影响。

💖最好有代码编辑器,推荐Vscode

文件目录结构

该项目文件结构如下:

1
2
3
4
Qrobot
--bot # 手动创建文件夹,代表一个机器人,文件夹名自拟
---gocq # 手动创建文件夹,相当于机器人前台,文件夹名自拟。登录机器人QQ,获取接收到的信息,以及把信息传入nonebot
---nb2 # 后面会自动创建,相当于机器人后台配置。添加各种功能、插件
1-Q-Robot项目文件目录

前台搭建

下载go-cqhttp

go-cq-http项目中找到与系统适配的文件下载到gocq文件夹中

2-下载go-cqhttp

运行go-cqhttp_windows_amd64.exe

所有弹窗提醒选择确定即可。运行完毕得到go-cqhttp.bat文件

3-得到go-cqhttp.bat文件

运行go-cqhttp.bat

选择 3 "反向 Websocket 通信",得到 config.yml配置文件,之后关闭窗口即可。

4-运行go-cqhttp.bat文件并选择反向Websocket

5-得到配置文件

进行前台相关配置

打开config.yml,手动更改下面两条:

1
2
3
4
5
...
uin: XXX # 把哪个QQ号作为机器人
...
universal: ws://127.0.0.1:这里是端口号/onebot/v11/ws/ # 端口号10000~50000之间随机设置一个
...

生成前台相关文件

1)运行go-cqhttp.bat,等二维码出现后,使用要做机器人的QQ扫码登录。

⚠️注意在二维码出现前提前将窗口高度拉开,为二维码显示留出足够的空间。

⚠️若未能成功扫码,删除多出来的文件,仅保留上一步得到的三个文件,再次运行即可。

6-扫二维码登录

2)等程序稳定(反复出现:开始尝试连接到…连接到反向…),证明登录完成,此时在gocq文件夹下会自动生成相关文件。

7-登录前台并完成配置 8-前台文件

文件说明:

data:程序相关

logs:程序日志

config,yml:相关配置文件

device.json 保存设备信息,务必不要删除

go-cqhttp.bat:用于启动程序

go-cqhttp.exe:启动后运行的程序

session.token:QQ登录服务器后产生的token,后续不用再次扫码。如果以后登录不上,删除后重新扫码登录。

后台搭建

安装NoneBot第三方库命令行工具nb-cli

python 安装第三方库nb-cli

1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nb-cli

NoneBot是一个现代、跨平台、可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持。

需要注意的是,NoneBot2 仅支持 Python 3.7.3 以上版本

生成后台文件

1)在文件夹bot中,打开Windows PowerShell

9-打开PowerShell

2)输入 nb create ,开始生成机器人

各项填写内容如下:

(1)Project Name

输入后台文件夹的名字 如:nb2

(2)Where to store the plugin?

⬇️选择第二个 In a "src"folder回车提交

该选项会创建src/plugin文件夹,用于存放个人插件

(3)Which builtin plugin(s) would you like to use?

空格选择第一个 echo回车提交

该选项会创建一个内置插件

(4)Which adapter(s) would you like to use?

空格选择第一个 OneBot V11回车提交

该选项会选择OneBot 作为适配器

10-创建后台选项

等待安装完成,生成名为nb2的文件夹,即为生成的机器人后台文件

11-生成后台文件夹

进行后台相关配置

1)进入nb2文件夹,打开.env,更改配置为

1
ENVIRONMENT=prod # 设置后台运行时 环境配置文件 的路径 => 此处代表同级目录下的.env.prod文件

2)打开.env.prod,清空内容并粘贴如下配置

1
2
3
4
5
HOST=127.0.0.1 # 配置 NoneBot 监听的 IP/主机名
PORT=53245 # 配置 NoneBot 监听的端口 必须与config.yml中设置的端口号相同!!
SUPERUSERS=["机器人管理员的QQ号"] # 配置 NoneBot 超级用户(哪些QQ可以管理该机器人)
NICKNAME=["bot"] # 配置机器人的昵称,可以设置多个
COMMAND_START=["/"] # 配置命令起始字符 以"/"开头表示对机器人发指令

运行后台服务

有两种方法启动后台服务

1)在 nb2 目录下 使用python执行bot.py文件

12-Python运行bot.py文件

程序不报错且能看到相应的端口号即为运行成功:

13-Python成功开启后台服务

2)在nb2文件夹下打开 PowerShell 并输入nb run

14-nb命令运行后台服务

测试机器人

开启服务

1)在gocq文件夹下运行go-cqhttp.bat,开启前台服务(不关闭)

2)在nb2文件夹下开启后台服务(不关闭)

⭐后台服务显示连接已打开,前台服务不再刷新信息,说明前后台已成功开启。

15-开启前后台服务

私聊测试

QQ机器人的好友直接在聊天框中输入 /echo123 并发送

16-私聊测试

echo插件是后台安装时内置的插件,作用是重复内容,/echo是触发该功能的关键词

群聊测试

在群聊中@机器人并输入 /echo123

17-群聊测试

机器人自动回复,证明配置成功

安装插件

在NoneBot2插件商店中提供了多种插件,安装相应插件即可使用对应的功能。

选择插件

商店页面选择想要的插件,查看安装及使用方法。

人生重开模拟器为例:

点击右上角进入插件Github页面

18-选择插件

查看插件安装及使用方法

19-插件介绍

安装插件

1)CTRL + C退出服务器后台服务

2)执行安装代码

1
nb plugin install nonebot_plugin_remake
20-安装插件

⚠️若提示出错,无法连接,看看是不是开了梯子,安装时记得关掉。

使用nb 或者pip 两种方式均可安装,推荐使用nb

nb 方法会直接将该插件加载到插件列表中,不需要进一步更改相关文件

⭐目前nb及pip方法安装插件均再需要更改bot.py文件(🕓2022-03-31)

3)重新开启后台服务

1
nb run

4)测试插件

21-测试插件

linux系统部署

视频最后一节部署至linux也已成功实现(Centos 7.6 64bit),过程不再叙述,请移步视频。过程中遇到的问题及解决方案如下:

安装screen

1
yum install screen

screen相关操作:

Centos screen的安装与使用_zhipengit的博客-CSDN博客_centos screen

linux(ubuntu/centos)下Screen退出方法-退出后继续运行、查看进度-陈新明博客 (chenxm.cc)

更新Python

Linux CentOS升级Python 3.7版本方法 - 简书 (jianshu.com)

安装插件过程中报错 _ssl

Python3.X安装后 pip3报错 ModuleNotFoundError: No module named ‘_ssl’_Liv2005的博客-CSDN博客