Simplify media group processing and message parsing logic

This commit is contained in:
vvzvlad
2025-02-01 20:37:20 +03:00
parent f72b9af544
commit e7f7520f79
+9 -49
View File
@@ -137,6 +137,7 @@ class TelegramClient:
for r in message.reactions.reactions
)
processed_text += reactions_text
raw_text += reactions_text # Add reactions to raw text
# Add media previews to text
if media:
@@ -330,61 +331,20 @@ class TelegramClient:
"details": f"Message {post_id} in {channel} does not exist"
}
# Check for media group
media_group = []
if message.media_group_id:
logger.debug(f"Processing media group {message.media_group_id} for message {post_id}")
current_id = post_id
# Collect previous messages in group
while True:
prev_msg = await self.client.get_messages(
chat_id=channel,
message_ids=current_id - 1
)
if prev_msg and prev_msg.media_group_id == message.media_group_id:
logger.debug(f"Found previous message in group: {prev_msg.id}")
media_group.insert(0, prev_msg)
current_id -= 1
else:
break
# Collect next messages in group
current_id = post_id
while True:
next_msg = await self.client.get_messages(
chat_id=channel,
message_ids=current_id + 1
)
if next_msg and next_msg.media_group_id == message.media_group_id:
logger.debug(f"Found next message in group: {next_msg.id}")
media_group.append(next_msg)
current_id += 1
else:
break
# Process all messages in group
all_messages = media_group + [message]
logger.debug(f"Combined {len(all_messages)} messages in media group")
parsed_messages = [await self._parse_message(msg) for msg in all_messages]
# Process the message
parsed_message = await self._parse_message(message)
# Combine results
combined = {
"id": post_id,
"date": message.date.isoformat(),
"title": self._generate_title(message.text or message.caption or ""),
"html": "".join([m["html"] for m in parsed_messages if m["html"]]),
"text": "".join([m["text"] for m in parsed_messages if m["text"]]),
"raw_messages": [
{
"id": msg.id,
"date": msg.date.isoformat(),
"media_group_id": msg.media_group_id,
"raw": self._parse_raw_message(msg)
} for msg in all_messages
],
"views": max(m["views"] for m in parsed_messages),
"media_group_id": message.media_group_id,
"author": parsed_messages[0]["author"] if parsed_messages else ""
"html": parsed_message["html"],
"text": parsed_message["text"],
"raw": self._parse_raw_message(message),
"views": parsed_message["views"],
"media_group_id": parsed_message["media_group_id"],
"author": parsed_message["author"]
}
logger.debug(f"Combined result: {combined}")