From 63eb67843344c6b476f5bf25b4443704e14e78c0 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Thu, 26 Jun 2025 23:16:13 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86mmc=E5=AF=B9?= =?UTF-8?q?=E4=BA=8E=E4=B8=8A=E6=8A=A5=E6=B6=88=E6=81=AF=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=86=85message=5Fid=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 目前只能支持text,image,emoji和reply的message_id更新 --- src/chat/message_receive/bot.py | 7 ++ src/chat/message_receive/storage.py | 111 +++++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 1 deletion(-) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index 62f074636..9e46fc7ac 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -131,6 +131,13 @@ class ChatBot: message = MessageRecv(message_data) group_info = message.message_info.group_info user_info = message.message_info.user_info + sent_message = message.message_info.additional_config.get("sent_message", False) + + if user_info.user_id == global_config.bot.qq_account and sent_message: # 这一段只是为了在一切处理前劫持上报的自身消息,用于更新message_id,需要ada支持上报事件,实际测试中不会对正常使用造成任何问题 + await message.process() + await MessageStorage.update_message(message) + return + get_chat_manager().register_message(message) # 创建聊天流 diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index ac7818842..78a72d016 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -1,10 +1,13 @@ import re -from typing import Union +import base64 +import hashlib +from typing import Union, List # from ...common.database.database import db # db is now Peewee's SqliteDatabase instance from .message import MessageSending, MessageRecv from .chat_stream import ChatStream from ...common.database.database_model import Messages, RecalledMessages # Import Peewee models +from ...common.database.database_model import Images from src.common.logger import get_logger logger = get_logger("message_storage") @@ -103,3 +106,109 @@ class MessageStorage: # 如果需要其他存储相关的函数,可以在这里添加 + @staticmethod + async def update_message(message: MessageRecv) -> None: # 用于实时更新数据库的自身发送消息ID,目前能处理text,reply,image和emoji + """更新最新一条匹配消息的message_id,区分文字和图片情况""" + try: + new_message_id = message.message_info.message_id + user_id = message.message_info.user_info.user_id + + # 检查消息是否包含图片 + image_hashes = MessageStorage._extract_image_hashes(message.message_segment) + + if image_hashes: + # 图片消息处理 + await MessageStorage._update_image_message(message, new_message_id, user_id, image_hashes) + else: + # 文本消息处理 + await MessageStorage._update_text_message(message, new_message_id, user_id) + + except Exception: + logger.exception("更新消息ID失败") + + @staticmethod + def _extract_image_hashes(segment) -> List[str]: + """递归提取消息段中的所有图片哈希值""" + hashes = [] + + if segment.type == "image" or segment.type == "emoji": + try: + # 计算图片哈希值 + binary_data = base64.b64decode(segment.data) + file_hash = hashlib.md5(binary_data).hexdigest() + hashes.append(file_hash) + except Exception as e: + logger.error(f"计算图片哈希失败: {e}") + + elif segment.type == "seglist": + # 递归处理子消息段 + for sub_seg in segment.data: + hashes.extend(MessageStorage._extract_image_hashes(sub_seg)) + + return hashes + + @staticmethod + async def _update_image_message(message: MessageRecv, new_message_id: str, user_id: str, image_hashes: List[str]) -> None: + """处理图片消息的更新逻辑""" + + # 使用第一张图片的哈希值查询描述 + first_image_hash = image_hashes[0] + logger.info(f"{first_image_hash}") + + try: + # 查询图片描述 + image_desc = Images.get_or_none( + Images.emoji_hash == first_image_hash + ) + + if not image_desc or not image_desc.description: + logger.debug(f"未找到图片描述: {first_image_hash}") + return + + # 在Messages表中查找包含该描述的最新消息 + matched_message = Messages.select().where( + (Messages.user_id == user_id) & + (Messages.processed_plain_text.contains(image_desc.description)) + ).order_by(Messages.time.desc()).first() + + if matched_message: + # 更新找到的消息记录 + Messages.update(message_id=new_message_id).where( + Messages.id == matched_message.id + ).execute() + logger.info(f"更新图片消息ID成功: {matched_message.message_id} -> {new_message_id}") + else: + logger.debug(f"未找到包含描述'{image_desc.description}'的消息") + + except Exception as e: + logger.error(f"更新图片消息失败: {e}") + + @staticmethod + async def _update_text_message(message: MessageRecv, new_message_id: str, user_id: str) -> None: + """处理文本消息的更新逻辑""" + try: + # 过滤处理文本(与store_message相同的处理方式) + pattern = r".*?|.*?|.*?" + processed_plain_text = re.sub( + pattern, "", + message.processed_plain_text, + flags=re.DOTALL + ) if message.processed_plain_text else "" + + # 查询最新一条匹配消息 + matched_message = Messages.select().where( + (Messages.user_id == user_id) & + (Messages.processed_plain_text == processed_plain_text) + ).order_by(Messages.time.desc()).first() + + if matched_message: + # 更新找到的消息记录 + Messages.update(message_id=new_message_id).where( + Messages.id == matched_message.id + ).execute() + logger.info(f"更新文本消息ID成功: {matched_message.message_id} -> {new_message_id}") + else: + logger.debug("未找到匹配的文本消息") + + except Exception as e: + logger.error(f"更新文本消息失败: {e}") \ No newline at end of file From 514ccd6be3ac5c4dc46b10132335868ff3d5d5cb Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Thu, 26 Jun 2025 23:30:31 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=BD=BFgenerator=E8=83=BD=E5=A4=9F?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=98=AF=E5=90=A6=E5=88=87=E5=8F=A5?= =?UTF-8?q?=E6=88=96=E8=80=85=E7=94=9F=E6=88=90=E9=94=99=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 跨越了三份文件的参数传递(( --- src/chat/replyer/default_generator.py | 8 ++++++-- src/chat/utils/utils.py | 6 +++--- src/plugin_system/apis/generator_api.py | 12 ++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index bf247e425..4cc397e89 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -162,6 +162,8 @@ class DefaultReplyer: async def generate_reply_with_context( self, reply_data: Dict[str, Any], + enable_splitter: bool=True, + enable_chinese_typo: bool=True ) -> Tuple[bool, Optional[List[str]]]: """ 回复器 (Replier): 核心逻辑,负责生成回复文本。 @@ -191,7 +193,7 @@ class DefaultReplyer: logger.error(f"{self.log_prefix}LLM 生成失败: {llm_e}") return False, None # LLM 调用失败则无法生成回复 - processed_response = process_llm_response(content) + processed_response = process_llm_response(content,enable_splitter,enable_chinese_typo) # 5. 处理 LLM 响应 if not content: @@ -216,6 +218,8 @@ class DefaultReplyer: async def rewrite_reply_with_context( self, reply_data: Dict[str, Any], + enable_splitter: bool=True, + enable_chinese_typo: bool=True ) -> Tuple[bool, Optional[List[str]]]: """ 表达器 (Expressor): 核心逻辑,负责生成回复文本。 @@ -252,7 +256,7 @@ class DefaultReplyer: logger.error(f"{self.log_prefix}LLM 生成失败: {llm_e}") return False, None # LLM 调用失败则无法生成回复 - processed_response = process_llm_response(content) + processed_response = process_llm_response(content,enable_splitter,enable_chinese_typo) # 5. 处理 LLM 响应 if not content: diff --git a/src/chat/utils/utils.py b/src/chat/utils/utils.py index 592964167..56dd9b435 100644 --- a/src/chat/utils/utils.py +++ b/src/chat/utils/utils.py @@ -321,7 +321,7 @@ def random_remove_punctuation(text: str) -> str: return result -def process_llm_response(text: str) -> list[str]: +def process_llm_response(text: str, enable_splitter: bool=True, enable_chinese_typo: bool=True) -> list[str]: if not global_config.response_post_process.enable_response_post_process: return [text] @@ -359,14 +359,14 @@ def process_llm_response(text: str) -> list[str]: word_replace_rate=global_config.chinese_typo.word_replace_rate, ) - if global_config.response_splitter.enable: + if global_config.response_splitter.enable and enable_splitter: split_sentences = split_into_sentences_w_remove_punctuation(cleaned_text) else: split_sentences = [cleaned_text] sentences = [] for sentence in split_sentences: - if global_config.chinese_typo.enable: + if global_config.chinese_typo.enable and enable_chinese_typo: typoed_text, typo_corrections = typo_generator.create_typo_sentence(sentence) sentences.append(typoed_text) if typo_corrections: diff --git a/src/plugin_system/apis/generator_api.py b/src/plugin_system/apis/generator_api.py index 8130d9b4f..aa3c41253 100644 --- a/src/plugin_system/apis/generator_api.py +++ b/src/plugin_system/apis/generator_api.py @@ -73,6 +73,8 @@ async def generate_reply( chat_stream=None, action_data: Dict[str, Any] = None, chat_id: str = None, + enable_splitter: bool=True, + enable_chinese_typo: bool=True ) -> Tuple[bool, List[Tuple[str, Any]]]: """生成回复 @@ -80,6 +82,8 @@ async def generate_reply( chat_stream: 聊天流对象(优先) action_data: 动作数据 chat_id: 聊天ID(备用) + enable_splitter: 是否启用消息分割器 + enable_chinese_typo: 是否启用错字生成器 Returns: Tuple[bool, List[Tuple[str, Any]]]: (是否成功, 回复集合) @@ -96,6 +100,8 @@ async def generate_reply( # 调用回复器生成回复 success, reply_set = await replyer.generate_reply_with_context( reply_data=action_data or {}, + enable_splitter=enable_splitter, + enable_chinese_typo=enable_chinese_typo ) if success: @@ -114,6 +120,8 @@ async def rewrite_reply( chat_stream=None, reply_data: Dict[str, Any] = None, chat_id: str = None, + enable_splitter: bool=True, + enable_chinese_typo: bool=True ) -> Tuple[bool, List[Tuple[str, Any]]]: """重写回复 @@ -121,6 +129,8 @@ async def rewrite_reply( chat_stream: 聊天流对象(优先) reply_data: 回复数据 chat_id: 聊天ID(备用) + enable_splitter: 是否启用消息分割器 + enable_chinese_typo: 是否启用错字生成器 Returns: Tuple[bool, List[Tuple[str, Any]]]: (是否成功, 回复集合) @@ -137,6 +147,8 @@ async def rewrite_reply( # 调用回复器重写回复 success, reply_set = await replyer.rewrite_reply_with_context( reply_data=reply_data or {}, + enable_splitter=enable_splitter, + enable_chinese_typo=enable_chinese_typo ) if success: From 8e927512e74f3cafcaef929de07942bd570c55f2 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Thu, 26 Jun 2025 23:33:31 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E8=AE=A9base=5Faction=E5=9C=A8=E7=BE=A4?= =?UTF-8?q?=E8=81=8A=E7=8E=AF=E5=A2=83=E4=B8=8B=E4=B9=9F=E8=8E=B7=E5=8F=96?= =?UTF-8?q?user=5Fid=E5=92=8Cuser=5Fnickname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugin_system/base/base_action.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugin_system/base/base_action.py b/src/plugin_system/base/base_action.py index a68091b96..c36af7b07 100644 --- a/src/plugin_system/base/base_action.py +++ b/src/plugin_system/base/base_action.py @@ -108,6 +108,8 @@ class BaseAction(ABC): # print(self.chat_stream.group_info) if self.chat_stream.group_info: self.is_group = True + self.user_id = str(self.chat_stream.user_info.user_id) + self.user_nickname = getattr(self.chat_stream.user_info, "user_nickname", None) self.group_id = str(self.chat_stream.group_info.group_id) self.group_name = getattr(self.chat_stream.group_info, "group_name", None) else: From 5573ec28ff6cd9339d4a830126a4518c87638346 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sat, 28 Jun 2025 17:21:34 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E6=B3=A8=E6=84=8F=E5=88=B0ada=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=E5=90=8E=E6=9C=89=E7=9A=84=E4=B8=8D=E7=88=B1=E5=A1=AB?= =?UTF-8?q?addtional=5Fconfig=EF=BC=8C=E7=89=B9=E6=84=8F=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/bot.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index 9e46fc7ac..d4ea40538 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -131,12 +131,12 @@ class ChatBot: message = MessageRecv(message_data) group_info = message.message_info.group_info user_info = message.message_info.user_info - sent_message = message.message_info.additional_config.get("sent_message", False) - - if user_info.user_id == global_config.bot.qq_account and sent_message: # 这一段只是为了在一切处理前劫持上报的自身消息,用于更新message_id,需要ada支持上报事件,实际测试中不会对正常使用造成任何问题 - await message.process() - await MessageStorage.update_message(message) - return + if message.message_info.additional_config: + sent_message = message.message_info.additional_config.get("sent_message", False) + if user_info.user_id == global_config.bot.qq_account and sent_message: # 这一段只是为了在一切处理前劫持上报的自身消息,用于更新message_id,需要ada支持上报事件,实际测试中不会对正常使用造成任何问题 + await message.process() + await MessageStorage.update_message(message) + return get_chat_manager().register_message(message) From 48060c601de18cbcaf3ff4995d140e65fd741ad5 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sat, 28 Jun 2025 20:37:12 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E9=85=8D=E5=90=88ada=E7=9A=84dev=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=EF=BC=8C=E6=9B=B4=E7=AE=80=E6=B4=81=E5=9C=B0=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=B6=88=E6=81=AF=E5=9B=9E=E6=8A=A5=E6=9B=B4=E6=96=B0?= =?UTF-8?q?message=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/bot.py | 8 +-- src/chat/message_receive/storage.py | 99 +++-------------------------- 2 files changed, 12 insertions(+), 95 deletions(-) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index d4ea40538..69eb3aa95 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -132,12 +132,12 @@ class ChatBot: 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("sent_message", False) - if user_info.user_id == global_config.bot.qq_account and sent_message: # 这一段只是为了在一切处理前劫持上报的自身消息,用于更新message_id,需要ada支持上报事件,实际测试中不会对正常使用造成任何问题 + sent_message = message.message_info.additional_config.get("echo", False) + if sent_message: # 这一段只是为了在一切处理前劫持上报的自身消息,用于更新message_id,需要ada支持上报事件,实际测试中不会对正常使用造成任何问题 await message.process() await MessageStorage.update_message(message) return - + get_chat_manager().register_message(message) # 创建聊天流 @@ -204,4 +204,4 @@ class ChatBot: # 创建全局ChatBot实例 -chat_bot = ChatBot() +chat_bot = ChatBot() \ No newline at end of file diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index 78a72d016..27995c37f 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -108,107 +108,24 @@ class MessageStorage: # 如果需要其他存储相关的函数,可以在这里添加 @staticmethod async def update_message(message: MessageRecv) -> None: # 用于实时更新数据库的自身发送消息ID,目前能处理text,reply,image和emoji - """更新最新一条匹配消息的message_id,区分文字和图片情况""" + """更新最新一条匹配消息的message_id""" try: - new_message_id = message.message_info.message_id - user_id = message.message_info.user_info.user_id - - # 检查消息是否包含图片 - image_hashes = MessageStorage._extract_image_hashes(message.message_segment) - - if image_hashes: - # 图片消息处理 - await MessageStorage._update_image_message(message, new_message_id, user_id, image_hashes) - else: - # 文本消息处理 - await MessageStorage._update_text_message(message, new_message_id, user_id) - - except Exception: - logger.exception("更新消息ID失败") - - @staticmethod - def _extract_image_hashes(segment) -> List[str]: - """递归提取消息段中的所有图片哈希值""" - hashes = [] - - if segment.type == "image" or segment.type == "emoji": - try: - # 计算图片哈希值 - binary_data = base64.b64decode(segment.data) - file_hash = hashlib.md5(binary_data).hexdigest() - hashes.append(file_hash) - except Exception as e: - logger.error(f"计算图片哈希失败: {e}") - - elif segment.type == "seglist": - # 递归处理子消息段 - for sub_seg in segment.data: - hashes.extend(MessageStorage._extract_image_hashes(sub_seg)) - - return hashes - - @staticmethod - async def _update_image_message(message: MessageRecv, new_message_id: str, user_id: str, image_hashes: List[str]) -> None: - """处理图片消息的更新逻辑""" - - # 使用第一张图片的哈希值查询描述 - first_image_hash = image_hashes[0] - logger.info(f"{first_image_hash}") - - try: - # 查询图片描述 - image_desc = Images.get_or_none( - Images.emoji_hash == first_image_hash - ) - - if not image_desc or not image_desc.description: - logger.debug(f"未找到图片描述: {first_image_hash}") - return - - # 在Messages表中查找包含该描述的最新消息 - matched_message = Messages.select().where( - (Messages.user_id == user_id) & - (Messages.processed_plain_text.contains(image_desc.description)) - ).order_by(Messages.time.desc()).first() - - if matched_message: - # 更新找到的消息记录 - Messages.update(message_id=new_message_id).where( - Messages.id == matched_message.id - ).execute() - logger.info(f"更新图片消息ID成功: {matched_message.message_id} -> {new_message_id}") - else: - logger.debug(f"未找到包含描述'{image_desc.description}'的消息") - - except Exception as e: - logger.error(f"更新图片消息失败: {e}") - - @staticmethod - async def _update_text_message(message: MessageRecv, new_message_id: str, user_id: str) -> None: - """处理文本消息的更新逻辑""" - try: - # 过滤处理文本(与store_message相同的处理方式) - pattern = r".*?|.*?|.*?" - processed_plain_text = re.sub( - pattern, "", - message.processed_plain_text, - flags=re.DOTALL - ) if message.processed_plain_text else "" + mmc_message_id = message.message_segment.data.get("echo") + qq_message_id = message.message_segment.data.get("actual_id") # 查询最新一条匹配消息 matched_message = Messages.select().where( - (Messages.user_id == user_id) & - (Messages.processed_plain_text == processed_plain_text) + (Messages.message_id == mmc_message_id) ).order_by(Messages.time.desc()).first() if matched_message: # 更新找到的消息记录 - Messages.update(message_id=new_message_id).where( + Messages.update(message_id=qq_message_id).where( Messages.id == matched_message.id ).execute() - logger.info(f"更新文本消息ID成功: {matched_message.message_id} -> {new_message_id}") + logger.info(f"更新消息ID成功: {matched_message.message_id} -> {qq_message_id}") else: - logger.debug("未找到匹配的文本消息") + logger.debug("未找到匹配的消息") except Exception as e: - logger.error(f"更新文本消息失败: {e}") \ No newline at end of file + logger.error(f"更新消息ID失败: {e}") \ No newline at end of file From 08f8aa94df131afe1b0ab01aa6dbc2d52e5eb3a6 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sat, 28 Jun 2025 20:40:33 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=B8=8D=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E7=9A=84=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/storage.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index 27995c37f..185c91483 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -1,13 +1,10 @@ import re -import base64 -import hashlib -from typing import Union, List +from typing import Union # from ...common.database.database import db # db is now Peewee's SqliteDatabase instance from .message import MessageSending, MessageRecv from .chat_stream import ChatStream from ...common.database.database_model import Messages, RecalledMessages # Import Peewee models -from ...common.database.database_model import Images from src.common.logger import get_logger logger = get_logger("message_storage") From 749deb09b8399f85da33ee5255f37652796e55f4 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sun, 29 Jun 2025 00:37:30 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/bot.py | 1 - src/chat/message_receive/storage.py | 12 +++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index 69eb3aa95..34647c6f8 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -134,7 +134,6 @@ class ChatBot: if message.message_info.additional_config: sent_message = message.message_info.additional_config.get("echo", False) if sent_message: # 这一段只是为了在一切处理前劫持上报的自身消息,用于更新message_id,需要ada支持上报事件,实际测试中不会对正常使用造成任何问题 - await message.process() await MessageStorage.update_message(message) return diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index 185c91483..51bb6f17e 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -107,9 +107,15 @@ class MessageStorage: async def update_message(message: MessageRecv) -> None: # 用于实时更新数据库的自身发送消息ID,目前能处理text,reply,image和emoji """更新最新一条匹配消息的message_id""" try: - mmc_message_id = message.message_segment.data.get("echo") - qq_message_id = message.message_segment.data.get("actual_id") - + if message.message_segment.get("type") == "notify": + mmc_message_id = message.message_segment.data.get("echo") + qq_message_id = message.message_segment.data.get("actual_id") + else: + logger.info(f"更新消息ID错误,seg类型为{message.message_segment.get('type')}") + return + if not qq_message_id: + logger.info("消息不存在message_id,无法更新") + return # 查询最新一条匹配消息 matched_message = Messages.select().where( (Messages.message_id == mmc_message_id) From 757a4c4d394164084d19b53ab432367f274bcfd9 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sun, 29 Jun 2025 01:26:36 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/message_receive/storage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index 51bb6f17e..b0a04715b 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -107,7 +107,7 @@ class MessageStorage: async def update_message(message: MessageRecv) -> None: # 用于实时更新数据库的自身发送消息ID,目前能处理text,reply,image和emoji """更新最新一条匹配消息的message_id""" try: - if message.message_segment.get("type") == "notify": + if message.message_segment.type == "notify": mmc_message_id = message.message_segment.data.get("echo") qq_message_id = message.message_segment.data.get("actual_id") else: From 228caa0f18ea989397392144ab1ac21c9f7c3e21 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sun, 29 Jun 2025 02:05:02 +0800 Subject: [PATCH 9/9] fix --- src/chat/message_receive/storage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chat/message_receive/storage.py b/src/chat/message_receive/storage.py index b0a04715b..9cd357ab2 100644 --- a/src/chat/message_receive/storage.py +++ b/src/chat/message_receive/storage.py @@ -111,7 +111,7 @@ class MessageStorage: mmc_message_id = message.message_segment.data.get("echo") qq_message_id = message.message_segment.data.get("actual_id") else: - logger.info(f"更新消息ID错误,seg类型为{message.message_segment.get('type')}") + logger.info(f"更新消息ID错误,seg类型为{message.message_segment.type}") return if not qq_message_id: logger.info("消息不存在message_id,无法更新")