From 4501e19dc8d4edb06d361f597557e882a44c6d16 Mon Sep 17 00:00:00 2001 From: meng_xi_pan Date: Wed, 16 Apr 2025 14:06:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=A0=E4=B8=BA=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=B1=BB=E5=9E=8B=E7=BB=93=E6=9E=84=E5=8F=98=E5=8A=A8?= =?UTF-8?q?=E8=80=8C=E5=AF=BC=E8=87=B4buffer=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/message_buffer.py | 24 +++++++++++++++---- .../reasoning_chat/reasoning_chat.py | 14 ++++++++--- .../think_flow_chat/think_flow_chat.py | 14 ++++++++--- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/plugins/chat/message_buffer.py b/src/plugins/chat/message_buffer.py index 21e490433..c2cfaa826 100644 --- a/src/plugins/chat/message_buffer.py +++ b/src/plugins/chat/message_buffer.py @@ -3,7 +3,7 @@ from src.common.logger import get_module_logger import asyncio from dataclasses import dataclass, field from .message import MessageRecv -from ..message.message_base import BaseMessageInfo, GroupInfo +from ..message.message_base import BaseMessageInfo, GroupInfo, Seg import hashlib from typing import Dict from collections import OrderedDict @@ -130,22 +130,36 @@ class MessageBuffer: keep_msgs = OrderedDict() combined_text = [] found = False - type = "text" + type = "seglist" is_update = True for msg_id, msg in self.buffer_pool[person_id_].items(): if msg_id == message.message_info.message_id: found = True - type = msg.message.message_segment.type + if msg.message.message_segment.type != "seglist": + type = msg.message.message_segment.type + else: + if (isinstance(msg.message.message_segment.data, list) + and all(isinstance(x, Seg) for x in msg.message.message_segment.data) + and len(msg.message.message_segment.data) == 1): + type = msg.message.message_segment.data[0].type combined_text.append(msg.message.processed_plain_text) continue if found: keep_msgs[msg_id] = msg elif msg.result == "F": # 收集F消息的文本内容 + F_type = "seglist" + if msg.message.message_segment.type != "seglist": + F_type = msg.message.message_segment.type + else: + if (isinstance(msg.message.message_segment.data, list) + and all(isinstance(x, Seg) for x in msg.message.message_segment.data) + and len(msg.message.message_segment.data) == 1): + F_type = msg.message.message_segment.data[0].type if hasattr(msg.message, "processed_plain_text") and msg.message.processed_plain_text: - if msg.message.message_segment.type == "text": + if F_type == "text": combined_text.append(msg.message.processed_plain_text) - elif msg.message.message_segment.type != "text": + elif F_type != "text": is_update = False elif msg.result == "U": logger.debug(f"异常未处理信息id: {msg.message.message_info.message_id}") diff --git a/src/plugins/chat_module/reasoning_chat/reasoning_chat.py b/src/plugins/chat_module/reasoning_chat/reasoning_chat.py index 2ce218a6f..acc381f80 100644 --- a/src/plugins/chat_module/reasoning_chat/reasoning_chat.py +++ b/src/plugins/chat_module/reasoning_chat/reasoning_chat.py @@ -192,11 +192,19 @@ class ReasoningChat: if not buffer_result: await willing_manager.bombing_buffer_message_handle(message.message_info.message_id) willing_manager.delete(message.message_info.message_id) - if message.message_segment.type == "text": + F_type = "seglist" + if message.message_segment.type != "seglist": + F_type =message.message_segment.type + else: + if (isinstance(message.message_segment.data, list) + and all(isinstance(x, Seg) for x in message.message_segment.data) + and len(message.message_segment.data) == 1): + F_type = message.message_segment.data[0].type + if F_type == "text": logger.info(f"触发缓冲,已炸飞消息:{message.processed_plain_text}") - elif message.message_segment.type == "image": + elif F_type == "image": logger.info("触发缓冲,已炸飞表情包/图片") - elif message.message_segment.type == "seglist": + elif F_type == "seglist": logger.info("触发缓冲,已炸飞消息列") return diff --git a/src/plugins/chat_module/think_flow_chat/think_flow_chat.py b/src/plugins/chat_module/think_flow_chat/think_flow_chat.py index 1e8e844eb..74d88dd4d 100644 --- a/src/plugins/chat_module/think_flow_chat/think_flow_chat.py +++ b/src/plugins/chat_module/think_flow_chat/think_flow_chat.py @@ -204,11 +204,19 @@ class ThinkFlowChat: if not buffer_result: await willing_manager.bombing_buffer_message_handle(message.message_info.message_id) willing_manager.delete(message.message_info.message_id) - if message.message_segment.type == "text": + F_type = "seglist" + if message.message_segment.type != "seglist": + F_type =message.message_segment.type + else: + if (isinstance(message.message_segment.data, list) + and all(isinstance(x, Seg) for x in message.message_segment.data) + and len(message.message_segment.data) == 1): + F_type = message.message_segment.data[0].type + if F_type == "text": logger.info(f"触发缓冲,已炸飞消息:{message.processed_plain_text}") - elif message.message_segment.type == "image": + elif F_type == "image": logger.info("触发缓冲,已炸飞表情包/图片") - elif message.message_segment.type == "seglist": + elif F_type == "seglist": logger.info("触发缓冲,已炸飞消息列") return