模块管理优化

This commit is contained in:
liuwei
2025-03-20 10:08:48 +08:00
parent 7c876d0d91
commit 331f347d4e

View File

@@ -256,32 +256,32 @@ class PluginManagerPlugin(MessagePluginInterface):
return True, f"未找到插件 {plugin_name}" return True, f"未找到插件 {plugin_name}"
# 不允许禁用自身 # 不允许禁用自身
if plugin_name == self.name: if actual_plugin_name == self.name:
wcf.send_text(f"⚠️不能禁用插件管理插件自身", wcf.send_text(f"⚠️不能禁用插件管理插件自身",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, "不能禁用插件管理插件自身" return True, "不能禁用插件管理插件自身"
plugin = self.plugin_registry.get_plugin(plugin_name) plugin = self.plugin_registry.get_plugin(actual_plugin_name)
if not plugin: if not plugin:
wcf.send_text(f"❌插件 {plugin_name} 不存在", wcf.send_text(f"❌插件 {actual_plugin_name} 不存在",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, f"插件 {plugin_name} 不存在" return True, f"插件 {actual_plugin_name} 不存在"
if plugin.status == PluginStatus.STOPPED: if plugin.status == PluginStatus.STOPPED:
wcf.send_text(f"⚠️插件 {plugin_name} 已经是禁用状态", wcf.send_text(f"⚠️插件 {actual_plugin_name} 已经是禁用状态",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, f"插件 {plugin_name} 已经是禁用状态" return True, f"插件 {actual_plugin_name} 已经是禁用状态"
# 使用插件管理器停止插件 # 使用插件管理器停止插件
success = self.plugin_manager.stop_plugin(plugin_name) success = self.plugin_manager.stop_plugin(actual_plugin_name)
if success: if success:
wcf.send_text(f"✅插件 {plugin_name} 禁用成功", wcf.send_text(f"✅插件 {actual_plugin_name} 禁用成功",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, f"插件 {plugin_name} 禁用成功" return True, f"插件 {actual_plugin_name} 禁用成功"
else: else:
wcf.send_text(f"❌插件 {plugin_name} 禁用失败", wcf.send_text(f"❌插件 {actual_plugin_name} 禁用失败",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, f"插件 {plugin_name} 禁用失败" return True, f"插件 {actual_plugin_name} 禁用失败"
def _reload_plugin(self, plugin_name: str, wcf, sender: str, roomid: str) -> Tuple[bool, str]: def _reload_plugin(self, plugin_name: str, wcf, sender: str, roomid: str) -> Tuple[bool, str]:
"""重新加载插件""" """重新加载插件"""
@@ -308,14 +308,14 @@ class PluginManagerPlugin(MessagePluginInterface):
# 记录插件状态,以便重新加载后恢复 # 记录插件状态,以便重新加载后恢复
was_running = plugin.status == PluginStatus.RUNNING was_running = plugin.status == PluginStatus.RUNNING
# 先卸载插件 # 先卸载插件 - 这里使用actual_plugin_name而不是plugin_name
self.LOG.info(f"正在卸载插件 {actual_plugin_name} 以进行重载") self.LOG.info(f"正在卸载插件 {actual_plugin_name} 以进行重载")
if not self.plugin_manager.unload_plugin(actual_plugin_name): if not self.plugin_manager.unload_plugin(actual_plugin_name):
wcf.send_text(f"❌插件 {actual_plugin_name} 卸载失败,无法重载", wcf.send_text(f"❌插件 {actual_plugin_name} 卸载失败,无法重载",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return False, f"插件 {actual_plugin_name} 卸载失败,无法重载" return False, f"插件 {actual_plugin_name} 卸载失败,无法重载"
# 然后加载插件 # 然后加载插件 - 这里使用actual_plugin_name而不是plugin_name
self.LOG.info(f"正在加载插件 {actual_plugin_name}") self.LOG.info(f"正在加载插件 {actual_plugin_name}")
plugin = self.plugin_manager.load_plugin(actual_plugin_name) plugin = self.plugin_manager.load_plugin(actual_plugin_name)
if not plugin: if not plugin:
@@ -337,35 +337,47 @@ class PluginManagerPlugin(MessagePluginInterface):
def _unload_plugin(self, plugin_name: str, wcf, sender: str, roomid: str, silent: bool = False) -> Tuple[bool, str]: def _unload_plugin(self, plugin_name: str, wcf, sender: str, roomid: str, silent: bool = False) -> Tuple[bool, str]:
"""卸载插件""" """卸载插件"""
# 查找匹配的插件名称
actual_plugin_name = self._find_plugin_by_name(plugin_name)
if not actual_plugin_name:
if not silent:
wcf.send_text(f"❌未找到插件 {plugin_name},请检查名称是否正确",
(roomid if roomid else sender), sender)
return True, f"未找到插件 {plugin_name}"
# 不允许卸载自身 # 不允许卸载自身
if plugin_name == self.name: if actual_plugin_name == self.name:
if not silent: if not silent:
wcf.send_text(f"⚠️不能卸载插件管理插件自身", wcf.send_text(f"⚠️不能卸载插件管理插件自身",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, "不能卸载插件管理插件自身" return True, "不能卸载插件管理插件自身"
plugin = self.plugin_registry.get_plugin(plugin_name) plugin = self.plugin_registry.get_plugin(actual_plugin_name)
if not plugin: if not plugin:
if not silent: if not silent:
wcf.send_text(f"❌插件 {plugin_name} 不存在或已卸载", wcf.send_text(f"❌插件 {actual_plugin_name} 不存在或已卸载",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, f"插件 {plugin_name} 不存在或已卸载" return True, f"插件 {actual_plugin_name} 不存在或已卸载"
# 使用插件管理器卸载插件 # 使用插件管理器卸载插件
success = self.plugin_manager.unload_plugin(plugin_name) success = self.plugin_manager.unload_plugin(actual_plugin_name)
if success: if success:
if not silent: if not silent:
wcf.send_text(f"✅插件 {plugin_name} 卸载成功", wcf.send_text(f"✅插件 {actual_plugin_name} 卸载成功",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return True, f"插件 {plugin_name} 卸载成功" return True, f"插件 {actual_plugin_name} 卸载成功"
else: else:
if not silent: if not silent:
wcf.send_text(f"❌插件 {plugin_name} 卸载失败", wcf.send_text(f"❌插件 {actual_plugin_name} 卸载失败",
(roomid if roomid else sender), sender) (roomid if roomid else sender), sender)
return False, f"插件 {plugin_name} 卸载失败" return False, f"插件 {actual_plugin_name} 卸载失败"
def _load_plugin(self, plugin_name: str, wcf, sender: str, roomid: str, silent: bool = False) -> Tuple[bool, str]: def _load_plugin(self, plugin_name: str, wcf, sender: str, roomid: str, silent: bool = False) -> Tuple[bool, str]:
"""加载插件""" """加载插件"""
# 对于加载操作,我们不需要查找匹配的插件名称,因为插件可能尚未加载
# 但我们可以检查是否有同名插件已加载
# 检查插件是否已加载 # 检查插件是否已加载
existing_plugin = self.plugin_registry.get_plugin(plugin_name) existing_plugin = self.plugin_registry.get_plugin(plugin_name)
if existing_plugin: if existing_plugin: