2024年使用nonebot2+go-cqhttp搭建QQ机器人
范例环境:
Linux Ubuntu 18.04.6 LTS
Miniconda python 3.10.9
Java openjdk 11.0.19
unidbg-fetch-qsign v1.1.9
go-cqhttp v1.2.0
nonebot2 v2.1.3
安装配置
先搞一台能够长期运行的服务器,还是建议使用 Linux,本文也是基于 Linux 做讲解
nonebot2 需要 python3.8+ 环境
建议 nonebot2 安装在虚拟环境里面,如果不熟悉怎么构建 python 虚拟环境的话,可以从简单的 conda 上手,参考我之前写的文章:在Linux平台安装使用Anaconda
qsign 需要 Java 环境,如果 qsign 内存总爆,尝试换 jdk11, 别用 openjdk
建议为 bot 创建一个目录,后面的程序都放在目录里
mkdir ~/bot/ && cd ~/bot/
unidbg-fetch-qsign
这是签名服务器程序,用来解决腾讯的风控问题,因为原仓库已经光荣牺牲了,所以资源都是最新版 v1.1.9 的存档
命令参考:gocqhttp-qqsign
Windows用户可以看看这个一键工具:qsign-onekey
为unidbg-fetch-qsign
创建一个目录
mkdir ~/bot/unidbg-fetch-qsign/ && cd ~/bot/unidbg-fetch-qsign/
下载unidbg-fetch-qsign-shell或者gocqhttp-qqsign分享的:
wget https://github.com/CikeyQi/unidbg-fetch-qsign-shell/releases/download/1.1.9/unidbg-fetch-qsign-1.1.9.zip
或者
wget https://gitee.com/changwenpeng/gocqhttp-qqsign/releases/download/qsign-1.1.9/unidbg-fetch-qsign-1.1.9.zip
解压:
unzip unidbg-fetch-qsign-1.1.9.zip
进入程序运行目录:
cd unidbg-fetch-qsign-1.1.9
在 txlib 找到一个合适的QQ版本,查看配置文件,以 8.9.83 举例:
nano txlib/8.9.83/config.json
默认的ip应该是0.0.0.0
,端口8080
,key114514
,不想改可以不改,但这三个参数要记住,配置 go-cqhttp 的签名服务器的时候要用
写完之后,Ctrl+X
退出,y
保存,回车
尝试启动:
./bin/unidbg-fetch-qsign --basePath=txlib/8.9.83
没有执行权限的话就
chmod +x ./bin/unidbg-fetch-qsign
没有问题的话就Ctrl+C
退出,把程序挂到后台运行:
nohup ./bin/unidbg-fetch-qsign --basePath=txlib/8.9.83 > nohup.out 2>&1 &
go-cqhttp
为go-cqhttp
创建一个目录
mkdir ~/bot/go-cqhttp/ && cd ~/bot/go-cqhttp/
在go-cqhttp/releases找到适合你系统的发行版,复制链接
找不到的话记得点一点
Show all
下面链接替换成你需要的
wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.2.0/go-cqhttp_linux_386.tar.gz
解压
tar -xzf go-cqhttp_linux_386.tar.gz
运行go-cqhttp
来生成配置文件:
./go-cqhttp
需要的通信方式选择反向 Websocket 通信,输入3
,然后按Ctrl+C
退出
编辑配置文件(使用PageUp或PageDown进行翻页):
nano config.yml
填写机器人的账号和密码
填写签名服务器字段,也就是unidbg-fetch-qsign
的txlib/8.9.83/config.json
里面的参数(前面使用默认值的话,那这里也像图里一样写就行)
填写反向代理服务器字段(也就是nonebot2的地址,后文会进行配置)
写完之后,Ctrl+X
退出,y
保存,回车
尝试启动:
./go-cqhttp
没有问题的话就Ctrl+C
退出,把程序挂到后台运行:
nohup ./go-cqhttp > nohup.out 2>&1 &
nonebot2
现在要进入虚拟环境,如果没有使用虚拟环境,请确保已经卸载可能存在的 NoneBot v1!!!
pip uninstall nonebot
安装脚手架:
pip install nb-cli
创建项目:
nb create
选择bootstrap (初学者或用户)
,回车
然后给你的 bot 取名,假设我们取的名字是rian
接下来的选项,使用空格选择或取消,选完之后按回车提交
适配器adapter选择Onebot V11
,回车
驱动器driver选择FastAPI
,回车
后面两个都回答y
,回车
内置插件选择echo
,回车
进入bot目录:
cd rian
编辑dotenv 配置文件
(安装了插件之后,插件的变量也是写到这里):
nano .env.prod
范例:
DRIVER=~fastapi
HOST=127.0.0.1 # 反向代理的ip,对应go-cqhttp的config.yml的反向代理服务器字段
PORT=8181 # 反向代理的端口,对应go-cqhttp的config.yml的反向代理服务器字段
SUPERUSERS=["123123"] # 超级管理员的QQ号
COMMAND_START=[""]
# 插件的变量写到这里
更多关于
dotenv 配置文件
的信息,请查阅官方文档的配置
尝试启动:
cd rian
nb run --reload
没有问题的话就Ctrl+C
退出,把程序挂到后台运行:
环境变量更新或插件更新需要手动重启,安装新插件会自动重载
nohup nb run --reload > nohup.out 2>&1 &
使用说明
后台进程管理
unidbg-fetch-qsign
和go-cqhttp
就放在后台持续运行即可,如果出了什么问题,可以到程序运行的目录下查看nohup
生成的运行日志:
cat nohup.out
要杀掉nohup启动的后台进程,要查询进程id:
ps -aux | grep go-cq
如图,1152
就是 go-cqhttp 的进程id(unidbg-fetch-qsign名字会比较长,要往上翻翻)
杀死进程:kill -9 1152
查看端口占用情况:
lsof -i:8080
安装nonebot2插件
在插件商店找到你要的插件,点击卡片右上角的展开
安装命令可以一键复制:
一般来说,注意事项和使用方法,以及要配置的环境变量都会写在插件 Github 仓库的 Readme 里面:
安装配置完成之后,需要重启nonebot2
更多关于
插件
的信息,请查阅官方文档的安装插件
go-cqhttp异常
如果 go-cqhttp 无法正常启动,可以参考 go-cqhttp 配置说明的设备信息来修改device.json
中的protocol
字段,建议使用不常用的设备,比如 iPad 或 aPad,不要造成登录冲突
或者可以参考gocqhttp更换版本协议方法
- 项目
unidbg-fetch-qsign-1.1.9/txlib/协议版本
文件夹内有版本协议文件,android_pad.json,android_phone.json
将这俩文件复制到go-cqhttp
生成的data
文件夹下的versions
文件夹中
然后改名:android_pad.json需改为gocqhttp对应协议6.json,android_phone.json需改为需改为gocqhttp对应协议1.json
改完名字后路径为:gocqhttp/data/versions/1.json,gocqhttp/data/versions/6.json- 更改
device.json
文件内protocol
的参数,放进去的是1.json
就改为1
放进去是别的x.json
就改为x
, 这里的x
为数字- 启动
qqsign
- 如果失败清空
data
目录并重试,versions
文件夹可以保留;
device.json
需要启动一次gocqhttp
,会自动生成
本文作者:korin5
本文链接:https://www.cnblogs.com/korin5/p/17964333
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步