From 431db8fc9b3de5df02ccdcdeab9f0b5ee5223801 Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Sun, 6 Apr 2025 08:47:17 +0000 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=B5=81=E5=BC=8F=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=81=9A=E9=94=99=E8=AF=AF=E6=8D=95=E8=8E=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qqofficial/qqofficial_message_event.py | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py b/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py index 7a6183a20..f74edd1ce 100644 --- a/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py +++ b/astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py @@ -37,28 +37,33 @@ class QQOfficialMessageEvent(AstrMessageEvent): stream_payload = {"state": 1, "id": None, "index": 0, "reset": False} last_edit_time = 0 # 上次编辑消息的时间 throttle_interval = 1 # 编辑消息的间隔时间 (秒) - async for chain in generator: - source = self.message_obj.raw_message - if not self.send_buffer: - self.send_buffer = chain - else: - self.send_buffer.chain.extend(chain.chain) + try: + async for chain in generator: + source = self.message_obj.raw_message + if not self.send_buffer: + self.send_buffer = chain + else: + self.send_buffer.chain.extend(chain.chain) + + if isinstance(source, botpy.message.C2CMessage): + # 真流式传输 + current_time = asyncio.get_event_loop().time() + time_since_last_edit = current_time - last_edit_time + + if time_since_last_edit >= throttle_interval: + ret = await self._post_send(stream=stream_payload) + stream_payload["index"] += 1 + stream_payload["id"] = ret["id"] + last_edit_time = asyncio.get_event_loop().time() if isinstance(source, botpy.message.C2CMessage): - # 真流式传输 - current_time = asyncio.get_event_loop().time() - time_since_last_edit = current_time - last_edit_time + # 结束流式对话,并且传输 buffer 中剩余的消息 + stream_payload["state"] = 10 + ret = await self._post_send(stream=stream_payload) - if time_since_last_edit >= throttle_interval: - ret = await self._post_send(stream=stream_payload) - stream_payload["index"] += 1 - stream_payload["id"] = ret["id"] - last_edit_time = asyncio.get_event_loop().time() - - if isinstance(source, botpy.message.C2CMessage): - # 结束流式对话,并且传输 buffer 中剩余的消息 - stream_payload["state"] = 10 - ret = await self._post_send(stream=stream_payload) + except Exception as e: + logger.error(f"发送流式消息时出错: {e}", exc_info=True) + self.send_buffer = None return await super().send_streaming(generator)