nonebot-QQ智障机器人(部署)

nonebot-QQ智障机器人(部署)

NoneBot ,利用 OneBot 实现的 Python 异步机器人框架。现在的版本已经是 v2了,要求 Python >= 3.7.3 ,通过插件化的形式,将消息分发到命令处理器和自然语言处理器,完成具体功能,拓展性挺强的。整一个玩玩,顺手写一个傻瓜式笔记记录。

开始

开始之前,确保 python 在3.7.3 以上,后续安装的是 v2 版本,所以先将原来的卸载了

1
pip uninstall nonebot

其他需要补充的前提

  • 了解 python 异步机制
  • 了解 PEP 484,NoneBot2 用此实现类型注解
  • 改进编辑器

编辑器我使用 VS code ,推荐也是使用这个。使用 pylance Language Server 并启用 Type Checkingbasic 模式以达到最佳开发体验。

VS code 配置插件 pylance、jupyter

配置虚拟环境

一般来说 venv 一个就行了,但是既然都开了大坑,干脆就把 Anaconda 也装上。

在 Ubuntu 安装 Anaconda ,首先在官网下载安装包,是 .sh 后缀的,依据文档进行校验安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#检验完整性
sha256sum /path/filename
bash /path/filename #一般为:~/Downloads/Anaconda3-2020.02-Linux-x86_64.sh
#重启终端,检查安装
conda version
#关闭终端默认自启的conda base环境
conda config --show | grep auto_activate_base
conda config --set auto_activate_base False
#进入base
source ~/anaconda3/bin/activate root
#退出,关闭终端重启或命令
conda deactivate
#查看环境
conda env list
conda info -e
#查看包列表
conda list
#启动anaconda
source ~/anaconda3/bin/activate root
anaconda-navigator

然后创建虚拟环境nonebot。

避免风控

一般来说,QQ机器人被tx风控是正常的事。据说不要经常群发、链接、图片。还有建议不要太嘲讽,把机器人部署到腾讯云里。反正我反手把QQ塞到挂号平台开一个月刷刷活跃,服务器也是自己组的,部署运行几天看看。

安装

一般还是装个脚手架比较方便。

1
2
3
4
pip install nb-cli
# 纯净安装无脚手架
pip install nonebot2
poetry add nonebot2

驱动器安装

文档说默认内置 fastapi 服务端,一般来说是不够的。

1
2
3
4
5
6
# 查看驱动器列表
nb driver list
# 安装
nb driver install <driver>
# or use pip to install
pip install <driver>

或者去NB2商店复制安装驱动器。

协议适配器

同样地,NB2商店也可以直接装。

1
2
3
nb adapter list
nb adapter install <adapter>
pip install <adapter>

第三方插件

同样,

1
2
3
nb plugin list
nb plugin install <plugin>
pip install <plugin>

go-cqhttp

下载最新的 Release,解压并初始化(运行go-cqhttp),开启自动配置,以 ubuntu 为例

  • 解压目录下(建议放到机器人目录),打开终端,./go-cqhttp 执行命令,选择“反向 Websocket 通信”,等待初始化 config.yml
  • 配置 config.yml ,更改帐号,不需要填密码,设置反向 ws universal 的地址。为:ws://127.0.0.1:port/onebot/v11/ws
  • 文件说明:device.json 保存设备信息,务必不要删除,go-cqhttp:用于启动程序,session.token:QQ登录服务器后产生的token,后续不用再次扫码。如果以后登录不上,删除后重新扫码登录。

创建项目

到目标目录下,激活虚拟环境

1
2
conda info -e
conda activate <env_name>

创建项目

1
2
3
4
5
6
7
8
9
10
nb creat
# ValueError: Unknown scheme for proxy URL URL('socks ...
# 有可能是v2ray的代理设置导致的,先关闭,清空代理,项目创建完再重启v2ray
env | grep -i proxy
unset ALL_PROXY
unset all_proxy
# 正常进入就是设置项目名称等参数的界面,选择插件存放位置,然后选择echo,选择onebot v11完成创建
#完成后进入项目目录,如awesome-bot
nb run
#一切正常即可退出。

之后的启动在目录下,不要遗漏激活虚拟环境

1
2
3
4
5
nb run
# or
python bot.py
# activate
conda activate nonebot

目录结构

  • bot/pluginssrc/plugins: 用于存放编写的 bot 插件
  • .env.env.dev.env.prod: 各环境配置文件
  • bot.py: bot 入口文件
  • pyproject.toml: 项目插件配置文件
  • Dockerfiledocker-compose.yml: Docker 镜像配置文件

配置

.env 文件内设置使用 devprod 的配置,随便哪个都行。

对应的配置文件如下

1
2
3
4
5
6
HOST=127.0.0.1	#配置监听的IP/主机
PORT=xxxxx #同GOCQ的config内的端口,监听的端口
SUPERUSERS=[] #超级用户
NICKNAME=["", ""] #昵称
COMMAND_START=["/"] #命令起始符
COMMAND_SEP=["."] #命令分隔符

初次调试

  • 环境配置完成后,命令行执行 nb run 或者在 IDE 内以非调试模式运行,但不建议。

  • nonebot 开启后,到gocq目录下执行 ./go-cqhttp 以打开 gocq 。

  • 一般来说上述两步执行完就完成 hello world 了。打开QQ对机器人发送信息 /echo hello world ,有正常回复就算完成了初始化搭建。

参考

GitHub NoneBot

GitHub go-cqhttp

NoneBot v2 Docs

go-cqhttp quick_start

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

NB2商店

well404的博客

作者

ivy

发布于

2022-01-05

更新于

2023-03-25

许可协议

CC BY-NC-SA 4.0

评论