From d6b5842d06d6bec415ce8af91846adca672b3a26 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Sun, 16 Nov 2025 15:34:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(napcat=5Fadapter):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=9C=B0=E5=9D=80=E5=92=8C=E7=AB=AF?= =?UTF-8?q?=E5=8F=A3=E9=85=8D=E7=BD=AE=E9=80=89=E9=A1=B9=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=85=88=E4=BD=BF=E7=94=A8=E6=8F=92=E4=BB=B6=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20feat(tts=5Fplugin):=20=E4=BC=98=E5=8C=96TTS=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF=E6=8C=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=9B=9E=E5=A4=8D=E5=B9=B6=E5=A4=84=E7=90=86=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../built_in/napcat_adapter_plugin/plugin.py | 2 ++ .../src/mmc_com_layer.py | 21 +++++++++--- src/plugins/built_in/tts_plugin/plugin.py | 34 +++++++++++++++---- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/plugins/built_in/napcat_adapter_plugin/plugin.py b/src/plugins/built_in/napcat_adapter_plugin/plugin.py index a228cec7b..e75b08110 100644 --- a/src/plugins/built_in/napcat_adapter_plugin/plugin.py +++ b/src/plugins/built_in/napcat_adapter_plugin/plugin.py @@ -279,6 +279,8 @@ class NapcatAdapterPlugin(BasePlugin): }, "maibot_server": { "platform_name": ConfigField(type=str, default="qq", description="平台名称,用于消息路由"), + "host": ConfigField(type=str, default="", description="MoFox-Bot服务器地址,留空则使用全局配置"), + "port": ConfigField(type=int, default=0, description="MoFox-Bot服务器端口,设为0则使用全局配置"), }, "voice": { "use_tts": ConfigField( diff --git a/src/plugins/built_in/napcat_adapter_plugin/src/mmc_com_layer.py b/src/plugins/built_in/napcat_adapter_plugin/src/mmc_com_layer.py index 444eb1934..3abf48b18 100644 --- a/src/plugins/built_in/napcat_adapter_plugin/src/mmc_com_layer.py +++ b/src/plugins/built_in/napcat_adapter_plugin/src/mmc_com_layer.py @@ -15,10 +15,23 @@ def create_router(plugin_config: dict): """创建路由器实例""" global router platform_name = config_api.get_plugin_config(plugin_config, "maibot_server.platform_name", "qq") - server = get_global_server() - host = server.host - port = server.port - logger.debug(f"初始化MoFox-Bot连接,使用地址:{host}:{port}") + + # 优先从插件配置读取 host 和 port,如果不存在则回退到全局配置 + config_host = config_api.get_plugin_config(plugin_config, "maibot_server.host", "") + config_port = config_api.get_plugin_config(plugin_config, "maibot_server.port", 0) + + if config_host and config_port > 0: + # 使用插件配置 + host = config_host + port = config_port + logger.debug(f"初始化MoFox-Bot连接,使用插件配置地址:{host}:{port}") + else: + # 回退到全局配置 + server = get_global_server() + host = server.host + port = server.port + logger.debug(f"初始化MoFox-Bot连接,使用全局配置地址:{host}:{port}") + route_config = RouteConfig( route_config={ platform_name: TargetConfig( diff --git a/src/plugins/built_in/tts_plugin/plugin.py b/src/plugins/built_in/tts_plugin/plugin.py index 8c4cdbf62..2fd272dfa 100644 --- a/src/plugins/built_in/tts_plugin/plugin.py +++ b/src/plugins/built_in/tts_plugin/plugin.py @@ -6,6 +6,8 @@ from src.plugin_system.base.base_action import ActionActivationType, BaseAction, from src.plugin_system.base.base_plugin import BasePlugin from src.plugin_system.base.component_types import ComponentInfo from src.plugin_system.base.config_types import ConfigField +from src.plugin_system.apis.generator_api import generate_reply +from src.config.config import global_config logger = get_logger("tts") @@ -49,16 +51,34 @@ class TTSAction(BaseAction): """处理TTS文本转语音动作""" logger.info(f"{self.log_prefix} 执行TTS动作: {self.reasoning}") - # 获取要转换的文本 - text = self.action_data.get("text") - if not text: - logger.error(f"{self.log_prefix} 执行TTS动作时未提供文本内容") - return False, "执行TTS动作失败:未提供文本内容" + success, response_set, _ = await generate_reply( + chat_stream=self.chat_stream, + reply_message=self.chat_stream.context_manager.context.get_last_message(), + enable_tool=global_config.tool.enable_tool, + request_type="chat.tts", + from_plugin=False, + ) - # 确保文本适合TTS使用 - processed_text = self._process_text_for_tts(text) + reply_text = "" + for reply_seg in response_set: + # 调试日志:验证reply_seg的格式 + logger.debug(f"Processing reply_seg type: {type(reply_seg)}, content: {reply_seg}") + # 修正:正确处理元组格式 (格式为: (type, content)) + if isinstance(reply_seg, tuple) and len(reply_seg) >= 2: + _, data = reply_seg + else: + # 向下兼容:如果已经是字符串,则直接使用 + data = str(reply_seg) + + if isinstance(data, list): + data = "".join(map(str, data)) + reply_text += data + + # 处理文本以优化TTS效果 + processed_text = self._process_text_for_tts(reply_text) + try: # 发送TTS消息 await self.send_custom(message_type="tts_text", content=processed_text)