puniyu_handler
事件处理器模块
概述
puniyu_handler 是 puniyu 项目中负责事件处理的核心库。它提供了统一的事件处理器接口、消息事件处理实现以及处理器注册和管理机制。
核心组件
Handler Trait
事件处理器基础 trait,所有事件处理器都需要实现此 trait:
handle(): 异步处理事件的方法name(): 返回处理器名称rank(): 返回处理器优先级(默认值为 5,数值越小优先级越高)
MessageHandler 结构体
消息事件处理器实现:
- 处理好友消息和群组消息事件
- 解析消息中的命令和参数
- 调用相应的命令处理器执行命令
命令处理机制
命令解析
使用 parse_command! 宏解析消息文本:
- 第一个单词作为命令名称
--flag value格式作为参数- 支持无值参数
命令执行流程
- 从消息中提取文本内容
- 解析命令名称和参数
- 从
CommandRegistry获取命令定义 - 构建
Bot和EventContext实例 - 查找注册的命令处理器
- 按优先级顺序执行命令处理器
- 根据
HandlerResult决定是否继续执行其他处理器
处理器管理
HandlerRegistry 结构体
处理器注册表,提供处理器的注册和管理功能:
register(): 注册处理器unregister(): 卸载处理器get_all(): 获取所有处理器get_with_name(): 根据名称获取处理器
HandlerStore 结构体
底层存储实现:
- 使用
RwLock<Vec<Arc<dyn Handler>>>存储处理器 - 插入时自动按优先级排序
- 支持按名称查找和删除处理器
特性
- 异步处理: 所有处理器方法都是异步的
- 优先级排序: 处理器按优先级自动排序
- 线程安全: 使用
Arc和RwLock确保线程安全 - 命令集成: 与
puniyu_command紧密集成 - 参数解析: 自动解析命令参数并传递给命令处理器
许可证
本项目采用 LGPL 许可证。