diff --git a/src/chat/heart_flow/heartflow_message_processor.py b/src/chat/heart_flow/heartflow_message_processor.py index 41ba6942..8227306f 100644 --- a/src/chat/heart_flow/heartflow_message_processor.py +++ b/src/chat/heart_flow/heartflow_message_processor.py @@ -12,7 +12,7 @@ from src.chat.message_receive.storage import MessageStorage from src.chat.heart_flow.heartflow import heartflow from src.chat.utils.utils import is_mentioned_bot_in_message from src.chat.utils.timer_calculator import Timer -from src.chat.utils.chat_message_builder import replace_user_references_sync +from src.chat.utils.chat_message_builder import replace_user_references from src.common.logger import get_logger from src.mood.mood_manager import mood_manager from src.person_info.person_info import Person @@ -131,7 +131,7 @@ class HeartFCMessageReceiver: processed_plain_text = re.sub(picid_pattern, "[图片]", message.processed_plain_text) # 应用用户引用格式替换,将回复和@格式转换为可读格式 - processed_plain_text = replace_user_references_sync( + processed_plain_text = replace_user_references( processed_plain_text, message.message_info.platform, # type: ignore replace_bot_name=True diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index 0dca9f60..6ef225e4 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -22,7 +22,7 @@ from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.utils.chat_message_builder import ( build_readable_messages, get_raw_msg_before_timestamp_with_chat, - replace_user_references_sync, + replace_user_references, ) from src.chat.express.expression_selector import expression_selector from src.chat.memory_system.memory_activator import MemoryActivator @@ -717,7 +717,7 @@ class DefaultReplyer: else: mood_prompt = "" - target = replace_user_references_sync(target, chat_stream.platform, replace_bot_name=True) + target = replace_user_references(target, chat_stream.platform, replace_bot_name=True) message_list_before_now_long = get_raw_msg_before_timestamp_with_chat( chat_id=chat_id, diff --git a/src/chat/utils/chat_message_builder.py b/src/chat/utils/chat_message_builder.py index 51ecb46d..a79088da 100644 --- a/src/chat/utils/chat_message_builder.py +++ b/src/chat/utils/chat_message_builder.py @@ -19,8 +19,8 @@ install(extra_lines=3) logger = get_logger("chat_message_builder") -def replace_user_references_sync( - content: str, +def replace_user_references( + content: Optional[str], platform: str, name_resolver: Optional[Callable[[str, str], str]] = None, replace_bot_name: bool = True, @@ -38,6 +38,8 @@ def replace_user_references_sync( Returns: str: 处理后的内容字符串 """ + if not content: + return "" if name_resolver is None: def default_resolver(platform: str, user_id: str) -> str: @@ -93,80 +95,6 @@ def replace_user_references_sync( return content -async def replace_user_references_async( - content: str, - platform: str, - name_resolver: Optional[Callable[[str, str], Any]] = None, - replace_bot_name: bool = True, -) -> str: - """ - 替换内容中的用户引用格式,包括回复和@格式 - - Args: - content: 要处理的内容字符串 - platform: 平台标识 - name_resolver: 名称解析函数,接收(platform, user_id)参数,返回用户名称 - 如果为None,则使用默认的person_info_manager - replace_bot_name: 是否将机器人的user_id替换为"机器人昵称(你)" - - Returns: - str: 处理后的内容字符串 - """ - if name_resolver is None: - - async def default_resolver(platform: str, user_id: str) -> str: - # 检查是否是机器人自己 - if replace_bot_name and user_id == global_config.bot.qq_account: - return f"{global_config.bot.nickname}(你)" - person = Person(platform=platform, user_id=user_id) - return person.person_name or user_id # type: ignore - - name_resolver = default_resolver - - # 处理回复格式 - reply_pattern = r"回复<([^:<>]+):([^:<>]+)>" - match = re.search(reply_pattern, content) - if match: - aaa = match.group(1) - bbb = match.group(2) - try: - # 检查是否是机器人自己 - if replace_bot_name and bbb == global_config.bot.qq_account: - reply_person_name = f"{global_config.bot.nickname}(你)" - else: - reply_person_name = await name_resolver(platform, bbb) or aaa - content = re.sub(reply_pattern, f"回复 {reply_person_name}", content, count=1) - except Exception: - # 如果解析失败,使用原始昵称 - content = re.sub(reply_pattern, f"回复 {aaa}", content, count=1) - - # 处理@格式 - at_pattern = r"@<([^:<>]+):([^:<>]+)>" - at_matches = list(re.finditer(at_pattern, content)) - if at_matches: - new_content = "" - last_end = 0 - for m in at_matches: - new_content += content[last_end : m.start()] - aaa = m.group(1) - bbb = m.group(2) - try: - # 检查是否是机器人自己 - if replace_bot_name and bbb == global_config.bot.qq_account: - at_person_name = f"{global_config.bot.nickname}(你)" - else: - at_person_name = await name_resolver(platform, bbb) or aaa - new_content += f"@{at_person_name}" - except Exception: - # 如果解析失败,使用原始昵称 - new_content += f"@{aaa}" - last_end = m.end() - new_content += content[last_end:] - content = new_content - - return content - - def get_raw_msg_by_timestamp(timestamp_start: float, timestamp_end: float, limit: int = 0, limit_mode: str = "latest"): """ 获取从指定时间戳到指定时间戳的消息,按时间升序排序,返回消息列表 @@ -498,7 +426,7 @@ def _build_readable_messages_internal( person_name = f"{global_config.bot.nickname}(你)" # 使用独立函数处理用户引用格式 - if content := replace_user_references_sync(content, platform, replace_bot_name=replace_bot_name): + if content := replace_user_references(content, platform, replace_bot_name=replace_bot_name): detailed_messages_raw.append((timestamp, person_name, content, False)) if not detailed_messages_raw: @@ -942,7 +870,7 @@ async def build_anonymous_messages(messages: List[DatabaseMessages]) -> str: except Exception: return "?" - content = replace_user_references_sync(content, platform, anon_name_resolver, replace_bot_name=False) + content = replace_user_references(content, platform, anon_name_resolver, replace_bot_name=False) header = f"{anon_name}说 " output_lines.append(header)