feat(event): add support for priority in event registration

This commit is contained in:
InfinityPacer
2024-12-12 15:38:28 +08:00
parent ba7cb76640
commit 621df40c66
+5 -3
View File
@@ -502,13 +502,15 @@ class EventManager(metaclass=Singleton):
} }
) )
def register(self, etype: Union[EventType, ChainEventType, List[Union[EventType, ChainEventType]], type]): def register(self, etype: Union[EventType, ChainEventType, List[Union[EventType, ChainEventType]], type],
priority: int = DEFAULT_EVENT_PRIORITY):
""" """
事件注册装饰器,用于将函数注册为事件的处理器 事件注册装饰器,用于将函数注册为事件的处理器
:param etype: :param etype:
- 单个事件类型成员 (如 EventType.MetadataScrape, ChainEventType.PluginAction) - 单个事件类型成员 (如 EventType.MetadataScrape, ChainEventType.PluginAction)
- 事件类型类 (EventType, ChainEventType) - 事件类型类 (EventType, ChainEventType)
- 或事件类型成员的列表 - 或事件类型成员的列表
:param priority: 可选,链式事件的优先级,默认为 DEFAULT_EVENT_PRIORITY
""" """
def decorator(f: Callable): def decorator(f: Callable):
@@ -528,11 +530,11 @@ class EventManager(metaclass=Singleton):
# 遍历列表,处理每个事件类型 # 遍历列表,处理每个事件类型
for event in event_list: for event in event_list:
if isinstance(event, (EventType, ChainEventType)): if isinstance(event, (EventType, ChainEventType)):
self.add_event_listener(event, f) self.add_event_listener(event, f, priority)
elif isinstance(event, type) and issubclass(event, (EventType, ChainEventType)): elif isinstance(event, type) and issubclass(event, (EventType, ChainEventType)):
# 如果是 EventType 或 ChainEventType 类,提取该类中的所有成员 # 如果是 EventType 或 ChainEventType 类,提取该类中的所有成员
for et in event.__members__.values(): for et in event.__members__.values():
self.add_event_listener(et, f) self.add_event_listener(et, f, priority)
else: else:
raise ValueError(f"无效的事件类型: {event}") raise ValueError(f"无效的事件类型: {event}")