Python聊天机器人-NoneBot2入门(2024新版)

news2024/9/20 7:53:08

1. NoneBot2 安装与使用

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架(下称 NoneBot),它基于 Python 的类型注解和异步优先特性(兼容同步),能够为你的需求实现提供便捷灵活的支持。同时,NoneBot 拥有大量的开发者为其开发插件,用户无需编写任何代码,仅需完成环境配置及插件安装,就可以正常使用 NoneBot。

参考:

  1. ★★★ nonebot2聊天机器人插件9:定时提醒器timing
  2. NoneBot总结
  3. ★★ 爆肝将近 5 万字使用 Python 本地端、服务器端搭建 QQ 智能聊天机器人(新手教程)

1) NoneBot2的安装与配置

脚手架安装(官方推荐)

安装完成后可以用固定的机器人

pip install nb-cli
  1. 一键创建项目
nb create

根据快速上手进行一系列配置后可以让项目跑起来

nb run

这一步只要没有报错就行,暂时看不到图示里提到的机器人,直接看下一步手动创建项目,添加一个ConsoleAdapter后就可以在终端看到一个和机器人的交互界面

  1. 手动创建项目
  • 安装 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. LLOneBot仓库
  2. LLOneBot快速开始

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 适配器默认的路径

能启动的两个关键

  1. LLOneBot 配置的 token 需要和 NoneBot 配置的 一致
  2. 反向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 这一步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

煤炭检测实验室信息管理系统LIMS

在煤矿行业&#xff0c;实验室作为质量控制与技术创新的核心部门&#xff0c;其管理效率与数据准确性直接关系到企业的生产安全与经济效益。随着信息技术的飞速发展&#xff0c;实验室信息管理系统(LIMS)在煤矿行业的应用日益广泛&#xff0c;成为提升实验室管理水平、优化检测…

【动态规划,dp】P1044[NOIP2003 普及组] 栈 题解

题意 给定一个 n ( 1 ≤ n ≤ 18 ) n(1 \leq n \leq 18) n(1≤n≤18)&#xff0c;表示一个操作数序列&#xff0c; 1 , 2 , … , n 1,2,…,n 1,2,…,n&#xff08;图示为 1 到 3 的情况&#xff09;&#xff0c;栈 A 的深度大于 n n n。 现在可以进行两种操作&#xff0c; …

如何选出高品质 SD 存储卡 —— 具备高耐用度且防水防震抗冲击

SD卡&#xff08;Secure Digital Memory Card&#xff09;是一种广泛使用的存储器件&#xff0c;因其快速的数据传输速度、可热插拔的特性以及较大的存储容量&#xff0c;广泛应用于各种场景&#xff0c;例如在便携式设备如智能手机、平板电脑、运动相机等&#xff0c;用于存储…

录屏为什么录制不进去,没有声音?屏幕录制中的声音问题及解决方案

在数字时代&#xff0c;屏幕录制已成为我们日常工作和生活中不可或缺的一部分。无论是制作教学视频、记录在线课程&#xff0c;还是捕捉游戏精彩瞬间&#xff0c;一个好的屏幕录制软件都能让我们的工作更加高效&#xff0c;生活更加丰富。然而&#xff0c;许多用户在使用屏幕录…

谈一谈数据虚拟化的技术核心和应用架构

数据虚拟化&#xff08;Data Virtualization&#xff09;是对数据资源的抽象&#xff0c;通过屏蔽数据资源的存储位置和访问方式&#xff0c;能够将不同数据源、不同格式的数据资源&#xff0c;进行逻辑上的整合集成。这一技术方案与过去面对传统数仓的弊端&#xff0c;业界过去…

为什么说凤凰雪球期权是震荡市场中的稳健选择?

在当前股市波动的背景下&#xff0c;投资者会发现传统的投资策略难以适应市场的快速变化。在这样的环境下&#xff0c;一些创新的金融产品&#xff0c;如凤凰雪球&#xff0c;因其相对较高的安全性和潜在的收益性&#xff0c;逐渐受到市场的关注。 近期&#xff0c;股市呈现出…

大语言模型的简易可扩展增量预训练策略

前言 原论文&#xff1a;Simple and Scalable Strategies to Continually Pre-train Large Language Models翻译文件已整理至Github项目Some-Paper-CN&#xff0c;欢迎大家Star&#xff01; 摘要 大语言模型&#xff08;LLMs&#xff09;通常需要在数十亿个tokens上进行预训…

存储实验:华为异构存储在线接管与在线数据迁移(Smart Virtualization Smart Migration 特性)

