From 030fef53e1696c423da1b354fe8f1d27585ac451 Mon Sep 17 00:00:00 2001 From: KnugiHK <24708955+KnugiHK@users.noreply.github.com> Date: Tue, 20 Jun 2023 19:53:05 +0800 Subject: [PATCH] I found that old schema also has such tables --- Whatsapp_Chat_Exporter/extract.py | 87 ++++++++++++------------------- 1 file changed, 33 insertions(+), 54 deletions(-) diff --git a/Whatsapp_Chat_Exporter/extract.py b/Whatsapp_Chat_Exporter/extract.py index 1b72dc7..ae32c77 100644 --- a/Whatsapp_Chat_Exporter/extract.py +++ b/Whatsapp_Chat_Exporter/extract.py @@ -194,16 +194,30 @@ def messages(db, data, media_folder): messages_quotes.data as quoted_data, messages.media_caption, missed_call_logs.video_call, - chat.subject as chat_subject + chat.subject as chat_subject, + message_system.action_type, + message_system_group.is_me_joined, + jid_old.raw_string as old_jid, + jid_new.raw_string as new_jid FROM messages LEFT JOIN messages_quotes ON messages.quoted_row_id = messages_quotes._id LEFT JOIN missed_call_logs ON messages._id = missed_call_logs.message_row_id - INNER JOIN jid - ON messages.key_remote_jid = jid.raw_string + INNER JOIN jid jid_global + ON messages.key_remote_jid = jid_global.raw_string LEFT JOIN chat - ON chat.jid_row_id = jid._id + ON chat.jid_row_id = jid_global._id + LEFT JOIN message_system + ON message_system.message_row_id = messages._id + LEFT JOIN message_system_group + ON message_system_group.message_row_id = messages._id + LEFT JOIN message_system_number_change + ON message_system_number_change.message_row_id = messages._id + LEFT JOIN jid jid_old + ON jid_old._id = message_system_number_change.old_jid_row_id + LEFT JOIN jid jid_new + ON jid_new._id = message_system_number_change.new_jid_row_id WHERE messages.key_remote_jid <> '-1';""" ) except sqlite3.OperationalError: @@ -338,52 +352,9 @@ def messages(db, data, media_folder): message.caption = None if content["status"] == 6: # 6 = Metadata, otherwise assume a message - if not table_message and "-" in content["key_remote_jid"]: - # Is Group - if content["data"] is not None and content["data"] != "": - try: - int(content["data"]) - except ValueError: - msg = f'''The group name changed to "{content['data']}"''' - message.data = msg - message.meta = True - else: - message.meta = True - message.data = None - else: - thumb_image = content["thumb_image"] # Not applicable for new schema - if thumb_image is not None: - if b"\x00\x00\x01\x74\x00\x1A" in thumb_image: - # Add user - added = phone_number_re.search( - thumb_image.decode("unicode_escape"))[0] - if added in data: - name_right = data[added].name - else: - name_right = added.split('@')[0] - if content["remote_resource"] is not None: - if content["remote_resource"] in data and data[content["remote_resource"]].name is not None: - name_left = data[content["remote_resource"]].name - else: - name_left = content["remote_resource"].split('@')[0] - msg = f"{name_left} added {name_right or 'You'}" - else: - msg = f"Added {name_right or 'You'}" - elif b"\xac\xed\x00\x05\x74\x00" in thumb_image: - # Changed number - original = content["remote_resource"].split('@')[0] - changed = thumb_image[7:].decode().split('@')[0] - msg = f"{original} changed to {changed}" - message.data = msg - message.meta = True - else: - if content["data"] is None: - message.meta = True - message.data = None - - elif table_message: - message.meta = True - name = fallback = None + message.meta = True + name = fallback = None + if table_message: if content["sender_jid_row_id"] > 0: _jid = content["group_sender_jid"] if _jid in data: @@ -392,11 +363,19 @@ def messages(db, data, media_folder): fallback = _jid.split('@')[0] else: name = "You" - message.data = determine_metadata(content, name or fallback) - if isinstance(message.data, str) and "
" in message.data: - message.safe = True else: - # Private chat + _jid = content["remote_resource"] + if _jid is not None: + if _jid in data: + name = data[_jid].name + if "@" in _jid: + fallback = _jid.split('@')[0] + else: + name = "You" + message.data = determine_metadata(content, name or fallback) + if isinstance(message.data, str) and "
" in message.data: + message.safe = True + if message.data is None: if content["video_call"] is not None: # Missed call message.meta = True if content["video_call"] == 1: