首页 > Python资料 博客日记
Python聊天机器人-NoneBot2入门(2024新版)
2024-09-18 12:00:04Python资料围观118次
1. NoneBot2 安装与使用
NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架(下称 NoneBot),它基于 Python 的类型注解和异步优先特性(兼容同步),能够为你的需求实现提供便捷灵活的支持。同时,NoneBot 拥有大量的开发者为其开发插件,用户无需编写任何代码,仅需完成环境配置及插件安装,就可以正常使用 NoneBot。
参考:
1) NoneBot2的安装与配置
脚手架安装(官方推荐)
安装完成后可以用固定的机器人
pip install nb-cli
- 一键创建项目
nb create
根据快速上手进行一系列配置后可以让项目跑起来
nb run
这一步只要没有报错就行,暂时看不到图示里提到的机器人,直接看下一步手动创建项目,添加一个ConsoleAdapter后就可以在终端看到一个和机器人的交互界面
- 安装 nonebot2 以及驱动器
pip install 'nonebot2[fastapi]'
- 安装适配器
pip install nonebot-adapter-console
可以在一键创建项目的目录下新建一个 bot.py 文件,写入
import nonebot
from nonebot.adapters.console import Adapter as ConsoleAdapter # 避免重复命名
# 初始化 NoneBot
nonebot.init()
# 注册适配器
driver = nonebot.get_driver()
driver.register_adapter(ConsoleAdapter)
# 在这里加载插件
nonebot.load_builtin_plugins("echo") # 内置插件
# nonebot.load_plugin("thirdparty_plugin") # 第三方插件
# nonebot.load_plugins("awesome_bot/plugins") # 本地插件
if __name__ == "__main__":
nonebot.run()
然后运行机器人
python bot.py
可以在终端中得到一个可交互的机器人接口
安装 NoneBot OneBot 适配器
使用 pip
pip install nonebot-adapter-onebot
2) 关键词触发命令
on_command
最简单的事件响应器,给机器人发送指定的消息,机器人回复指定的消息。
from nonebot import on_command
from nonebot.rule import to_me
from nonebot.adapters import Message
from nonebot.params import CommandArg
# 事件响应器
weather = on_command("天气", rule=to_me(), aliases={"weather", "查天气"}, priority=10, block=True)
# 事件处理
@weather.handle()
async def handle_function(args: Message = CommandArg()):
# 提取参数纯文本作为地名,并判断是否有效
if location := args.extract_plain_text():
await weather.finish(f"今天{location}的天气是...")
else:
await weather.finish("请输入地名")
3) 发送私聊消息/群消息
参考:nonebot2聊天机器人插件9:定时提醒器timing
from nonebot import get_bots
bot, = get_bots().values()
# 发送一条群聊信息
await bot.send_msg(
message_type="group",
# 群号
group_id=12345678,
message='这是一条群聊信息'
)
# 发送一条私聊信息
await bot.send_msg(
message_type="private",
# 私聊用户QQ号
user_id=12345678,
message='这是一条私聊信息'
)
4) 发送文本和图片
发送文本+本地图片(参考:nonebot2聊天机器人插件9:定时提醒器timing)
from nonebot import get_bots
from nonebot.adapters.onebot.v11 import MessageSegment
img_path = 'file:///' + os.path.split(os.path.realpath(__file__))[0] + '/img/' # 当前脚本目录下的 img 文件夹内
def send_img(img_name):
global img_path
return MessageSegment.image(img_path + img_name)
bot, = get_bots().values()
await bot.send_msg(
message_type="group",
# 群号
group_id=12345678,
message='这是一条群聊信息' + send_img('三点饮茶.gif')
)
5) APScheduler 定时任务
APScheduler (Advanced Python Scheduler) 是一个 Python 第三方库,其强大的定时任务功能被广泛应用于各个场景。在 NoneBot 中,定时任务作为一个额外功能,依赖于基于 APScheduler 开发的 nonebot-plugin-apscheduler 插件进行支持。
安装插件
nb plugin install nonebot-plugin-apscheduler
使用插件
nonebot-plugin-apscheduler 本质上是对 APScheduler 进行了封装以适用于 NoneBot 开发,因此其使用方式与 APScheduler 本身并无显著区别。
调度器
由于 nonebot_plugin_apscheduler 作为插件,因此需要在使用前对其进行加载并导入其中的 scheduler 调度器来创建定时任务。
from nonebot import require
require("nonebot_plugin_apscheduler")
from nonebot_plugin_apscheduler import scheduler
# cron 的意思是每天的 18:35:40 发消息
# interval 的意思是每隔多少时间,参数是 hours, minutes, seconds(带s)
@scheduler.scheduled_job("cron", hour=18, minute=35, second=40)
async def timer_task():
# 获取 bot 信息
(bot, ) = nonebot.get_bots().values()
msg = f"测试消息"
await bot.send_group_msg(group_id=642122283, message=msg)
安装后可能遇到报错,无法调用:
- 解决方案一:记录解决nonebot2中定时器报时区问题的错误
- 直接在源码的源码中进行修改
- 解决方案二:nonebot_plugin_apscheduler错误,无法加载插件
- 读取 env 环境变量,nonebot 项目目录有 .env 文件配置环境变量
APSCHEDULER_AUTOSTART=true APSCHEDULER_CONFIG={"apscheduler.timezone": "Asia/Shanghai"}
2. 配合LLOneBot
LiteLoaderQQNT 插件,实现 OneBot 11 协议,用以 QQ 机器人开发
评价:这个比较适合新手入门,因为是直接嵌入的插件,配置比较容易,如果可以完成这一步的配置,再去用 NapCatQQ这个无头的QQNT就会方便得多
1) 安装 QQNT
去QQ官网下载最新版的QQ(现在都是QQNT的框架)
2) 安装 LiteLoaderQQNT
3) 安装 LLOneBot
下载 LLOneBot 最新版本 解压放到 plugins
目录下,然后重启 QQ 即可
目录结构如下:
├── plugins
│ ├── LLOneBot
│ │ └── main/main.cjs
│ │ └── preload/preload.cjs
│ │ └── renderer/index.js
│ │ └── manifest.json
│ │ └── node_modules/...
4) 对接配置 NoneBot
这个直接根据 对接配置 来就可以
1. 配置 NoneBot
这里假设你已经安装了 Onebot 适配器
默认情况 NoneBot 是启用了反向 ws 的,可能是默认配置问题,需要配置 token 才能正常连接
修改 NoneBot 下的 .env 配置文件,添加 ONEBOT_ACCESS_TOKEN=你的token
,token 需要和 LLOneBot 配置的 token 一致
然后启用 NoneBot,可以看到 NoneBot 输出的端口号,如 8080
2. 配置 LLOneBot
在 LLOneBot 配置页面添加反向 WS 地址,地址为 ws://127.0.0.1:8080/onebot/v11/ws
, 这里的 8080
是 NoneBot 输出的端口号,/onebot/v11/ws
是 NoneBot onebot 适配器默认的路径
能启动的两个关键:
- LLOneBot 配置的 token 需要和 NoneBot 配置的 一致
- 反向ws端口(
ws://127.0.0.1:8080/onebot/v11/ws
)和 NoneBot 输出的端口号一致
3. 配合 NapCatQQ
NapCatQQ 是基于 PC NTQQ 客户端本体实现的 QQ Bot 框架,稳定安全,快速部署。
1. 安装与配置
参考快速上手:
Linux 脚本一键安装
curl -o napcat.sh https://fastly.jsdelivr.net/gh/NapNeko/NapCat-Installer@master/script/install.sh && sudo bash napcat.sh
参考 napcat.sh 脚本
运行命令为
echo -e "\n安装完成,请输入 xvfb-run -a qq --no-sandbox 命令启动。"
echo "保持后台运行 请输入 screen -dmS napcat bash -c \"xvfb-run -a qq --no-sandbox\""
echo "后台快速登录 请输入 screen -dmS napcat bash -c \"xvfb-run -a qq --no-sandbox -q QQ号码\""
echo "注意,您可以随时使用screen -r napcat来进入后台进程并使用ctrl + a + d离开(离开不会关闭后台进程)。"
xvfb-run -a qq --no-sandbox # 启动qq,并在终端中显示,如果关闭则会退出登录(第一次登录可以先用这个命令熟悉一下)
screen -dmS napcat bash -c "xvfb-run -a qq --no-sandbox" # 登陆后切换到后台
screen -dmS napcat bash -c "xvfb-run -a qq --no-sandbox -q QQ号码" # 在第一次登录,信任并授权电脑后,可以快速登陆你的账号
screen -r napcat # 可以进入napcat的后台进程,按ctrl + a + d离开不会关闭进程,按别的键 (ctrl+z或者ctrl+c)会结束进程
2. 对接配置 NoneBot
参考基础配置
参考 napcat.sh 脚本可以找到安装位置为:/opt/QQ/resources/app/app_launcher/napcat
打开 NapCat 的 config
目录,找到名为 onebot11_<你的QQ号>.json
的文件,如 onebot11_1234567.json
;如果没有此文件可以复制 onebot11.json
重命名为 onebot11_<你的QQ号>.json
。
这个配置文档和LLOneBot的很像了,下面是配置内容参数解释:
{
"http": {
// 是否启用http服务, true为启动,false为禁用
"enable": false,
// HTTP服务监听的 ip 地址,为空则监听所有地址
"host": "",
// http服务端口
"port": 3000,
// http上报密钥,可为空
"secret": "",
// 是否启用http心跳
"enableHeart": false,
// 是否启用http上报服务
"enablePost": false,
// http上报地址, 如["http://127.0.0.1:8080/onebot/v11/http"]
"postUrls": []
},
"ws": {
// 是否启用正向websocket服务
"enable": false,
// 正向websocket服务监听的 ip 地址,为空则监听所有地址
"host": "",
// 正向websocket服务端口
// 当port与http服务port一致时,host也需与http服务host保持一致,否则可能会导致启动失败
"port": 3001
},
"reverseWs": {
// 是否启用反向websocket服务
"enable": false,
// 反向websocket对接的地址, 如["ws://127.0.0.1:8080/onebot/v11/ws"]
"urls": []
},
"GroupLocalTime": {
"Record": false,//是否开启本地群聊时间记录
"RecordList": []//开启全部群 ["-1"] 单个群配置 ["11111"] 多个群 ["1","2","3"]
},
// 是否开启调试模式,开启后上报消息会携带一个raw字段,为原始消息内容
"debug": false,
// ws心跳间隔,单位毫秒
"heartInterval": 30000,
// 消息上报格式,array为消息组,string为cq码字符串
"messagePostFormat": "array",
// 是否将本地文件转换为URL,如果获取不到url则使用base64字段返回文件内容
"enableLocalFile2Url": true,
// 音乐签名URL,用于处理音乐相关请求
"musicSignUrl": "",
// 是否上报自己发送的消息
"reportSelfMessage": false,
// access_token,可以为空
"token": ""
}
主要配置 reverseWs 和 token 这两个,参考 LLOneBot - 对接配置NoneBot 这一步
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj