From 4a860196e9351408675123da3d610913f4818c13 Mon Sep 17 00:00:00 2001 From: liuwei Date: Fri, 11 Apr 2025 14:12:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=92=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=98=BE=E7=A4=BA=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E7=9B=B8=E5=85=B3=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin_common/plugin_manager.py | 55 ++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/plugin_common/plugin_manager.py b/plugin_common/plugin_manager.py index fe5b194..348c8c2 100644 --- a/plugin_common/plugin_manager.py +++ b/plugin_common/plugin_manager.py @@ -132,10 +132,18 @@ class PluginManager: try: # 检查是否已有同名模块的插件加载 for name, plugin in self.plugins.items(): - module_name = plugin.__class__.__module__.split('.')[-2] - if module_name == plugin_name: - self.LOG.info(f"PluginManager:插件模块 {plugin_name} 已加载为 {name}") - return plugin + try: + module_name = plugin.__class__.__module__.split('.')[-2] + if module_name == plugin_name: + self.LOG.info(f"PluginManager:插件模块 {plugin_name} 已加载为 {name}") + # 确保模块名到插件名的映射存在 + if module_name not in self.module_to_plugin: + self.module_to_plugin[module_name] = name + self.LOG.info(f"PluginManager:添加缺失的模块映射 {module_name} -> {name}") + return plugin + except (IndexError, AttributeError) as e: + self.LOG.warning(f"获取插件 {name} 的模块名时出错: {e}") + continue # 如果插件已加载,直接返回 if plugin_name in self.plugins: @@ -199,6 +207,10 @@ class PluginManager: # 存储插件实例 self.plugins[plugin.name] = plugin + + # 添加模块名到插件名的映射 + self.module_to_plugin[plugin_name] = plugin.name + self.LOG.info(f"PluginManager:添加模块映射 {plugin_name} -> {plugin.name}") # 发布插件加载事件 EventSystem().publish(EventType.PLUGIN_LOADED, {"plugin": plugin}) @@ -230,7 +242,6 @@ class PluginManager: # 注册插件 PluginRegistry().register(plugin) - # 在 load_plugin 方法中,修改存储插件实例的部分 # 存储插件实例 self.plugins[plugin.name] = plugin @@ -238,8 +249,12 @@ class PluginManager: try: module_name = plugin.__class__.__module__.split('.')[-2] self.module_to_plugin[module_name] = plugin.name - except (IndexError, AttributeError): - self.LOG.warning(f"无法为插件 {plugin.name} 获取有效的模块名") + self.LOG.info(f"PluginManager:添加模块映射 {module_name} -> {plugin.name}") + except (IndexError, AttributeError) as e: + self.LOG.warning(f"无法为插件 {plugin.name} 获取有效的模块名: {e}") + # 使用传入的插件名作为备选 + self.module_to_plugin[plugin_name] = plugin.name + self.LOG.info(f"PluginManager:使用备选模块映射 {plugin_name} -> {plugin.name}") # 发布插件加载事件 EventSystem().publish(EventType.PLUGIN_LOADED, {"plugin": plugin}) @@ -459,8 +474,34 @@ class PluginManager: try: module_name = plugin.__class__.__module__.split('.')[-2] if module_name == plugin_name: + # 顺便更新映射 + if module_name not in self.module_to_plugin: + self.module_to_plugin[module_name] = name + self.LOG.info(f"PluginManager:添加缺失的模块映射 {module_name} -> {name}") + return name, plugin + + # 不区分大小写比较 + if module_name.lower() == plugin_name.lower(): + if module_name not in self.module_to_plugin: + self.module_to_plugin[module_name] = name + return name, plugin + + # 检查插件名是否包含在模块名中(不区分大小写) + if plugin_name.lower() in module_name.lower(): + return name, plugin + + # 检查模块名是否包含在插件名中(不区分大小写) + if module_name.lower() in plugin_name.lower(): + return name, plugin + + # 检查插件名是否包含在显示名称中(不区分大小写) + if plugin_name.lower() in name.lower(): return name, plugin except (IndexError, AttributeError): continue + # 记录未找到插件的详细信息,帮助调试 + self.LOG.warning(f"未找到插件: {plugin_name},当前已加载插件: {list(self.plugins.keys())}") + self.LOG.warning(f"模块映射: {self.module_to_plugin}") + return None, None