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