mirror of
https://github.com/KnugiHK/WhatsApp-Chat-Exporter.git
synced 2026-03-29 09:15:27 +00:00
Better parse metadata message in iOS
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import json
|
||||
import os
|
||||
import logging
|
||||
import shutil
|
||||
@@ -280,7 +281,7 @@ def process_message_data(message, content, is_group_message, data, message_map,
|
||||
|
||||
# Handle metadata messages
|
||||
if content["ZMESSAGETYPE"] == 6:
|
||||
return process_metadata_message(message, content, is_group_message)
|
||||
return process_metadata_message(message, content, is_group_message, data)
|
||||
|
||||
# Handle quoted replies
|
||||
if content["ZMETADATA"] is not None and content["ZMETADATA"].startswith(b"\x2a\x14") and not no_reply:
|
||||
@@ -307,21 +308,51 @@ def process_message_data(message, content, is_group_message, data, message_map,
|
||||
return False # Message is valid
|
||||
|
||||
|
||||
def process_metadata_message(message, content, is_group_message):
|
||||
def _parse_group_action(ztext, data):
|
||||
if ztext.endswith("@lid") or ztext.endswith("@s.whatsapp.net"):
|
||||
# This is likely a group member change action
|
||||
# Not really sure actually
|
||||
name = None
|
||||
if ztext in data:
|
||||
name = data.get_chat(ztext).name
|
||||
if "@" in ztext:
|
||||
fallback = ztext.split('@')[0]
|
||||
else:
|
||||
fallback = None
|
||||
entity = name or fallback
|
||||
|
||||
return f"{entity} join the group"
|
||||
|
||||
elif ztext.startswith("{") and ztext.endswith("}"):
|
||||
try:
|
||||
metadata = json.loads(ztext)
|
||||
except json.JSONDecodeError:
|
||||
return ztext # Not a JSON string, return as-is
|
||||
entity = metadata.get('author', 'Someone')
|
||||
if entity is not "Someone":
|
||||
name = None
|
||||
if entity in data:
|
||||
name = data.get_chat(entity).name
|
||||
if "@" in entity:
|
||||
fallback = entity.split('@')[0]
|
||||
else:
|
||||
fallback = None
|
||||
entity = name or fallback
|
||||
return f"{entity} changed the group name to {metadata.get('subject', 'Unknown')}."
|
||||
elif ztext == "admin_add":
|
||||
return f"The administrator has restricted participant additions to admins only."
|
||||
else:
|
||||
return "Unsupported WhatsApp internal message."
|
||||
|
||||
|
||||
def process_metadata_message(message, content, is_group_message, data):
|
||||
"""Process metadata messages (action_type 6)."""
|
||||
if is_group_message:
|
||||
# Group
|
||||
if content["ZTEXT"] is not None:
|
||||
# Changed name
|
||||
try:
|
||||
int(content["ZTEXT"])
|
||||
except ValueError:
|
||||
msg = f"The group name changed to {content['ZTEXT']}"
|
||||
message.data = msg
|
||||
message.meta = True
|
||||
return False # Valid message
|
||||
else:
|
||||
return True # Invalid message
|
||||
message.data = _parse_group_action(content["ZTEXT"], data)
|
||||
message.meta = True
|
||||
return False
|
||||
else:
|
||||
message.data = None
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user