管理插件,但是只有一半
This commit is contained in:
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
# 官方插件修改
|
# 官方插件修改
|
||||||
1. `HelloWorld`插件现在有一个样例的`EventHandler`。
|
1. `HelloWorld`插件现在有一个样例的`EventHandler`。
|
||||||
|
2. 内置插件增加了一个通过`Command`来管理插件的功能。
|
||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
把这个看起来就很别扭的config获取方式改一下
|
把这个看起来就很别扭的config获取方式改一下
|
||||||
|
|||||||
@@ -118,17 +118,17 @@ class HelloWorldPlugin(BasePlugin):
|
|||||||
"""Hello World插件 - 你的第一个MaiCore插件"""
|
"""Hello World插件 - 你的第一个MaiCore插件"""
|
||||||
|
|
||||||
# 插件基本信息
|
# 插件基本信息
|
||||||
plugin_name = "hello_world_plugin" # 内部标识符
|
plugin_name: str = "hello_world_plugin" # 内部标识符
|
||||||
enable_plugin = True
|
enable_plugin: bool = True
|
||||||
dependencies = [] # 插件依赖列表
|
dependencies: List[str] = [] # 插件依赖列表
|
||||||
python_dependencies = [] # Python包依赖列表
|
python_dependencies: List[str] = [] # Python包依赖列表
|
||||||
config_file_name = "config.toml" # 配置文件名
|
config_file_name: str = "config.toml" # 配置文件名
|
||||||
|
|
||||||
# 配置节描述
|
# 配置节描述
|
||||||
config_section_descriptions = {"plugin": "插件基本信息", "greeting": "问候功能配置", "time": "时间查询配置"}
|
config_section_descriptions = {"plugin": "插件基本信息", "greeting": "问候功能配置", "time": "时间查询配置"}
|
||||||
|
|
||||||
# 配置Schema定义
|
# 配置Schema定义
|
||||||
config_schema = {
|
config_schema: dict = {
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": ConfigField(type=str, default="hello_world_plugin", description="插件名称"),
|
"name": ConfigField(type=str, default="hello_world_plugin", description="插件名称"),
|
||||||
"version": ConfigField(type=str, default="1.0.0", description="插件版本"),
|
"version": ConfigField(type=str, default="1.0.0", description="插件版本"),
|
||||||
|
|||||||
@@ -220,3 +220,26 @@ def locally_disable_component(component_name: str, component_type: ComponentType
|
|||||||
return global_announcement_manager.disable_specific_chat_event_handler(stream_id, component_name)
|
return global_announcement_manager.disable_specific_chat_event_handler(stream_id, component_name)
|
||||||
case _:
|
case _:
|
||||||
raise ValueError(f"未知 component type: {component_type}")
|
raise ValueError(f"未知 component type: {component_type}")
|
||||||
|
|
||||||
|
def get_locally_disabled_components(stream_id: str, component_type: ComponentType) -> list[str]:
|
||||||
|
"""
|
||||||
|
获取指定消息流中禁用的组件列表。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stream_id (str): 消息流 ID。
|
||||||
|
component_type (ComponentType): 组件类型。
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[str]: 禁用的组件名称列表。
|
||||||
|
"""
|
||||||
|
from src.plugin_system.core.global_announcement_manager import global_announcement_manager
|
||||||
|
|
||||||
|
match component_type:
|
||||||
|
case ComponentType.ACTION:
|
||||||
|
return global_announcement_manager.get_disabled_chat_actions(stream_id)
|
||||||
|
case ComponentType.COMMAND:
|
||||||
|
return global_announcement_manager.get_disabled_chat_commands(stream_id)
|
||||||
|
case ComponentType.EVENT_HANDLER:
|
||||||
|
return global_announcement_manager.get_disabled_chat_event_handlers(stream_id)
|
||||||
|
case _:
|
||||||
|
raise ValueError(f"未知 component type: {component_type}")
|
||||||
@@ -24,9 +24,8 @@ class BaseCommand(ABC):
|
|||||||
"""Command组件的名称"""
|
"""Command组件的名称"""
|
||||||
command_description: str = ""
|
command_description: str = ""
|
||||||
"""Command组件的描述"""
|
"""Command组件的描述"""
|
||||||
|
# 默认命令设置
|
||||||
# 默认命令设置(子类可以覆盖)
|
command_pattern: str = r""
|
||||||
command_pattern: str = ""
|
|
||||||
"""命令匹配的正则表达式"""
|
"""命令匹配的正则表达式"""
|
||||||
command_help: str = ""
|
command_help: str = ""
|
||||||
"""命令帮助信息"""
|
"""命令帮助信息"""
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from src.plugins.built_in.core_actions.reply import ReplyAction
|
|||||||
|
|
||||||
logger = get_logger("core_actions")
|
logger = get_logger("core_actions")
|
||||||
|
|
||||||
|
|
||||||
@register_plugin
|
@register_plugin
|
||||||
class CoreActionsPlugin(BasePlugin):
|
class CoreActionsPlugin(BasePlugin):
|
||||||
"""核心动作插件
|
"""核心动作插件
|
||||||
@@ -35,11 +36,11 @@ class CoreActionsPlugin(BasePlugin):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 插件基本信息
|
# 插件基本信息
|
||||||
plugin_name = "core_actions" # 内部标识符
|
plugin_name: str = "core_actions" # 内部标识符
|
||||||
enable_plugin = True
|
enable_plugin: bool = True
|
||||||
dependencies = [] # 插件依赖列表
|
dependencies: list[str] = [] # 插件依赖列表
|
||||||
python_dependencies = [] # Python包依赖列表
|
python_dependencies: list[str] = [] # Python包依赖列表
|
||||||
config_file_name = "config.toml"
|
config_file_name: str = "config.toml"
|
||||||
|
|
||||||
# 配置节描述
|
# 配置节描述
|
||||||
config_section_descriptions = {
|
config_section_descriptions = {
|
||||||
@@ -48,7 +49,7 @@ class CoreActionsPlugin(BasePlugin):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# 配置Schema定义
|
# 配置Schema定义
|
||||||
config_schema = {
|
config_schema: dict = {
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"enabled": ConfigField(type=bool, default=True, description="是否启用插件"),
|
"enabled": ConfigField(type=bool, default=True, description="是否启用插件"),
|
||||||
"config_version": ConfigField(type=str, default="0.4.0", description="配置文件版本"),
|
"config_version": ConfigField(type=str, default="0.4.0", description="配置文件版本"),
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
# 导入新插件系统
|
# 导入新插件系统
|
||||||
from src.plugin_system import BaseAction, ActionActivationType, ChatMode
|
from src.plugin_system import BaseAction, ActionActivationType, ChatMode
|
||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
@@ -8,6 +7,7 @@ from typing import Tuple
|
|||||||
import asyncio
|
import asyncio
|
||||||
import re
|
import re
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
# 导入依赖的系统组件
|
# 导入依赖的系统组件
|
||||||
from src.common.logger import get_logger
|
from src.common.logger import get_logger
|
||||||
|
|
||||||
@@ -20,6 +20,7 @@ from src.mais4u.constant_s4u import ENABLE_S4U
|
|||||||
|
|
||||||
logger = get_logger("reply_action")
|
logger = get_logger("reply_action")
|
||||||
|
|
||||||
|
|
||||||
class ReplyAction(BaseAction):
|
class ReplyAction(BaseAction):
|
||||||
"""回复动作 - 参与聊天回复"""
|
"""回复动作 - 参与聊天回复"""
|
||||||
|
|
||||||
@@ -61,10 +62,10 @@ class ReplyAction(BaseAction):
|
|||||||
user_id = self.user_id
|
user_id = self.user_id
|
||||||
platform = self.platform
|
platform = self.platform
|
||||||
# logger.info(f"{self.log_prefix} 用户ID: {user_id}, 平台: {platform}")
|
# logger.info(f"{self.log_prefix} 用户ID: {user_id}, 平台: {platform}")
|
||||||
person_id = get_person_info_manager().get_person_id(platform, user_id)
|
person_id = get_person_info_manager().get_person_id(platform, user_id) # type: ignore
|
||||||
# logger.info(f"{self.log_prefix} 人物ID: {person_id}")
|
# logger.info(f"{self.log_prefix} 人物ID: {person_id}")
|
||||||
person_name = get_person_info_manager().get_value_sync(person_id, "person_name")
|
person_name = get_person_info_manager().get_value_sync(person_id, "person_name")
|
||||||
reply_to = f"{person_name}:{self.action_message.get('processed_plain_text', '')}"
|
reply_to = f"{person_name}:{self.action_message.get('processed_plain_text', '')}" # type: ignore
|
||||||
logger.info(f"{self.log_prefix} 回复目标: {reply_to}")
|
logger.info(f"{self.log_prefix} 回复目标: {reply_to}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -119,11 +120,9 @@ class ReplyAction(BaseAction):
|
|||||||
# 存储动作记录
|
# 存储动作记录
|
||||||
reply_text = f"你对{person_name}进行了回复:{reply_text}"
|
reply_text = f"你对{person_name}进行了回复:{reply_text}"
|
||||||
|
|
||||||
|
|
||||||
if ENABLE_S4U:
|
if ENABLE_S4U:
|
||||||
await mai_thinking_manager.get_mai_think(self.chat_id).do_think_after_response(reply_text)
|
await mai_thinking_manager.get_mai_think(self.chat_id).do_think_after_response(reply_text)
|
||||||
|
|
||||||
|
|
||||||
await self.store_action_info(
|
await self.store_action_info(
|
||||||
action_build_into_prompt=False,
|
action_build_into_prompt=False,
|
||||||
action_prompt_display=reply_text,
|
action_prompt_display=reply_text,
|
||||||
|
|||||||
39
src/plugins/built_in/plugin_management/_manifest.json
Normal file
39
src/plugins/built_in/plugin_management/_manifest.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"manifest_version": 1,
|
||||||
|
"name": "插件和组件管理 (Plugin and Component Management)",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "通过系统API管理插件和组件的生命周期,包括加载、卸载、启用和禁用等操作。",
|
||||||
|
"author": {
|
||||||
|
"name": "MaiBot团队",
|
||||||
|
"url": "https://github.com/MaiM-with-u"
|
||||||
|
},
|
||||||
|
"license": "GPL-v3.0-or-later",
|
||||||
|
"host_application": {
|
||||||
|
"min_version": "0.9.0"
|
||||||
|
},
|
||||||
|
"homepage_url": "https://github.com/MaiM-with-u/maibot",
|
||||||
|
"repository_url": "https://github.com/MaiM-with-u/maibot",
|
||||||
|
"keywords": [
|
||||||
|
"plugins",
|
||||||
|
"components",
|
||||||
|
"management",
|
||||||
|
"built-in"
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"Core System",
|
||||||
|
"Plugin Management"
|
||||||
|
],
|
||||||
|
"default_locale": "zh-CN",
|
||||||
|
"locales_path": "_locales",
|
||||||
|
"plugin_info": {
|
||||||
|
"is_built_in": true,
|
||||||
|
"plugin_type": "plugin_management",
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"name": "plugin_management",
|
||||||
|
"description": "管理插件和组件的生命周期,包括加载、卸载、启用和禁用等操作。"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
246
src/plugins/built_in/plugin_management/plugin.py
Normal file
246
src/plugins/built_in/plugin_management/plugin.py
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
from typing import List, Tuple, Type
|
||||||
|
from src.plugin_system import (
|
||||||
|
BasePlugin,
|
||||||
|
BaseCommand,
|
||||||
|
CommandInfo,
|
||||||
|
ConfigField,
|
||||||
|
register_plugin,
|
||||||
|
plugin_manage_api,
|
||||||
|
component_manage_api,
|
||||||
|
ComponentInfo,
|
||||||
|
ComponentType,
|
||||||
|
)
|
||||||
|
from src.plugin_system.base.base_action import BaseAction
|
||||||
|
from src.plugin_system.base.base_events_handler import BaseEventHandler
|
||||||
|
from src.plugin_system.base.component_types import ActionInfo, EventHandlerInfo
|
||||||
|
|
||||||
|
|
||||||
|
class ManagementCommand(BaseCommand):
|
||||||
|
command_name: str = "management"
|
||||||
|
description: str = "管理命令"
|
||||||
|
command_pattern: str = r"(?P<manage_command>^/p_m(\s[a-zA-Z0-9_]+)*\s*$)"
|
||||||
|
intercept_message: bool = True
|
||||||
|
|
||||||
|
async def execute(self) -> Tuple[bool, str]:
|
||||||
|
command_list = self.matched_groups["manage_command"].strip().split(" ")
|
||||||
|
if len(command_list) == 1:
|
||||||
|
await self.show_help("all")
|
||||||
|
return True, "帮助已发送"
|
||||||
|
if len(command_list) == 2:
|
||||||
|
match command_list[1]:
|
||||||
|
case "plugin":
|
||||||
|
await self.show_help("plugin")
|
||||||
|
case "component":
|
||||||
|
await self.show_help("component")
|
||||||
|
case "help":
|
||||||
|
await self.show_help("all")
|
||||||
|
case _:
|
||||||
|
return False, "命令不合法"
|
||||||
|
if len(command_list) == 3:
|
||||||
|
if command_list[1] == "plugin":
|
||||||
|
match command_list[2]:
|
||||||
|
case "help":
|
||||||
|
await self.show_help("plugin")
|
||||||
|
case "list":
|
||||||
|
await self._list_registered_plugins()
|
||||||
|
case "list_enabled":
|
||||||
|
await self._list_loaded_plugins()
|
||||||
|
case "rescan":
|
||||||
|
await self._rescan_plugin_dirs()
|
||||||
|
case _:
|
||||||
|
return False, "命令不合法"
|
||||||
|
elif command_list[1] == "component":
|
||||||
|
match command_list[2]:
|
||||||
|
case "help":
|
||||||
|
await self.show_help("component")
|
||||||
|
return True, "帮助已发送"
|
||||||
|
case "list":
|
||||||
|
pass
|
||||||
|
case _:
|
||||||
|
return False, "命令不合法"
|
||||||
|
else:
|
||||||
|
return False, "命令不合法"
|
||||||
|
if len(command_list) == 4:
|
||||||
|
if command_list[1] == "plugin":
|
||||||
|
match command_list[2]:
|
||||||
|
case "load":
|
||||||
|
await self._load_plugin(command_list[3])
|
||||||
|
case "unload":
|
||||||
|
await self._unload_plugin(command_list[3])
|
||||||
|
case "reload":
|
||||||
|
await self._reload_plugin(command_list[3])
|
||||||
|
case "add_dir":
|
||||||
|
await self._add_dir(command_list[3])
|
||||||
|
case _:
|
||||||
|
return False, "命令不合法"
|
||||||
|
elif command_list[1] == "component":
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return False, "命令不合法"
|
||||||
|
if len(command_list) == 5:
|
||||||
|
pass
|
||||||
|
if len(command_list) == 6:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return True, "命令执行完成"
|
||||||
|
|
||||||
|
async def show_help(self, target: str):
|
||||||
|
help_msg = ""
|
||||||
|
match target:
|
||||||
|
case "all":
|
||||||
|
help_msg = (
|
||||||
|
"管理命令帮助\n"
|
||||||
|
"/p_m help 管理命令提示\n"
|
||||||
|
"/p_m plugin 插件管理命令\n"
|
||||||
|
"/p_m component 组件管理命令\n"
|
||||||
|
"使用 /p_m plugin help 或 /p_m component help 获取具体帮助"
|
||||||
|
)
|
||||||
|
case "plugin":
|
||||||
|
help_msg = (
|
||||||
|
"插件管理命令帮助\n"
|
||||||
|
"/p_m plugin help 插件管理命令提示\n"
|
||||||
|
"/p_m plugin list 列出所有注册的插件\n"
|
||||||
|
"/p_m plugin list_enabled 列出所有加载(启用)的插件\n"
|
||||||
|
"/p_m plugin rescan 重新扫描所有目录\n"
|
||||||
|
"/p_m plugin load <plugin_name> 加载指定插件\n"
|
||||||
|
"/p_m plugin unload <plugin_name> 卸载指定插件\n"
|
||||||
|
"/p_m plugin reload <plugin_name> 重新加载指定插件\n"
|
||||||
|
"/p_m plugin add_dir <directory_path> 添加插件目录\n"
|
||||||
|
)
|
||||||
|
case "component":
|
||||||
|
help_msg = (
|
||||||
|
"组件管理命令帮助\n"
|
||||||
|
"/p_m component help 组件管理命令提示\n"
|
||||||
|
"/p_m component list 列出所有注册的组件\n"
|
||||||
|
"/p_m component list enabled <可选: type> 列出所有启用的组件\n"
|
||||||
|
"/p_m component list disabled <可选: type> 列出所有禁用的组件\n"
|
||||||
|
" - <type> 可选项: local,代表当前聊天中的;global,代表全局的\n"
|
||||||
|
" - <type> 不填时为 global\n"
|
||||||
|
"/p_m component list type <component_type> 列出指定类型的组件\n"
|
||||||
|
"/p_m component global enable <component_name> <可选: component_type> 全局启用组件\n"
|
||||||
|
"/p_m component global disable <component_name> <可选: component_type> 全局禁用组件\n"
|
||||||
|
"/p_m component local enable <component_name> <可选: component_type> 本聊天启用组件\n"
|
||||||
|
"/p_m component local disable <component_name> <可选: component_type> 本聊天禁用组件\n"
|
||||||
|
" - <component_type> 可选项: action, command, event_handler\n"
|
||||||
|
)
|
||||||
|
case _:
|
||||||
|
return
|
||||||
|
await self.send_text(help_msg)
|
||||||
|
|
||||||
|
async def _list_loaded_plugins(self):
|
||||||
|
plugins = plugin_manage_api.list_loaded_plugins()
|
||||||
|
await self.send_text(f"已加载的插件: {', '.join(plugins)}")
|
||||||
|
|
||||||
|
async def _list_registered_plugins(self):
|
||||||
|
plugins = plugin_manage_api.list_registered_plugins()
|
||||||
|
await self.send_text(f"已注册的插件: {', '.join(plugins)}")
|
||||||
|
|
||||||
|
async def _rescan_plugin_dirs(self):
|
||||||
|
plugin_manage_api.rescan_plugin_directory()
|
||||||
|
await self.send_text("插件目录重新扫描执行中")
|
||||||
|
|
||||||
|
async def _load_plugin(self, plugin_name: str):
|
||||||
|
await self.send_text(f"正在加载插件: {plugin_name}")
|
||||||
|
success, count = plugin_manage_api.load_plugin(plugin_name)
|
||||||
|
if success:
|
||||||
|
await self.send_text(f"插件加载成功: {plugin_name}")
|
||||||
|
else:
|
||||||
|
if count == 0:
|
||||||
|
await self.send_text(f"插件{plugin_name}为禁用状态")
|
||||||
|
await self.send_text(f"插件加载失败: {plugin_name}")
|
||||||
|
|
||||||
|
async def _unload_plugin(self, plugin_name: str):
|
||||||
|
await self.send_text(f"正在卸载插件: {plugin_name}")
|
||||||
|
success = plugin_manage_api.remove_plugin(plugin_name)
|
||||||
|
if success:
|
||||||
|
await self.send_text(f"插件卸载成功: {plugin_name}")
|
||||||
|
else:
|
||||||
|
await self.send_text(f"插件卸载失败: {plugin_name}")
|
||||||
|
|
||||||
|
async def _reload_plugin(self, plugin_name: str):
|
||||||
|
await self.send_text(f"正在重新加载插件: {plugin_name}")
|
||||||
|
success = plugin_manage_api.reload_plugin(plugin_name)
|
||||||
|
if success:
|
||||||
|
await self.send_text(f"插件重新加载成功: {plugin_name}")
|
||||||
|
else:
|
||||||
|
await self.send_text(f"插件重新加载失败: {plugin_name}")
|
||||||
|
|
||||||
|
async def _add_dir(self, dir_path: str):
|
||||||
|
await self.send_text(f"正在添加插件目录: {dir_path}")
|
||||||
|
success = plugin_manage_api.add_plugin_directory(dir_path)
|
||||||
|
if success:
|
||||||
|
await self.send_text(f"插件目录添加成功: {dir_path}")
|
||||||
|
else:
|
||||||
|
await self.send_text(f"插件目录添加失败: {dir_path}")
|
||||||
|
|
||||||
|
def _fetch_all_registered_components(self) -> List[ComponentInfo]:
|
||||||
|
all_plugin_info = component_manage_api.get_all_plugin_info()
|
||||||
|
if not all_plugin_info:
|
||||||
|
return []
|
||||||
|
|
||||||
|
components_info: List[ComponentInfo] = []
|
||||||
|
for plugin_info in all_plugin_info.values():
|
||||||
|
components_info.extend(plugin_info.components)
|
||||||
|
return components_info
|
||||||
|
|
||||||
|
def _fetch_locally_disabled_components(self) -> List[str]:
|
||||||
|
locally_disabled_components_actions = component_manage_api.get_locally_disabled_components(
|
||||||
|
self.message.chat_stream.stream_id, ComponentType.ACTION
|
||||||
|
)
|
||||||
|
locally_disabled_components_commands = component_manage_api.get_locally_disabled_components(
|
||||||
|
self.message.chat_stream.stream_id, ComponentType.COMMAND
|
||||||
|
)
|
||||||
|
locally_disabled_components_event_handlers = component_manage_api.get_locally_disabled_components(
|
||||||
|
self.message.chat_stream.stream_id, ComponentType.EVENT_HANDLER
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
locally_disabled_components_actions
|
||||||
|
+ locally_disabled_components_commands
|
||||||
|
+ locally_disabled_components_event_handlers
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _list_all_registered_components(self):
|
||||||
|
components_info = self._fetch_all_registered_components()
|
||||||
|
if not components_info:
|
||||||
|
await self.send_text("没有注册的组件")
|
||||||
|
return
|
||||||
|
|
||||||
|
all_components_str = ", ".join(
|
||||||
|
f"{component.name} ({component.component_type})" for component in components_info
|
||||||
|
)
|
||||||
|
await self.send_text(f"已注册的组件: {all_components_str}")
|
||||||
|
|
||||||
|
async def _list_enabled_components(self, target_type: str = "global"):
|
||||||
|
components_info = self._fetch_all_registered_components()
|
||||||
|
if not components_info:
|
||||||
|
await self.send_text("没有注册的组件")
|
||||||
|
return
|
||||||
|
|
||||||
|
if target_type == "global":
|
||||||
|
enabled_components = [component for component in components_info if component.enabled]
|
||||||
|
if not enabled_components:
|
||||||
|
await self.send_text("没有启用的全局组件")
|
||||||
|
return
|
||||||
|
enabled_components_str = ", ".join(
|
||||||
|
f"{component.name} ({component.component_type})" for component in enabled_components
|
||||||
|
)
|
||||||
|
await self.send_text(f"启用的全局组件: {enabled_components_str}")
|
||||||
|
elif target_type == "local":
|
||||||
|
locally_disabled_components = self._fetch_locally_disabled_components()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@register_plugin
|
||||||
|
class PluginManagementPlugin(BasePlugin):
|
||||||
|
plugin_name: str = "plugin_management_plugin"
|
||||||
|
enable_plugin: bool = True
|
||||||
|
dependencies: list[str] = []
|
||||||
|
python_dependencies: list[str] = []
|
||||||
|
config_file_name: str = "config.toml"
|
||||||
|
config_schema: dict = {"plugin": {"enable": ConfigField(bool, default=True, description="是否启用插件")}}
|
||||||
|
|
||||||
|
def get_plugin_components(self) -> List[Tuple[CommandInfo, Type[BaseCommand]]]:
|
||||||
|
components = []
|
||||||
|
if self.get_config("plugin.enable", True):
|
||||||
|
components.append((ManagementCommand.get_command_info(), ManagementCommand))
|
||||||
|
return components
|
||||||
@@ -92,7 +92,7 @@ class TTSAction(BaseAction):
|
|||||||
|
|
||||||
# 确保句子结尾有合适的标点
|
# 确保句子结尾有合适的标点
|
||||||
if not any(processed_text.endswith(end) for end in [".", "?", "!", "。", "!", "?"]):
|
if not any(processed_text.endswith(end) for end in [".", "?", "!", "。", "!", "?"]):
|
||||||
processed_text = processed_text + "。"
|
processed_text = f"{processed_text}。"
|
||||||
|
|
||||||
return processed_text
|
return processed_text
|
||||||
|
|
||||||
@@ -107,11 +107,11 @@ class TTSPlugin(BasePlugin):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 插件基本信息
|
# 插件基本信息
|
||||||
plugin_name = "tts_plugin" # 内部标识符
|
plugin_name: str = "tts_plugin" # 内部标识符
|
||||||
enable_plugin = True
|
enable_plugin: bool = True
|
||||||
dependencies = [] # 插件依赖列表
|
dependencies: list[str] = [] # 插件依赖列表
|
||||||
python_dependencies = [] # Python包依赖列表
|
python_dependencies: list[str] = [] # Python包依赖列表
|
||||||
config_file_name = "config.toml"
|
config_file_name: str = "config.toml"
|
||||||
|
|
||||||
# 配置节描述
|
# 配置节描述
|
||||||
config_section_descriptions = {
|
config_section_descriptions = {
|
||||||
@@ -121,7 +121,7 @@ class TTSPlugin(BasePlugin):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# 配置Schema定义
|
# 配置Schema定义
|
||||||
config_schema = {
|
config_schema: dict = {
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": ConfigField(type=str, default="tts_plugin", description="插件名称", required=True),
|
"name": ConfigField(type=str, default="tts_plugin", description="插件名称", required=True),
|
||||||
"version": ConfigField(type=str, default="0.1.0", description="插件版本号"),
|
"version": ConfigField(type=str, default="0.1.0", description="插件版本号"),
|
||||||
|
|||||||
Reference in New Issue
Block a user