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,