From 1bdd165d1267825d59a02fd0ed6737adc3b3e896 Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sat, 28 Jun 2025 20:28:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=AF=E6=8C=81ada=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E9=9C=80=E8=A6=81mmc=E9=82=A3?= =?UTF-8?q?=E8=BE=B9=E6=9C=89=E7=9B=B8=E5=BA=94=E4=BB=A3=E7=A0=81=E9=85=8D?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/send_handler.py | 49 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/send_handler.py b/src/send_handler.py index 8e14852..99b83c3 100644 --- a/src/send_handler.py +++ b/src/send_handler.py @@ -15,6 +15,7 @@ from .config import global_config from .response_pool import get_response from .logger import logger from .utils import get_image_format, convert_image_to_gif +from .recv_handler.message_sending import message_send_instance class SendHandler: @@ -48,7 +49,7 @@ class SendHandler: id_name: str = None processed_message: list = [] try: - processed_message = await self.handle_seg_recursive(message_segment) + processed_message, seg_type = await self.handle_seg_recursive(message_segment) except Exception as e: logger.error(f"处理消息时发生错误: {e}") return @@ -83,6 +84,13 @@ class SendHandler: else: logger.warning(f"消息发送失败,napcat返回:{str(response)}") + qq_message_id = response.get("data", {}).get("message_id") + + if seg_type in {"text","image","emoji","reply","voice","voiceurl","music"}: + await self.message_sent_back(raw_message_base, qq_message_id) + else: + logger.debug("消息类型不支持回调更新数据库") + async def send_command(self, raw_message_base: MessageBase) -> None: """ 处理命令类 @@ -128,19 +136,19 @@ class SendHandler: else: return 1 - async def handle_seg_recursive(self, seg_data: Seg) -> list: + async def handle_seg_recursive(self, seg_data: Seg) -> tuple[list, str]: payload: list = [] if seg_data.type == "seglist": # level = self.get_level(seg_data) # 给以后可能的多层嵌套做准备,此处不使用 if not seg_data.data: return [] for seg in seg_data.data: - payload = self.process_message_by_type(seg, payload) + payload, seg_type = self.process_message_by_type(seg, payload) else: - payload = self.process_message_by_type(seg_data, payload) - return payload + payload, seg_type = self.process_message_by_type(seg_data, payload) + return payload, seg_type - def process_message_by_type(self, seg: Seg, payload: list) -> list: + def process_message_by_type(self, seg: Seg, payload: list) -> tuple[list, str]: # sourcery skip: reintroduce-else, swap-if-else-branches, use-named-expression new_payload = payload if seg.type == "reply": @@ -170,7 +178,7 @@ class SendHandler: elif seg.type == "music": song_id = seg.data new_payload = self.build_payload(payload, self.handle_music_message(song_id), False) - return new_payload + return new_payload, seg.type def build_payload(self, payload: list, addon: dict, is_reply: bool = False) -> list: # sourcery skip: for-append-to-extend, merge-list-append, simplify-generator @@ -363,8 +371,6 @@ class SendHandler: message_id = int(args["message_id"]) if message_id <= 0: raise ValueError("消息ID无效") - except KeyError: - raise ValueError("缺少必需参数: message_id") except (ValueError, TypeError) as e: raise ValueError(f"消息ID无效: {args['message_id']} - {str(e)}") @@ -388,6 +394,29 @@ class SendHandler: logger.error(f"发送消息失败: {e}") return {"status": "error", "message": str(e)} return response + + async def message_sent_back(self, message_base: MessageBase, qq_message_id: str): + # 修改 additional_config,添加 echo 字段 + if message_base.message_info.additional_config is None: + message_base.message_info.additional_config = {} + + message_base.message_info.additional_config["echo"] = True + + # 获取原始的 mmc_message_id + mmc_message_id = message_base.message_info.message_id + + # 修改 message_segment 为 notify 类型 + message_base.message_segment = Seg( + type="notify", + data={ + "sub_type": "echo", + "echo": mmc_message_id, + "actual_id": qq_message_id + } + ) + await message_send_instance.message_send(message_base) + logger.debug("已回送消息ID") + return -send_handler = SendHandler() +send_handler = SendHandler() \ No newline at end of file From e526b9fda763c4c216a906aafa2ec8623e4ee14f Mon Sep 17 00:00:00 2001 From: A0000Xz <629995608@qq.com> Date: Sun, 29 Jun 2025 00:42:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=B8=8D=E5=86=8D=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/send_handler.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/send_handler.py b/src/send_handler.py index 0bdfe3f..6adedaf 100644 --- a/src/send_handler.py +++ b/src/send_handler.py @@ -49,7 +49,7 @@ class SendHandler: id_name: str = None processed_message: list = [] try: - processed_message, seg_type = await self.handle_seg_recursive(message_segment) + processed_message = await self.handle_seg_recursive(message_segment) except Exception as e: logger.error(f"处理消息时发生错误: {e}") return @@ -85,11 +85,7 @@ class SendHandler: logger.warning(f"消息发送失败,napcat返回:{str(response)}") qq_message_id = response.get("data", {}).get("message_id") - - if seg_type in {"text","image","emoji","reply","voice","voiceurl","music"}: - await self.message_sent_back(raw_message_base, qq_message_id) - else: - logger.debug("消息类型不支持回调更新数据库") + await self.message_sent_back(raw_message_base, qq_message_id) async def send_command(self, raw_message_base: MessageBase) -> None: """ @@ -136,19 +132,19 @@ class SendHandler: else: return 1 - async def handle_seg_recursive(self, seg_data: Seg) -> tuple[list, str]: + async def handle_seg_recursive(self, seg_data: Seg) -> list: payload: list = [] if seg_data.type == "seglist": # level = self.get_level(seg_data) # 给以后可能的多层嵌套做准备,此处不使用 if not seg_data.data: return [] for seg in seg_data.data: - payload, seg_type = self.process_message_by_type(seg, payload) + payload = self.process_message_by_type(seg, payload) else: - payload, seg_type = self.process_message_by_type(seg_data, payload) - return payload, seg_type + payload = self.process_message_by_type(seg_data, payload) + return payload - def process_message_by_type(self, seg: Seg, payload: list) -> tuple[list, str]: + def process_message_by_type(self, seg: Seg, payload: list) -> list: # sourcery skip: reintroduce-else, swap-if-else-branches, use-named-expression new_payload = payload if seg.type == "reply": @@ -178,7 +174,7 @@ class SendHandler: elif seg.type == "music": song_id = seg.data new_payload = self.build_payload(payload, self.handle_music_message(song_id), False) - return new_payload, seg.type + return new_payload def build_payload(self, payload: list, addon: dict, is_reply: bool = False) -> list: # sourcery skip: for-append-to-extend, merge-list-append, simplify-generator