refactor(plugin_system): 引入 PluginMetadata 替代 manifest.json
将插件元数据定义从外部 `_manifest.json` 文件迁移到插件 `__init__.py` 文件中的 `__plugin_meta__` 变量。此举简化了插件加载流程,减少了文件I/O,并使元数据与插件代码更紧密地耦合。 主要变更: - 引入 `PluginMetadata` 数据类来标准化插件元数据。 - 插件基类 `PluginBase` 现在直接接收 `PluginMetadata` 对象,不再负责解析 JSON 文件。 - 插件管理器 `PluginManager` 调整加载逻辑,从插件模块的 `__plugin_meta__` 属性获取元数据。 - 删除了 `manifest_utils.py` 及其相关的验证和版本比较逻辑,简化了依赖关系。 - 更新了所有内置插件,以采用新的元数据定义方式,并删除了它们各自的 `_manifest.json` 文件。 BREAKING CHANGE: 插件加载机制已改变。所有插件必须在其 `__init__.py` 中定义一个 `__plugin_meta__` 变量,该变量是 `PluginMetadata` 类的实例,并移除旧的 `_manifest.json` 文件。
This commit is contained in:
25
src/plugin_system/base/plugin_metadata.py
Normal file
25
src/plugin_system/base/plugin_metadata.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any, Dict, List, Optional, Set
|
||||
|
||||
@dataclass
|
||||
class PluginMetadata:
|
||||
"""
|
||||
插件元数据,用于存储插件的开发者信息和用户帮助信息。
|
||||
"""
|
||||
name: str # 插件名称 (供用户查看)
|
||||
description: str # 插件功能描述
|
||||
usage: str # 插件使用方法
|
||||
|
||||
# 以下为可选字段,参考自 _manifest.json 和 NoneBot 设计
|
||||
type: Optional[str] = None # 插件类别: "library", "application"
|
||||
|
||||
# 从原 _manifest.json 迁移的字段
|
||||
version: str = "1.0.0" # 插件版本
|
||||
author: str = "" # 作者名称
|
||||
license: Optional[str] = None # 开源协议
|
||||
repository_url: Optional[str] = None # 仓库地址
|
||||
keywords: List[str] = field(default_factory=list) # 关键词
|
||||
categories: List[str] = field(default_factory=list) # 分类
|
||||
|
||||
# 扩展字段
|
||||
extra: Dict[str, Any] = field(default_factory=dict) # 其他任意信息
|
||||
Reference in New Issue
Block a user