Simplify media group processing and message parsing logic
This commit is contained in:
+9
-49
@@ -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}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user