NoneBot 2 框架基本介绍
跨平台 Python 异步机器人框架 NoneBot 2 - a16 :官方地址
B5 : https://v2.nonebot.dev/docs/tutorial/register-adapter
NoneBot2 是一个可扩展的 Python 异步机器人框架,它会对机器人收到的事件进行解析和处理,并以插件化的形式,按优先级分发给事件所对应的事件响应器,来完成具体的功能。
除了起到解析事件的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制。对于命令处理,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。
得益于 Python 的 asyncio (opens new window) 机制,NoneBot 处理事件的吞吐量有了很大的保障,再配合 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,更是有质的飞跃。
简洁
提供极其简洁易懂的 API,使你可以毫无压力地开始验证你的绝佳创意,只需编写最少量的代码,即可实现丰富的功能。
易于扩展
精心设计的消息处理流程使得你可以很方便地将原型扩充为具有大量实用功能的完整聊天机器人,并持续保证扩展性。
高性能
采用异步 I/O,利用 WebSocket 进行通信,以获得极高的性能;同时,支持使用多账号同时接入,减少业务宕机的可能。
安装 NoneBot 第三方库
pip uninstall nonebot
(推荐安装方式) 通过脚手架安装
使用 pip 或 其他包管理工具 安装 nb-cli,nonebot2 会作为其依赖被一起安装
pip install nb-cli
(纯净安装) 不使用脚手架
pip install nonebot2
脚手架 nb-cli 创建项目
可以使用 nb-cli 或者自行创建完整的项目目录:
nb create
AweSome-Bot
├── awesome_bot (或是 src)
│ └── plugins
├── .env (可选的)
├── .env.dev (可选的)
├── .env.prod (可选的)
├── .gitignore
├── bot.py
├── docker-compose.yml
├── Dockerfile
├── pyproject.toml
└── README.md
awesome_bot/plugins
、src/plugins
: 用于存放编写的 bot 插件
.env
、.env.dev
、.env.prod
: 各环境配置文件
bot.py
: bot 入口文件
pyproject.toml
: 项目依赖管理文件,默认使用 poetry
通过 nb-cli
nb run [--file=bot.py] [--app=app]
或者
python bot.py
QQ 频道 安装适配器
Nonebot 插件商店:https://v2.nonebot.dev/store
常见运行错误
RuntimeError: Current driver ~fastapi doesn’t support forward connections!QQ Guild Adapter need a ForwardDriver to work.
基于 go-cqhttp 频道支持适配补丁
nb plugin install nonebot-plugin-guild-patch
nonebot-plugin-guild-patch 支持功能
正常接收并处理频道消息事件
支持字符串形式消息上报
支持数组形式消息上报
支持bot.send和matcher.send直接向频道发送消息
支持event.to_me以支持to_me规则
反向 WebSocket 连接
单纯运行 NoneBot 实例并不会产生任何效果,因为此刻 QQ 这边还不知道 NoneBot 的存在,也就无法把消息发送给它,因此现在需要使用一个无头 QQ 来把消息等事件上报给 NoneBot。
QQ 协议端举例
go - cqhttp (基于 MiraiGo)
onebot - kotlin
Mirai + onebot - mirai
Mirai + Mirai Native + CQHTTP
node-onebot (基于 abot, OICQ)
CQ 端配置:反向 WebSocket 连接
account:
uin: 机器人QQ号
password: "机器人密码"
message:
post-format: array
servers:
- ws-reverse:
universal: ws://127.0.0.1:8080/cqhttp/ws (cqhttp替换协议适配器的名称 例如 botv11 是 onebot/v11)
其中 ws://127.0.0.1:8080/cqhttp/ws
中的 127.0.0.1 和 8080 应分别对应 nonebot 配置的 HOST 和 PORT。
cqhttp 是前述 register_adapter 时传入的第一个参数,代表设置的 CQHTTPBot 适配器的路径,你可以对不同的适配器设置不同路径以作区别。