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,无法更新")