From 143702b92b95c8fb0aa8ae9d3b9e473d8cc9d930 Mon Sep 17 00:00:00 2001 From: Raven95676 Date: Thu, 15 May 2025 10:18:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(tts):=20record=E7=BB=84=E4=BB=B6=E5=8D=95?= =?UTF-8?q?=E7=8B=AC=E5=8F=91=E9=80=81=E4=BB=A5=E4=BF=9D=E8=AF=81=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/pipeline/respond/stage.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/astrbot/core/pipeline/respond/stage.py b/astrbot/core/pipeline/respond/stage.py index bff94a64d..1bd70cd14 100644 --- a/astrbot/core/pipeline/respond/stage.py +++ b/astrbot/core/pipeline/respond/stage.py @@ -154,6 +154,11 @@ class RespondStage(Stage): except Exception as e: logger.warning(f"空内容检查异常: {e}") + record_comps = [c for c in result.chain if isinstance(c, Comp.Record)] + non_record_comps = [ + c for c in result.chain if not isinstance(c, Comp.Record) + ] + if self.enable_seg and ( (self.only_llm_result and result.is_llm_result()) or not self.only_llm_result @@ -171,8 +176,18 @@ class RespondStage(Stage): decorated_comps.append(comp) result.chain.remove(comp) break + + for rcomp in record_comps: + i = await self._calc_comp_interval(rcomp) + await asyncio.sleep(i) + try: + await event.send(MessageChain([rcomp])) + except Exception as e: + logger.error(f"发送消息失败: {e} chain: {result.chain}") + break + # 分段回复 - for comp in result.chain: + for comp in non_record_comps: i = await self._calc_comp_interval(comp) await asyncio.sleep(i) try: @@ -181,11 +196,18 @@ class RespondStage(Stage): logger.error(f"发送消息失败: {e} chain: {result.chain}") break else: + for rcomp in record_comps: + try: + await event.send(MessageChain([rcomp])) + except Exception as e: + logger.error(f"发送消息失败: {e} chain: {result.chain}") + try: - await event.send(result) + await event.send(MessageChain(non_record_comps)) except Exception as e: logger.error(traceback.format_exc()) logger.error(f"发送消息失败: {e} chain: {result.chain}") + await event._post_send() logger.info( f"AstrBot -> {event.get_sender_name()}/{event.get_sender_id()}: {event._outline_chain(result.chain)}"