From b1e7b6972d1bf54eb72a03fae4b100e7a49408e8 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sat, 6 Dec 2025 18:32:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(plugin):=20=E6=B7=BB=E5=8A=A0=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8A=A0=E8=BD=BD=E6=8F=92=E4=BB=B6=E7=9A=84=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 `load_plugin` 函数,允许在运行时加载一个已注册但未加载的插件。 这为更灵活的插件管理(例如热加载)提供了基础支持。 --- src/plugin_system/apis/plugin_manage_api.py | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/plugin_system/apis/plugin_manage_api.py b/src/plugin_system/apis/plugin_manage_api.py index ad50ad029..f83605061 100644 --- a/src/plugin_system/apis/plugin_manage_api.py +++ b/src/plugin_system/apis/plugin_manage_api.py @@ -189,6 +189,38 @@ def register_plugin_from_file(plugin_name: str, load_after_register: bool = True # 该部分包含控制插件整体启用/禁用状态的功能。 +async def load_plugin(plugin_name: str) -> bool: + """ + 加载一个已注册但未加载的插件。 + + Args: + plugin_name (str): 要加载的插件名称。 + + Returns: + bool: 如果插件成功加载,则为 True。 + + Raises: + ValueError: 如果插件未注册或已经加载。 + """ + # 检查插件是否已经加载 + if plugin_name in plugin_manager.list_loaded_plugins(): + logger.warning(f"插件 '{plugin_name}' 已经加载。") + return True + + # 检查插件是否已注册 + if plugin_name not in plugin_manager.list_registered_plugins(): + raise ValueError(f"插件 '{plugin_name}' 未注册,无法加载。") + + # 尝试加载插件 + success, _ = plugin_manager.load_registered_plugin_classes(plugin_name) + if success: + logger.info(f"插件 '{plugin_name}' 加载成功。") + else: + logger.error(f"插件 '{plugin_name}' 加载失败。") + + return success + + async def enable_plugin(plugin_name: str) -> bool: """ 启用一个已禁用的插件。