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