From 4a530a7bca0bd1a80d2d65c07d936b8a9926d757 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Wed, 26 Nov 2025 16:38:34 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9Aplanner=E5=92=8Creplyer=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E5=A4=84=E7=90=86=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/brain_chat/brain_chat.py | 1 + src/chat/brain_chat/brain_planner.py | 1 + src/chat/heart_flow/heartFC_chat.py | 1 + src/chat/planner_actions/action_modifier.py | 1 + src/chat/planner_actions/planner.py | 1 + src/chat/replyer/group_generator.py | 3 +++ src/chat/replyer/private_generator.py | 3 +++ src/chat/utils/chat_message_builder.py | 10 ++++++++-- src/common/data_models/message_data_model.py | 4 ++++ src/plugin_system/apis/message_api.py | 16 +++++++++++++--- 10 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/chat/brain_chat/brain_chat.py b/src/chat/brain_chat/brain_chat.py index c1b09fb7..6eede670 100644 --- a/src/chat/brain_chat/brain_chat.py +++ b/src/chat/brain_chat/brain_chat.py @@ -278,6 +278,7 @@ class BrainChatting: chat_id=self.stream_id, timestamp=time.time(), limit=int(global_config.chat.max_context_size * 0.6), + filter_no_read_command=True, ) chat_content_block, message_id_list = build_readable_messages_with_id( messages=message_list_before_now, diff --git a/src/chat/brain_chat/brain_planner.py b/src/chat/brain_chat/brain_planner.py index 55a8771b..739ff106 100644 --- a/src/chat/brain_chat/brain_planner.py +++ b/src/chat/brain_chat/brain_planner.py @@ -226,6 +226,7 @@ class BrainPlanner: chat_id=self.chat_id, timestamp=time.time(), limit=int(global_config.chat.max_context_size * 0.6), + filter_no_read_command=True, ) message_id_list: list[Tuple[str, "DatabaseMessages"]] = [] chat_content_block, message_id_list = build_readable_messages_with_id( diff --git a/src/chat/heart_flow/heartFC_chat.py b/src/chat/heart_flow/heartFC_chat.py index 4e28eae2..8d0aec26 100644 --- a/src/chat/heart_flow/heartFC_chat.py +++ b/src/chat/heart_flow/heartFC_chat.py @@ -484,6 +484,7 @@ class HeartFChatting: chat_id=self.stream_id, timestamp=time.time(), limit=int(global_config.chat.max_context_size * 0.6), + filter_no_read_command=True, ) chat_content_block, message_id_list = build_readable_messages_with_id( messages=message_list_before_now, diff --git a/src/chat/planner_actions/action_modifier.py b/src/chat/planner_actions/action_modifier.py index def8322a..739d9999 100644 --- a/src/chat/planner_actions/action_modifier.py +++ b/src/chat/planner_actions/action_modifier.py @@ -69,6 +69,7 @@ class ActionModifier: chat_id=self.chat_stream.stream_id, timestamp=time.time(), limit=min(int(global_config.chat.max_context_size * 0.33), 10), + filter_no_read_command=True, ) chat_content = build_readable_messages( diff --git a/src/chat/planner_actions/planner.py b/src/chat/planner_actions/planner.py index 5d10903c..b6ef7e19 100644 --- a/src/chat/planner_actions/planner.py +++ b/src/chat/planner_actions/planner.py @@ -293,6 +293,7 @@ class ActionPlanner: chat_id=self.chat_id, timestamp=time.time(), limit=int(global_config.chat.max_context_size * 0.6), + filter_no_read_command=True, ) message_id_list: list[Tuple[str, "DatabaseMessages"]] = [] chat_content_block, message_id_list = build_readable_messages_with_id( diff --git a/src/chat/replyer/group_generator.py b/src/chat/replyer/group_generator.py index 5765da47..2ee403cc 100644 --- a/src/chat/replyer/group_generator.py +++ b/src/chat/replyer/group_generator.py @@ -751,12 +751,14 @@ class DefaultReplyer: chat_id=chat_id, timestamp=reply_time_point, limit=global_config.chat.max_context_size * 1, + filter_no_read_command=True, ) message_list_before_short = get_raw_msg_before_timestamp_with_chat( chat_id=chat_id, timestamp=reply_time_point, limit=int(global_config.chat.max_context_size * 0.33), + filter_no_read_command=True, ) person_list_short: List[Person] = [] @@ -941,6 +943,7 @@ class DefaultReplyer: chat_id=chat_id, timestamp=time.time(), limit=min(int(global_config.chat.max_context_size * 0.33), 15), + filter_no_read_command=True, ) chat_talking_prompt_half = build_readable_messages( message_list_before_now_half, diff --git a/src/chat/replyer/private_generator.py b/src/chat/replyer/private_generator.py index 7acf8d9e..93543cf5 100644 --- a/src/chat/replyer/private_generator.py +++ b/src/chat/replyer/private_generator.py @@ -663,6 +663,7 @@ class PrivateReplyer: chat_id=chat_id, timestamp=time.time(), limit=global_config.chat.max_context_size, + filter_no_read_command=True, ) dialogue_prompt = build_readable_messages( @@ -677,6 +678,7 @@ class PrivateReplyer: chat_id=chat_id, timestamp=time.time(), limit=int(global_config.chat.max_context_size * 0.33), + filter_no_read_command=True, ) person_list_short: List[Person] = [] @@ -878,6 +880,7 @@ class PrivateReplyer: chat_id=chat_id, timestamp=time.time(), limit=min(int(global_config.chat.max_context_size * 0.33), 15), + filter_no_read_command=True, ) chat_talking_prompt_half = build_readable_messages( message_list_before_now_half, diff --git a/src/chat/utils/chat_message_builder.py b/src/chat/utils/chat_message_builder.py index 2938fff1..b45a53b3 100644 --- a/src/chat/utils/chat_message_builder.py +++ b/src/chat/utils/chat_message_builder.py @@ -302,13 +302,17 @@ def get_raw_msg_before_timestamp(timestamp: float, limit: int = 0) -> List[Datab return find_messages(message_filter=filter_query, sort=sort_order, limit=limit) -def get_raw_msg_before_timestamp_with_chat(chat_id: str, timestamp: float, limit: int = 0) -> List[DatabaseMessages]: +def get_raw_msg_before_timestamp_with_chat( + chat_id: str, timestamp: float, limit: int = 0, filter_no_read_command: bool = False +) -> List[DatabaseMessages]: """获取指定时间戳之前的消息,按时间升序排序,返回消息列表 limit: 限制返回的消息数量,0为不限制 """ filter_query = {"chat_id": chat_id, "time": {"$lt": timestamp}} sort_order = [("time", 1)] - return find_messages(message_filter=filter_query, sort=sort_order, limit=limit) + return find_messages( + message_filter=filter_query, sort=sort_order, limit=limit, filter_no_read_command=filter_no_read_command + ) def get_raw_msg_before_timestamp_with_users( @@ -468,6 +472,8 @@ def _build_readable_messages_internal( # 使用独立函数处理用户引用格式 if content := replace_user_references(content, platform, replace_bot_name=replace_bot_name): + if getattr(message, "is_command", False): + content = f"[is_command=True] {content}" detailed_messages_raw.append((timestamp, person_name, content, False)) if not detailed_messages_raw: diff --git a/src/common/data_models/message_data_model.py b/src/common/data_models/message_data_model.py index a3d5751f..3c4c5505 100644 --- a/src/common/data_models/message_data_model.py +++ b/src/common/data_models/message_data_model.py @@ -21,6 +21,8 @@ class MessageAndActionModel(BaseDataModel): chat_info_platform: str = field(default_factory=str) is_action_record: bool = field(default=False) action_name: Optional[str] = None + is_command: bool = field(default=False) + is_no_read_command: bool = field(default=False) @classmethod def from_DatabaseMessages(cls, message: "DatabaseMessages"): @@ -34,6 +36,8 @@ class MessageAndActionModel(BaseDataModel): processed_plain_text=message.processed_plain_text, display_message=message.display_message, chat_info_platform=message.chat_info.platform, + is_command=message.is_command, + is_no_read_command=getattr(message, "is_no_read_command", False), ) diff --git a/src/plugin_system/apis/message_api.py b/src/plugin_system/apis/message_api.py index 4fb65ccb..6a4805b2 100644 --- a/src/plugin_system/apis/message_api.py +++ b/src/plugin_system/apis/message_api.py @@ -280,7 +280,11 @@ def get_messages_before_time(timestamp: float, limit: int = 0, filter_mai: bool def get_messages_before_time_in_chat( - chat_id: str, timestamp: float, limit: int = 0, filter_mai: bool = False + chat_id: str, + timestamp: float, + limit: int = 0, + filter_mai: bool = False, + filter_no_read_command: bool = False, ) -> List[DatabaseMessages]: """ 获取指定聊天中指定时间戳之前的消息 @@ -305,9 +309,15 @@ def get_messages_before_time_in_chat( raise ValueError("chat_id 不能为空") if not isinstance(chat_id, str): raise ValueError("chat_id 必须是字符串类型") + messages = get_raw_msg_before_timestamp_with_chat( + chat_id=chat_id, + timestamp=timestamp, + limit=limit, + filter_no_read_command=filter_no_read_command, + ) if filter_mai: - return filter_mai_messages(get_raw_msg_before_timestamp_with_chat(chat_id, timestamp, limit)) - return get_raw_msg_before_timestamp_with_chat(chat_id, timestamp, limit) + return filter_mai_messages(messages) + return messages def get_messages_before_time_for_users(