diff --git a/post_parser.py b/post_parser.py index fce6163..72e0f10 100644 --- a/post_parser.py +++ b/post_parser.py @@ -272,14 +272,37 @@ class PostParser: def _format_forward_info(self, message: Message) -> Union[str, None]: if forward_origin := getattr(message, "forward_origin", None): - if sender_chat := getattr(forward_origin, "chat", None): - forward_title = getattr(sender_chat, "title", "Unknown channel") - forward_username = getattr(sender_chat, "username", None) - if forward_username: - forward_link = f'{forward_title} (@{forward_username})' - return f'
Forwarded from {forward_link}

' - return f'
Forwarded from {forward_title}

' - + sender_name = None + sender_link = None + + if hasattr(forward_origin, 'sender_user_name') and forward_origin.sender_user_name: + # Case 1: MessageOriginChannel + sender_name = forward_origin.sender_user_name + elif hasattr(forward_origin, 'sender_user') and forward_origin.sender_user: + # Case 2: MessageOriginUser + user = forward_origin.sender_user + first = getattr(user, 'first_name', '') + last = getattr(user, 'last_name', '') + sender_name = f"{first} {last}".strip() or "Unknown User" + elif hasattr(forward_origin, 'chat') and forward_origin.chat: + # Case 3: Logic for channels (e.g., MessageOriginChat) + sender_chat = forward_origin.chat + sender_name = getattr(sender_chat, "title", None) or getattr(sender_chat, "username", "Unknown channel") + if username := getattr(sender_chat, "username", None): + sender_link = f'https://t.me/{username}' + elif type(forward_origin).__name__ == 'MessageOriginHiddenUser': + # Case 4: MessageOriginHiddenUser + sender_name = "Hidden User" + else: + # Fallback if origin type is unexpected + sender_name = "Unknown Source" + + if sender_name: + forward_info = f"Forwarded from {sender_name}" + if sender_link: + forward_info = f'Forwarded from {sender_name}' + return f'
{forward_info}

' + return None def _format_reply_info(self, message: Message) -> Union[str, None]: @@ -532,10 +555,6 @@ class PostParser: def _generate_html_body(self, message: Message) -> str: content_body = [] - test_fwd = self._format_forward_info(message) - test_reply = self._format_reply_info(message) - logger.error(f"Forward info: {test_fwd}, Reply info: {test_reply}") - if forward_html := self._format_forward_info(message): content_body.append(forward_html) elif reply_html := self._format_reply_info(message): content_body.append(reply_html) @@ -554,7 +573,7 @@ class PostParser: if poll := getattr(message, "poll", None): poll_html = self._format_poll(poll) - if text_html or poll_html: + if text_html or poll_html: content_body.append(f'
') if message.forward_origin: content_body.append(f"--------- FWD from {forward_title} ---------
") content_body.append(f'{text_html}')