#gq: import logging # 获取当前模块的日志记录器,方便在插件中输出日志 logger = logging.getLogger(__name__) class BasePlugin: # 插件元数据,子类必须定义这些属性,否则会在初始化时抛出异常 PLUGIN_NAME = None PLUGIN_DESCRIPTION = None PLUGIN_VERSION = None def __init__(self): # 检查插件元数据是否完整,不完整则抛出 ValueError 异常 if not all([self.PLUGIN_NAME, self.PLUGIN_DESCRIPTION, self.PLUGIN_VERSION]): raise ValueError("Plugin metadata (PLUGIN_NAME, PLUGIN_DESCRIPTION, PLUGIN_VERSION) must be defined.") # 调用插件初始化方法,子类可以在这里完成特定的初始化操作 self.init_plugin() # 注册插件钩子,子类可以在这里注册需要监听的钩子 self.register_hooks() def init_plugin(self): """ 插件初始化逻辑 子类可以重写此方法来实现特定的初始化操作 """ # 默认行为:输出插件初始化日志 logger.info(f'{self.PLUGIN_NAME} initialized.') def register_hooks(self): """ 注册插件钩子 子类可以重写此方法来注册特定的钩子 """ # 默认行为:空实现,子类根据需要覆盖 pass def get_plugin_info(self): """ 获取插件信息 :return: 包含插件元数据的字典 """ # 返回插件的基本信息,供外部调用者获取 return { 'name': self.PLUGIN_NAME, 'description': self.PLUGIN_DESCRIPTION, 'version': self.PLUGIN_VERSION }