NoneBot2搭建官方QQ机器人-简单易上手
本文是使用最新版使用NoneBot2(2.4版本) + 官方QQ 频道/群聊 机器人(需要在QQ 开放平台申请创建机器人)。
简介
本文是使用最新版使用NoneBot2(2.4版本) + 官方QQ 频道/群聊 机器人(需要在QQ 开放平台 申请创建机器人)。
欢迎来交流(QQ群号:710101225)
涉及文档:
NoneBot开发文档、QQ官方注册文档
准备步骤(基于你已经安装了 python)
NoneBot 仅支持 Python 3.9 以上版本(具体版本请参考官网),目前我使用的是 3.12版本
-
一、安装 NoneBot 与创建项目
### 参考快速上手 | NoneBot
使用powershell 安装并创建Nonebot项目
在你想创建项目的地方 右键菜单 点击在终端打开 打开powershell
安装 pipx
python -m pip install --user pipx
python -m pipx ensurepath
安装脚手架
pipx install nb-cli
安装完成后 输入 nb 出现以下界面 为安装成功
使用脚手架来创建一个项目:
输入 nb
选择创建一个 NoneBot 项目
模板选择bootstrap(初学者或用户)
输入你要创建的项目名称
选择适配器
选择 QQ(QQ官方机器人)
选择适配器
HTTPX、websocket
立刻安装依赖、创建虚拟环境都填 y
等待安装完成
选择内置插件 选择echo
根据他的提示启动机器人
此时发现已经启动完成了,安装和创建项目就完成了
-
二、注册 官方QQ机器人QQ 开放平台
这里不过多赘述,请参考官方注册流程
注册完成后
进入管理端
资料提交成功后,即会生成
appid
,点击对应的应用即可跳转管理端。
进入管理端 点击沙箱配置
按需配置(需要自己提前创建 测试用QQ群和测试用频道 你必须是该群的群主或者管理员)
然后就可以在对应QQ群或频道中选择到该机器人(请在手机QQ中添加 PC版不支持选择)
我是配置了QQ群和频道 管理员选择自己的qq号
开发设置
这里可以看到 机器人的相关参数设置
AppSecret 首次需要手动生成 请务必保存好,因为生成之后只能查看一次
IP白名单设定 这个就是你本机IP ,建议使用 本机IP去查询
把这个IP放到你的IP白名单(注:IP并不是一成不变,所以你的QQ机器人服务启动后@无响应的话 并且报 ip地址错误 那就是IP地址变化了 需要重新设置 IP地址白名单)
-
-
三、修改NoneBot配置
- 使用IDE工具打开项目 我这里是使用 Pycharm (看个人喜好)
2. 修改 .env.prod 文件 具体参考 nonebot-adapter-qq · PyPI
然后自行替换QQ 的id、token、secret 具体参考本文档 的 QQ机器人的开发设置
use_websocket : 请务必设置成 true ,因为nonebot是 websocket 心跳连接
3.在项目文件夹中创建一个 bot.py
文件,并写入以下内容:
import nonebot
from nonebot.adapters.qq import Adapter as QQAdapter
nonebot.init()
driver = nonebot.get_driver()
driver.register_adapter(QQAdapter)
nonebot.load_builtin_plugins('echo', 'single_session')
nonebot.load_from_toml("pyproject.toml")
if __name__ == "__main__":
nonebot.run()
4.运行机器人
点击运行 会发现报错 跑不起来
这是因为httpx 的最新版本需要通过 transport 参数传递代理设置。因此,当前报错的原因是 httpx.AsyncClient 不再支持直接通过 proxies 参数传递代理。所以我们需要把这个参数给注释掉
找到 左边 .venv依赖下的 Lib
Lib下的site-packages
点击打开 找到 nonebot
找到nonebot 包下的 drivers
drivers包下的 httpx.py 打开
ctr+f 搜索 proxies 并把这个参数注释掉
这时候在启动,会发现可以启动了 并且 控制台打印出 已经连接上 QQ机器人
-
四、测试连通
打开QQ @机器人 使用内置测试插件 echo
可以看到机器人已经连通并且已经回复消息
五、简单示例(示例来源于NoneBot官方示例 事件处理 | NoneBot)
创建自己的插件位置 建立 weather.py 文件
编写 weather 插件
from nonebot.rule import to_me
from nonebot.plugin import on_command
weather = on_command("天气", rule=to_me(), aliases={"weather", "查天气"}, priority=10, block=True)
@weather.handle()
async def handle_function():
# await weather.send("天气是...")
await weather.finish("天气是...")
配置插件位置(插件路径配置参考)
打开 pyproject.toml 配置文件在这写上自己的 插件文件夹路径
然后 重启机器人
输入 插件编写的关键词
现在简单的搭建机器人及其简单的用法到这就结束啦

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)