目录 目的实验环境实验步骤参考文档1. 主机安装存储多路径2. v2存储创建Lun&#xff0c;映射给主机&#xff1b;主机分区格式化&#xff0c;写数据3. 将v2存储映射该成映射到v3存储上(v3存储和v2之间链路搭建&#xff0c;测通&#xff0c;远端设备&#xff09;&#xff08;Smar…

【深度学习】DDPM公式详解(第一期)

原论文&#xff1a;Denoising Diffusion Probabilistic Models (1)-1 p θ ( x 0 : T ) : p ( x T ) ∏ t 1 T p θ ( x t − 1 ∣ x t ) p_{\theta}(x_0:T) : p(x_T) \prod_{t1}^{T} p_{\theta}(x_{t-1} \mid x_t) pθ​(x0​:T):p(xT​)t1∏T​pθ​(xt−1​∣xt​) 这个…

AI预测福彩3D采取888=3策略+和值012路或胆码测试8月16日新模型预测第58弹

经过近60期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;57期一共只错了5次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大…

IoTSharp:基于 .NET 6.0 的开源物联网平台

目录 前言 项目介绍 为什么会有 IoTSharp&#xff1f; IoTSharp 能做什么&#xff1f; IoTSharp 的亮点 项目技术 1、编程语言 2、系统框架 3、数据库支持 4、消息队列与 EventBus 5、EventBus 存储 项目使用 1、下载 2、启动 3、注册服务 4、初始化influxdb 5…

实现清除默认样式的操作

1、在npm官网中搜索reset.scss->点击第一个。&#xff08;有时候会更新一些代码&#xff0c;第一个出现的不一定就是我图片中的这个&#xff0c;不一定要跟我图片中的代码一致&#xff0c;只需要选择第一个出现的即可&#xff09; 2、点击Code选项。 3、打开Code选项下面的t…

在私有化过程中不要忽视LLMs的双重逻辑能力:医学领域的数据密集型分析

链接&#xff1a;https://arxiv.org/abs/2309.04198 原标题&#xff1a;Don’t Ignore Dual Logic Ability of LLMs while Privatizing: A Data-Intensive Analysis in Medical Domain 日期&#xff1a;Submitted on 8 Sep 2023 摘要 大量的研究致力于通过喂养特定领域的数据…

智能楼宇控制系统的革新——M31系列分布式IO模块

随着物联网技术的飞速发展&#xff0c;智能楼宇控制系统正逐渐成为现代建筑的标配。它不仅能够提高建筑的能源效率&#xff0c;还能提升用户的生活品质和舒适度。在这样的背景下&#xff0c;分布式IO模块作为智能楼宇控制系统的核心组成部分&#xff0c;发挥着至关重要的作用。…

深度学习9--目标检测

1.概念介绍 目标检测不仅可以检测数字&#xff0c;而且可以检测动物的种类、汽车的种类等。例如&#xff0c;自动驾驶车辆需要自动识别前方物体是车辆还是行人&#xff0c;需要自动识别道路两 旁的指示牌和前方的红绿灯颜色。对于自动检测的算法&#xff0c;有两个要求&#xf…

聊聊场景及场景测试

在我们进行测试过程中&#xff0c;有一种黑盒测试叫场景测试&#xff0c;我们完全是从用户的角度去理解系统&#xff0c;从而可以挖掘用户的隐含需求。 场景是指用户会使用这个系统来完成预定目标的所有情况的集合。 场景本身也代表了用户的需求&#xff0c;所以我们可以认为…

项目管理工具的秘密:如何选出最佳系统

国内外主流的 10 款project项目管理系统对比&#xff1a;PingCode、Worktile、用友、泛微、蓝凌、Zoho Projects、Asana、Trello、Basecamp、Jira。 在寻找合适的项目管理系统时&#xff0c;你是否感到选择众多、功能复杂让人难以抉择&#xff1f;这正是许多项目经理面临的痛点…

计算机毕业设计选题推荐-个性化智能学习系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

MySQL架构与数据库基础

文章目录 一、数据库概念二、数据库的简单概念三、SQL四、MySQL架构 一、数据库概念 数据库是一个以某种由组织的方式存储的数据集合。我们可以把数据库想象称为一个文件柜。此文件柜是一个存放数据的物理位置&#xff0c;不管数据是什么以及如何组织的。数据库本质也需要像文…

C++-类与对象(上篇)

一、目标&#xff1a; 1. 面向过程和面向对象初步认识 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 5. 类的作用域 6. 类的实例化 7. 类的对象大小的计算 8. 类成员函数的 this 指针 二、对类与对象的介绍&#xff1a; 1.面向过程和面向对象初步认识 &#xff1a…