0 前言

由于公众号的一些业务需要,以及大二的时候需要在新生群帮新生解答问题以及管理群聊,先后用过很多QQ机器人程序

Xposed模块QQ机器人
Windows程序CoolQ

现在上面这两种都已经gg了

QQ官方也出了几个(非常不好用的)官方机器人

现在好像在内测QQ官方机器人的开发者接口(不用报什么希望)

这几天在网上找了好多资料,这些关键词对你入门可能会有帮助:go-cqhttp、mirai、MiraiGo、Nonebot2

目前我在用的程序

1 系统环境

Nonebot2的Python环境:3.7 以上

之前年少无知的我选择在服务器上安装了CentOS 7,系统的Python版本只有2.7.5...
升级Python版本、改系统环境...太多痛了,最后把系统搞崩了,不过还好我有前几天的快照
别管你是不是要部署Nonebot2,还是别用CentOS了,而且它也要停更了

我的系统环境:Ubuntu 20.04 LTS(Py3.7.9)

2 安装go-cqhttp

以下配置均是Linux版本的说明,Windows 下配置类似。

如果遇到任何困难,查官方文档一定是个好办法

安装 go-cqhttp

go-cqhttp 文档: https://docs.go-cqhttp.org/guide/
go-cqhttp 下载地址:https://github.com/Mrs4s/go-cqhttp/releases

选择你合适的版本,并将 go-cqhttp 上传到你的服务器上(使用SSH工具或BT面板都可以)

go-cqhttp下载地址
go-cqhttp下载地址

我这里将 go-cqhttp 上传到 /root/cqhttp

进入到go-cqhttp 目录下面

cd /root/cqhttp

给权限,该行命令执行成功不会输出任何信息

chmod 777 go-cqhttp

运行go-cqhttp,如果没有执行上面一条命令则提示./go-cqhttp: 权限不够

./go-cqhttp

Nonebot2需要使用反向Websocket,这里我们直接输入3然后回车

如果你还想同时配置QQbot框架,可以输入123可以生成三种协议来使用

生成配置
生成配置

然后我们就能看到cqhttp目录下面多出来一个config.yml文件

修改 config.yml 文件

第4行和第5行分别是QQ的账号密码,没什么用 直接删除就行了

账号密码
账号密码

再往下,会看到反向WS设置的配置

  # 反向WS设置
  - ws-reverse:
      # 反向WS Universal 地址
      # 注意 设置了此项地址后下面两项将会被忽略
      universal: ws://your_websocket_universal.server
      # 反向WS API 地址
      api: ws://your_websocket_api.server
      # 反向WS Event 地址
      event: ws://your_websocket_event.server
      # 重连间隔 单位毫秒
      reconnect-interval: 3000
      middlewares:
        <<: *default # 引用默认中间件

修改为以下内容

  - ws-reverse:
      universal: ws://127.0.0.1:8080/cqhttp/ws
  # 重连间隔 单位毫秒
    reconnect-interval: 3000
    middlewares:
        <<: *default # 引用默认中间件

其中 ws://127.0.0.1:8080/cqhttp/ws 中的 127.0.0.1 8080 应分别对应 nonebot 配置的 HOST 和 PORT。

如果你的nonebot安装在另一台服务器上,请把127.0.0.1修改为另一台服务器的IP(我就是在这一步没有配置好,导致一直连接失败)

配置完成,运行go-cqhttp

./go-cqhttp

会输出二维码,用登陆机器人账号的手机QQ 扫一扫登录

此时 go-cqhttp 就配置完成了,

3 安装Nonebot2

Nonebot2文档: https://v2.nonebot.dev/guide/

(推荐)使用Virtualenv创建Python虚拟环境(也可以使用poetry创建)

安装virtualenv

pip install virtualenv

创建虚拟环境,名称(nonebot)可以自己随意设置

virtualenv nonebot

进入虚拟环境文件夹

cd nonebot

激活环境,进入虚拟环境

source ./bin/activate

通过脚手架安装

使用 pip 或 其他包管理工具 安装 nb-cli,nonebot2 会作为其依赖被一起安装

pip install nb-cli

4 创建机器人

创建一个空项目

nb create

根据引导进行项目配置,完成后会在当前目录下创建一个项目目录

输入项目名称 我这里输入了qqbot
使用 ↓ 选择src文件夹
输入 y 回车
按下空格键选择cqhttp(注意变色才是选中),回车

修改机器人的项目配置

修改qqbot文件夹中的 .env中内容

ENVIRONMENT=dev
CUSTOM_CONFIG=common config

修改.env.dev为:

HOST=0.0.0.0
PORT=8080
DEBUG=true

修改.env.pord为:

HOST=0.0.0.0
PORT=8080
SECRET=
ACCESS_TOKEN=

上述文件中的PORT要和go-cqhttpconfig.yml文件中反向WS端口相同

在项目文件下使用命令行输入下述命令即可运行

nb run

由于我使用了虚拟环境需要使用下述命令先进入虚拟环境才能运行

sudo -i
cd nonebot
source ./bin/activate
cd qqbot
nb run

运行成功则会显示如下类似日志

5 检查 Nonebot2 和 go-cqhttp 是否通信成功

[2021-12-06 17:17:57] [INFO]: 开始尝试连接到反向WebSocket Universal服务器:  
[2021-12-06 17:17:57] [INFO]: 正在检查更新. 
[2021-12-06 17:17:57] [INFO]: 已连接到反向WebSocket Universal服务器 

试试你的机器人是不是正常的

/echo 你好,世界

你好世界
你好世界

6 后台运行

上面的是前台运行,如果你操作其他命令或者关闭ssh 工具,程序自然就关闭了

在检查一切正常之后,就可以使用命令进行后台启动了

分别进入对应的目录来分别执行下述命令

后台运行go-cqhttp

nohup ./go-cqhttp &

后台运行Nonebot2

nohup nb run &

在对应的文件夹下会生成nohup.out文件,这里存放运行的日志,可以用来查看是否正常运行

如果你想配置更多内容,可以查看Nonebot2和go-cqhttp的官方文档来进行配置。

7 使用 Nonebot2 插件

Nonebot2 插件商店:https://v2.nonebot.dev/store.html

还有一些商店没有收录的插件,你可以在GitHub中查找