文章目录
- 什么是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的根目录。