feat 清理无效的插件事件响应
This commit is contained in:
parent
eb3c09a3d3
commit
cbccac87f0
@ -10,16 +10,13 @@ class EventManager(metaclass=Singleton):
|
|||||||
事件管理器
|
事件管理器
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# 事件队列
|
|
||||||
_eventQueue: Queue = None
|
|
||||||
# 事件响应函数字典
|
|
||||||
_handlers: dict = {}
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# 事件队列
|
# 事件队列
|
||||||
self._eventQueue = Queue()
|
self._eventQueue = Queue()
|
||||||
# 事件响应函数字典
|
# 事件响应函数字典
|
||||||
self._handlers = {}
|
self._handlers = {}
|
||||||
|
# 已禁用的事件响应
|
||||||
|
self._disabled_handlers = []
|
||||||
|
|
||||||
def get_event(self):
|
def get_event(self):
|
||||||
"""
|
"""
|
||||||
@ -27,8 +24,12 @@ class EventManager(metaclass=Singleton):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
event = self._eventQueue.get(block=True, timeout=1)
|
event = self._eventQueue.get(block=True, timeout=1)
|
||||||
handlerList = self._handlers.get(event.event_type)
|
handlerList = self._handlers.get(event.event_type) or []
|
||||||
return event, handlerList or []
|
if handlerList:
|
||||||
|
# 去除掉被禁用的事件响应
|
||||||
|
handlerList = [handler for handler in handlerList
|
||||||
|
if handler.__qualname__.split(".")[0] not in self._disabled_handlers]
|
||||||
|
return event, handlerList
|
||||||
except Empty:
|
except Empty:
|
||||||
return None, []
|
return None, []
|
||||||
|
|
||||||
@ -51,18 +52,21 @@ class EventManager(metaclass=Singleton):
|
|||||||
handlerList.append(handler)
|
handlerList.append(handler)
|
||||||
logger.debug(f"Event Registed:{etype.value} - {handler}")
|
logger.debug(f"Event Registed:{etype.value} - {handler}")
|
||||||
|
|
||||||
def remove_event_listener(self, etype: EventType, handler: type):
|
def disable_events_hander(self, class_name: str):
|
||||||
"""
|
"""
|
||||||
移除监听器的处理函数
|
标记对应类事件处理为不可用
|
||||||
"""
|
"""
|
||||||
try:
|
if class_name not in self._disabled_handlers:
|
||||||
handlerList = self._handlers[etype.value]
|
self._disabled_handlers.append(class_name)
|
||||||
if handler in handlerList[:]:
|
logger.debug(f"Event Disabled:{class_name}")
|
||||||
handlerList.remove(handler)
|
|
||||||
if not handlerList:
|
def enable_events_hander(self, class_name: str):
|
||||||
del self._handlers[etype.value]
|
"""
|
||||||
except KeyError:
|
标记对应类事件处理为可用
|
||||||
pass
|
"""
|
||||||
|
if class_name in self._disabled_handlers:
|
||||||
|
self._disabled_handlers.remove(class_name)
|
||||||
|
logger.debug(f"Event Enabled:{class_name}")
|
||||||
|
|
||||||
def send_event(self, etype: EventType, data: dict = None):
|
def send_event(self, etype: EventType, data: dict = None):
|
||||||
"""
|
"""
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import traceback
|
import traceback
|
||||||
from typing import List, Any, Dict, Tuple
|
from typing import List, Any, Dict, Tuple
|
||||||
|
|
||||||
|
from app.core.event import eventmanager
|
||||||
from app.db.systemconfig_oper import SystemConfigOper
|
from app.db.systemconfig_oper import SystemConfigOper
|
||||||
from app.helper.module import ModuleHelper
|
from app.helper.module import ModuleHelper
|
||||||
from app.helper.sites import SitesHelper
|
from app.helper.sites import SitesHelper
|
||||||
@ -58,6 +59,8 @@ class PluginManager(metaclass=Singleton):
|
|||||||
self._plugins[plugin_id] = plugin
|
self._plugins[plugin_id] = plugin
|
||||||
# 未安装的不加载
|
# 未安装的不加载
|
||||||
if plugin_id not in installed_plugins:
|
if plugin_id not in installed_plugins:
|
||||||
|
# 设置事件状态为不可用
|
||||||
|
eventmanager.disable_events_hander(plugin_id)
|
||||||
continue
|
continue
|
||||||
# 生成实例
|
# 生成实例
|
||||||
plugin_obj = plugin()
|
plugin_obj = plugin()
|
||||||
@ -66,6 +69,8 @@ class PluginManager(metaclass=Singleton):
|
|||||||
# 存储运行实例
|
# 存储运行实例
|
||||||
self._running_plugins[plugin_id] = plugin_obj
|
self._running_plugins[plugin_id] = plugin_obj
|
||||||
logger.info(f"Plugin Loaded:{plugin_id}")
|
logger.info(f"Plugin Loaded:{plugin_id}")
|
||||||
|
# 设置事件注册状态可用
|
||||||
|
eventmanager.enable_events_hander(plugin_id)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error(f"加载插件 {plugin_id} 出错:{err} - {traceback.format_exc()}")
|
logger.error(f"加载插件 {plugin_id} 出错:{err} - {traceback.format_exc()}")
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ class ChatGPT(_PluginBase):
|
|||||||
title = event.event_data.get("title")
|
title = event.event_data.get("title")
|
||||||
if not title:
|
if not title:
|
||||||
return
|
return
|
||||||
# 收到事件后需要立码返回
|
# 收到事件后需要立码返回,避免主程序等待
|
||||||
if not self._enabled \
|
if not self._enabled \
|
||||||
or not self.openai \
|
or not self.openai \
|
||||||
or not self._recognize:
|
or not self._recognize:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user