feat: 适配器类插件支持设置默认配置模板

This commit is contained in:
Soulter
2025-01-09 19:45:18 +08:00
parent 2a7dce1eb0
commit 90a9e496d9
4 changed files with 24 additions and 4 deletions
+3 -1
View File
@@ -2,4 +2,6 @@ from dataclasses import dataclass
@dataclass
class PlatformMetadata():
name: str # 平台的名称
description: str # 平台的描述
description: str # 平台的描述
default_config_tmpl: dict = None # 平台的默认配置模板
+13 -2
View File
@@ -7,15 +7,26 @@ platform_registry: List[PlatformMetadata] = []
platform_cls_map: Dict[str, Type] = {}
'''维护了平台适配器名称和适配器类的映射'''
def register_platform_adapter(adapter_name: str, desc: str):
'''用于注册平台适配器的带参装饰器'''
def register_platform_adapter(adapter_name: str, desc: str, default_config_tmpl: dict = None):
'''用于注册平台适配器的带参装饰器
default_config_tmpl 指定了平台适配器的默认配置模板。用户填写好后将会作为 platform_config 传入你的 Platform 类的实现类。
'''
def decorator(cls):
if adapter_name in platform_cls_map:
raise ValueError(f"平台适配器 {adapter_name} 已经注册过了,可能发生了适配器命名冲突。")
# 添加必备选项
if default_config_tmpl:
if 'type' not in default_config_tmpl:
default_config_tmpl['type'] = adapter_name
if 'enable' not in default_config_tmpl:
default_config_tmpl['enable'] = False
pm = PlatformMetadata(
name=adapter_name,
description=desc,
default_config_tmpl=default_config_tmpl
)
platform_registry.append(pm)
platform_cls_map[adapter_name] = cls
+1 -1
View File
@@ -102,7 +102,7 @@ class PluginManager:
'''更新插件的依赖'''
args = ['install', '-r', path, '--trusted-host', 'mirrors.aliyun.com', '-i', 'https://mirrors.aliyun.com/pypi/simple/']
if self.config.pip_install_arg:
args.extend(self.config.pip_install_arg)
args.extend([self.config.pip_install_arg])
result_code = pip_main(args)
if result_code != 0:
raise Exception(str(result_code))
+7
View File
@@ -7,6 +7,7 @@ from astrbot.core.config.default import CONFIG_METADATA_2, DEFAULT_VALUE_MAP
from astrbot.core.config.astrbot_config import AstrBotConfig
from astrbot.core.star.config import update_config
from astrbot.core.core_lifecycle import AstrBotCoreLifecycle
from astrbot.core.platform.register import platform_registry
def try_cast(value: str, type_: str):
if type_ == "int" and value.isdigit():
@@ -121,6 +122,12 @@ class ConfigRoute(Route):
async def _get_astrbot_config(self):
config = self.config
platform_default_tmpl = CONFIG_METADATA_2['platform_group']['metadata']['platform']['config_template']
for platform in platform_registry:
if platform.default_config_tmpl:
platform_default_tmpl[platform.name] = platform.default_config_tmpl
return {
"metadata": CONFIG_METADATA_2,
"config": config