初识Nonebot2

news/2025/2/13 17:36:07/

文章目录

    • 什么是nonebot2?
    • 机器人工作流程
    • WebSocket协议
    • OneBot标准
    • Nonebot2框架工作路径

什么是nonebot2?

关于NoneBot2,我们先来引用一下官方文档的描述

NoneBot2是一个可扩展的 Python 异步机器人框架,它会对机器人收到的事件进行解析和处理,并以插件化的形式,按优先级分发给事件所对应的事件响应器,来完成具体的功能。
除了起到解析事件的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制。对于命令处理,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。
得益于 Python 的 asyncio (opens new window)机制,NoneBot 处理事件的吞吐量有了很大的保障,再配合 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,更是有质的飞跃。
需要注意的是,NoneBot2 仅支持 Python 3.8 以上版本

废话那么多其实要点主要有以下几个:

  • Nonebot2是基于python3.8及以上运行的
  • 框架整体基于异步io
  • 有完善的预设指令,可减轻开发者的工作强度

Nonebot2具有以下特色:

  • 异步优先
    NoneBot2 基于 Python asyncio 编写,并在异步机制的基础上进行了一定程度的同步函数兼容。

  • 完整的类型注解
    NoneBot2 参考 PEP 484 等 PEP 完整实现了类型注解,通过 pyright/pylance 检查。配合编辑器的类型推导功能,能将绝大多数的 Bug 杜绝在编辑器中(编辑器支持)。

  • 开箱即用
    NoneBot2 提供了使用便捷、具有交互式功能的命令行工具–nb-cli,使得初次接触 NoneBot2 时更容易上手。详细使用方法请参考各文档章节以及使用脚手架。

  • 插件系统
    插件系统是 NoneBot2 的核心,通过它可以实现机器人的模块化以及功能扩展,便于维护和管理。

  • 依赖注入系统
    NoneBot2 采用了一套自行定义的依赖注入系统,可以让事件的处理过程更加的简洁、清晰,增加代码的可读性,减少代码冗余。

机器人工作流程

在本篇博客中介绍到的机器人,我们使用的的前端是go-cqhttp,后端是NoneBot2。
在这里插入图片描述

1.前端从腾讯的服务器上接收用户的信息(或其他)
2.将信息传递给后端
3.后端对信息进行分析,调用对应的模块进行处理
4.后端将处理结果推送给前端
5.前端将处理后的结果重新发送给腾讯的服务器(或其他)
6.腾讯服务器会在有消息变动之后将消息推送给用户

WebSocket协议

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在go-cqhttp与NoneBot的信息交互中,我们使用的就是反向WebSocket连接,也就是说go-cqhttp会主动去寻找nonebot2的程序,并将消息通过ws推送给nonebot2,因此相对于传统的HTTP连接,这种方法明显效率更高,延迟更低。

OneBot标准

OneBot标准是一个聊天机器人应用接口标准,旨在统一不同聊天平台上的机器人应用开发接口,使开发者只需编写一次代码即可应用到多种机器人平台。
在这里插入图片描述

在go-cqhttp与NoneBot的信息交互中,通讯的内容是基于OneBot的标准的改版,具体可以参考go-cqhttp的文档。

Nonebot2框架工作路径

The directory in which you are currently working. Path names that do not start with the root directory are assumed by the operating system to start from the working directory
————该解释出自 Webopedia

  • 相对路径
    相对于项目文件夹根目录的路径,没有盘符
  • 绝对路径
    一个计算机在能够使用之前会先进行分区,例如windows系统分为C盘、D盘,绝对路径就是从盘符出发定位一个文件。
  • 工作路径
    项目的程序入口所在的目录一般认定为工作路径。在nonebot中,工作路径位于bot.py的根目录。

http://www.ppmy.cn/news/19928.html

相关文章

中文问题相似度挑战赛版本2

都将两个版本做对比,构建自己的相似度打分, 版本一:特征工程(中文特征)集成模型 版本二:预训练模型。 后续改进 模型融合 赛题介绍 赛题背景 问答系统中包括三个主要的部分:问题理解、信…

【寒假每日一题】洛谷 P6625 [省选联考 2020 B 卷] 卡牌游戏

题目链接:P6625 [省选联考 2020 B 卷] 卡牌游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 轩轩某天想到了一个卡牌游戏,游戏规则如下: 1. 初始时轩轩的手中有自左向右排成一排的 n 张卡牌,每张卡牌上有一个整数…

【web安全】同源策略与跨域

引言 同源策略与跨域是web安全中非常基础的知识点,并且,有的web漏洞是和同源策略息息相关的,因此我们在这里用问答的方式介绍并理解一下同源策略与跨域的相关知识。 同源策略与跨域相关问题。 什么是同源,什么是跨域&#xff1…

AcWing蓝桥杯AB组辅导课08、数论

文章目录前言一、数论例题例题1:AcWing 1246. 等差数列(最大公约数,第十届蓝桥杯省赛CB第7题)分析题解:最大公约数例题2:AcWing 1295. X的因子链(算数基本定理、欧拉筛选,多重集合排…

蓝桥杯重点(C/C++)(随时更新,更新时间:2023.1.27)

点关注不迷路,欢迎推荐给更多人 目录 1 技巧 1.1 取消同步(节约时间,甚至能多骗点分,最好每个程序都写上) 1.2 万能库(可能会耽误编译时间,但是省脑子) 1.3 蓝桥杯return 0…

网络— — 二层交换机

网络— — 二层交换机 1 交换机端口 g0/3 g:1000M/s0:模块号3:接口号 每个端口网速: Ethernet 10M/s FastEthernet 100M/s GigabitEthernet 1000M/s TenGigabitEthernet 10000Mb/s 2 数据链路层(2层) Data…

Redis缓存污染了怎么办?

我们应用Redis缓存时,如果能缓存会被反复访问的数据,那就能加速业务应用的访问,但是,如果发生了缓存污染,那么,缓存对业务应用的加速作用就减少了。 在一些场景下,有些数据被访问的次数非常小&…

实现自己的数据库二

一 前言上次数据库支持了一个测试表的插入和查询,但是数据全部保存到磁盘中的,如果程序重启后,数据都会全部丢了,所以需要持久化到磁盘上,像sqlite一样,简单的将数据库的数据保存到一个磁盘文件上。二 实现…