From a8045930d699228db389a20947d09a8899352a86 Mon Sep 17 00:00:00 2001 From: zhiyu Date: Mon, 22 Jan 2024 10:02:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B8=A6=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/DataBase/msg.py | 2 +- app/ui/chat/chat_info.py | 21 +++++++++++++++++++++ app/util/compress_content.py | 8 ++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py index 1d9b807..b1cfa05 100644 --- a/app/DataBase/msg.py +++ b/app/DataBase/msg.py @@ -45,7 +45,7 @@ def parser_chatroom_message(messages): message.append(Me()) updated_messages.append(tuple(message)) continue - if message[10] is None: # BytesExtra是空的跳过 + if message[10] is None and not (message[2] == 49 and message[3] == 57): # BytesExtra是空且不是带引用的消息的跳过 message.append(ContactDefault(wxid)) updated_messages.append(tuple(message)) continue diff --git a/app/ui/chat/chat_info.py b/app/ui/chat/chat_info.py index 6473846..f608484 100644 --- a/app/ui/chat/chat_info.py +++ b/app/ui/chat/chat_info.py @@ -8,6 +8,7 @@ from app.components.bubble_message import BubbleMessage, ChatWidget, Notice from app.person import Me from app.util import get_abs_path from app.util.emoji import get_emoji +from app.util.compress_content import parser_reply class ChatInfo(QWidget): @@ -157,6 +158,26 @@ class ChatInfo(QWidget): is_send ) self.chat_window.add_message_item(bubble_message, 0) + elif type_ == 49 and message[3] == 57: + # return + if self.is_5_min(timestamp): + time_message = Notice(self.last_str_time) + self.last_str_time = str_time + self.chat_window.add_message_item(time_message, 0) + content = parser_reply(message[11]) + refer_msg = content.get('refer') + if refer_msg is None: + str_content = content.get('title') + else: + str_content = f"「{refer_msg.get('displayname')}: {refer_msg.get('content')}」\n—————————\n{content.get('title')}" + bubble_message = BubbleMessage( + str_content, + avatar, + 1, + is_send, + display_name=display_name + ) + self.chat_window.add_message_item(bubble_message, 0) elif type_ == 10000: str_content = str_content.lstrip('').rstrip('') message = Notice(str_content) diff --git a/app/util/compress_content.py b/app/util/compress_content.py index f21af90..1e6d489 100644 --- a/app/util/compress_content.py +++ b/app/util/compress_content.py @@ -70,6 +70,14 @@ def parser_reply(data: bytes): title = appmsg.find("title").text refermsg_content = appmsg.find("refermsg").find("content").text refermsg_type = int(appmsg.find("refermsg").find("type").text) + # 处理引用的消息是个带有引用的消息 + if refermsg_type == 49: + refer_root = ET.XML(refermsg_content) + refer_appmsg = refer_root.find('appmsg') + refer_msg_type = int(refer_appmsg.find('type').text) + if refer_msg_type == 57: + refermsg_type = 1 + refermsg_content = refer_appmsg.find('title').text refermsg_displayname = appmsg.find("refermsg").find("displayname").text return { "type": msg_type,