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