简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

ErisPulse.Core.Event.base 模块


模块概述

ErisPulse 事件处理基础模块

提供事件处理的核心功能,包括事件注册和处理

提示

  1. 所有事件处理都基于OneBot12标准事件格式
  2. 通过适配器系统进行事件分发和接收

函数列表

async _invoke_handler(handler_info: dict, event: Event)

内部方法 执行单个事件处理器


类列表

class BaseEventHandler

基础事件处理器

提供事件处理的基本功能,包括处理器注册和注销

内部维护与适配器事件总线的连接状态(_linked_to_adapter_bus), 确保 _process_event 在适配器总线被清空(如 shutdown/restart)后能重新挂载。

方法列表

__init__(event_type: str, module_name: str | None = None)

初始化事件处理器


register(handler: Callable, priority: int = DEFAULT_HANDLER_PRIORITY, condition: Callable | None = None, scope_exempt: bool = False)

注册事件处理器


unregister(handler: Callable)

注销事件处理器


async dispatch_to_owner(owner: str, event: 'Event')

内部方法 回放分发:将合成事件只投递给指定归属者(模块)的处理器

用于冷启动事件回放(get_load_strategy(replay=...))—— 新装模块通过回放快速获得会话上下文,其他模块不受回放影响。


unregister_by_owner(owner: str)

内部方法 按归属者精确移除事件处理器


__call__(priority: int = DEFAULT_HANDLER_PRIORITY, condition: Callable | None = None)

装饰器方式注册事件处理器


async _process_event(event: dict[str, Any])

处理事件

内部方法 同优先级处理器并行执行,不同优先级按顺序串行执行。 同优先级处理器的修改冲突采用后者覆盖前者的策略。


_is_scope_allowed(handler_info: dict, platform: str, bot_id: str, session_id: str)

内部方法 判断处理器是否通过模块作用域检查

框架级处理器(scope_exempt 或 owner 为空)始终放行; 模块级处理器按 owner 与当前事件所属平台/Bot/会话判定。


_is_scope_handler_ok(handler_info: dict, event)

内部方法 判断处理器是否通过事件覆写过滤(event.overrides.<本事件类型>.)

框架级处理器(scope_exempt 或 owner 为空)始终放行; 模块级处理器按其 owner 在所属事件类型的覆写节中的 detail_types / pattern / regex 条件过滤(与代码内条件 AND,需同时满足)。


_clear_handlers()

内部方法 清除所有已注册的事件处理器,并断开与适配器事件总线的连接

断开连接后,下次调用 register() 时会自动重新挂载 _process_event 到适配器总线, 以适配 shutdown/restart 等场景下适配器总线被清空的情况。

返回值: 被清除的处理器数量