puniyu_handler

Crates.iopuniyu_handler
lib.rspuniyu_handler
version0.4.1
created_at2025-10-24 15:46:52.532582+00
updated_at2025-11-16 07:32:28.75103+00
descriptionpuniyu 的事件处理器模块
homepagehttps://github.com/puniyu/puniyu
repositoryhttps://github.com/puniyu/puniyu
max_upload_size
id1898618
size82,584
wuliya (shiwuliya)

documentation

README

puniyu_handler

事件处理器模块

概述

puniyu_handler 是 puniyu 项目中负责事件处理的核心库。它提供了统一的事件处理器接口、消息事件处理实现以及处理器注册和管理机制。

核心组件

Handler Trait

事件处理器基础 trait,所有事件处理器都需要实现此 trait:

  • handle(): 异步处理事件的方法
  • name(): 返回处理器名称
  • rank(): 返回处理器优先级(默认值为 5,数值越小优先级越高)

MessageHandler 结构体

消息事件处理器实现:

  • 处理好友消息和群组消息事件
  • 解析消息中的命令和参数
  • 调用相应的命令处理器执行命令

命令处理机制

命令解析

使用 parse_command! 宏解析消息文本:

  • 第一个单词作为命令名称
  • --flag value 格式作为参数
  • 支持无值参数

命令执行流程

  1. 从消息中提取文本内容
  2. 解析命令名称和参数
  3. CommandRegistry 获取命令定义
  4. 构建 BotEventContext 实例
  5. 查找注册的命令处理器
  6. 按优先级顺序执行命令处理器
  7. 根据 HandlerResult 决定是否继续执行其他处理器

处理器管理

HandlerRegistry 结构体

处理器注册表,提供处理器的注册和管理功能:

  • register(): 注册处理器
  • unregister(): 卸载处理器
  • get_all(): 获取所有处理器
  • get_with_name(): 根据名称获取处理器

HandlerStore 结构体

底层存储实现:

  • 使用 RwLock<Vec<Arc<dyn Handler>>> 存储处理器
  • 插入时自动按优先级排序
  • 支持按名称查找和删除处理器

特性

  • 异步处理: 所有处理器方法都是异步的
  • 优先级排序: 处理器按优先级自动排序
  • 线程安全: 使用 ArcRwLock 确保线程安全
  • 命令集成: 与 puniyu_command 紧密集成
  • 参数解析: 自动解析命令参数并传递给命令处理器

许可证

本项目采用 LGPL 许可证。

Commit count: 314

cargo fmt