diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index 8969f814..5f479615 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -180,6 +180,23 @@ class ChatBot: return + async def echo_message_process(self, raw_data: Dict[str, Any]) -> None: + """ + 用于专门处理回送消息ID的函数 + """ + message_data: Dict[str, Any] = raw_data.get("content", {}) + if not message_data: + return + message_type = message_data.get("type") + if message_type != "echo": + return + mmc_message_id = message_data.get("echo") + actual_message_id = message_data.get("actual_id") + if MessageStorage.update_message(mmc_message_id, actual_message_id): + logger.debug(f"更新消息ID成功: {mmc_message_id} -> {actual_message_id}") + else: + logger.warning(f"更新消息ID失败: {mmc_message_id} -> {actual_message_id}") + async def message_process(self, message_data: Dict[str, Any]) -> None: """处理转化后的统一格式消息 这个函数本质是预处理一些数据,根据配置信息和消息内容,预处理消息,并分发到合适的消息处理器中 @@ -215,14 +232,8 @@ class ChatBot: # print(message_data) # logger.debug(str(message_data)) message = MessageRecv(message_data) - group_info = message.message_info.group_info user_info = message.message_info.user_info - if message.message_info.additional_config: - sent_message = message.message_info.additional_config.get("echo", False) - if sent_message: # 处理上报的自身消息,更新message_id,需要ada支持上报事件 - await MessageStorage.update_message(message) - return continue_flag, modified_message = await events_manager.handle_mai_events( EventType.ON_MESSAGE_PRE_PROCESS, message diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index 37c9d188..a60bd24c 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -143,31 +143,26 @@ class MessageStorage: # 如果需要其他存储相关的函数,可以在这里添加 @staticmethod - async def update_message( - message: MessageRecv, - ) -> None: # 用于实时更新数据库的自身发送消息ID,目前能处理text,reply,image和emoji - """更新最新一条匹配消息的message_id""" + def update_message(mmc_message_id: str | None, qq_message_id: str | None) -> bool: + """实时更新数据库的自身发送消息ID""" try: - if message.message_segment.type == "notify": - mmc_message_id = message.message_segment.data.get("echo") # type: ignore - qq_message_id = message.message_segment.data.get("actual_id") # type: ignore - else: - logger.info(f"更新消息ID错误,seg类型为{message.message_segment.type}") - return if not qq_message_id: logger.info("消息不存在message_id,无法更新") - return + return False if matched_message := ( Messages.select().where((Messages.message_id == mmc_message_id)).order_by(Messages.time.desc()).first() ): # 更新找到的消息记录 Messages.update(message_id=qq_message_id).where(Messages.id == matched_message.id).execute() # type: ignore logger.debug(f"更新消息ID成功: {matched_message.message_id} -> {qq_message_id}") + return True else: logger.debug("未找到匹配的消息") + return False except Exception as e: logger.error(f"更新消息ID失败: {e}") + return False @staticmethod def replace_image_descriptions(text: str) -> str: diff --git a/src/main.py b/src/main.py index f007788f..e4935559 100644 --- a/src/main.py +++ b/src/main.py @@ -32,7 +32,6 @@ logger = get_logger("main") class MainSystem: def __init__(self): - # 使用消息API替代直接的FastAPI实例 self.app: MessageServer = get_global_api() self.server: Server = get_global_server() @@ -105,6 +104,7 @@ class MainSystem: # 将bot.py中的chat_bot.message_process消息处理函数注册到api.py的消息处理基类中 self.app.register_message_handler(chat_bot.message_process) + self.app.register_custom_message_handler("message_id_echo", chat_bot.echo_message_process) await check_and_run_migrations()