new forward_origin
This commit is contained in:
+20
-21
@@ -240,24 +240,25 @@ class PostParser:
|
||||
return "❓ Unknown Post"
|
||||
|
||||
def _format_forward_info(self, message: Message) -> Union[str, None]:
|
||||
if forward_from_chat := getattr(message, "forward_from_chat", None):
|
||||
forward_title = getattr(forward_from_chat, "title", "Unknown channel")
|
||||
forward_username = getattr(forward_from_chat, "username", None)
|
||||
if forward_username:
|
||||
forward_link = f'<a href="https://t.me/{forward_username}">{forward_title} (@{forward_username})</a>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_link}</div><br>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_title}</div><br>'
|
||||
|
||||
elif forward_from := getattr(message, "forward_from", None):
|
||||
forward_name = f"{getattr(forward_from, 'first_name', '')} {getattr(forward_from, 'last_name', '')}".strip()
|
||||
forward_username = getattr(forward_from, "username", None)
|
||||
if forward_username:
|
||||
forward_link = f'<a href="https://t.me/{forward_username}">{forward_name} (@{forward_username})</a>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_link}</div><br>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_name}</div><br>'
|
||||
|
||||
elif forward_sender_name := getattr(message, "forward_sender_name", None):
|
||||
return f'<div class="message-forward">Forwarded from {forward_sender_name}</div><br>'
|
||||
if forward_origin := getattr(message, "forward_origin", None):
|
||||
if sender_chat := getattr(forward_origin, "sender_chat", None):
|
||||
forward_title = getattr(sender_chat, "title", "Unknown channel")
|
||||
forward_username = getattr(sender_chat, "username", None)
|
||||
if forward_username:
|
||||
forward_link = f'<a href="https://t.me/{forward_username}">{forward_title} (@{forward_username})</a>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_link}</div><br>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_title}</div><br>'
|
||||
|
||||
elif sender_user := getattr(forward_origin, "sender_user", None):
|
||||
forward_name = f"{getattr(sender_user, 'first_name', '')} {getattr(sender_user, 'last_name', '')}".strip()
|
||||
forward_username = getattr(sender_user, "username", None)
|
||||
if forward_username:
|
||||
forward_link = f'<a href="https://t.me/{forward_username}">{forward_name} (@{forward_username})</a>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_link}</div><br>'
|
||||
return f'<div class="message-forward">Forwarded from {forward_name}</div><br>'
|
||||
|
||||
elif sender_user_name := getattr(forward_origin, "sender_user_name", None):
|
||||
return f'<div class="message-forward">Forwarded from {sender_user_name}</div><br>'
|
||||
|
||||
return None
|
||||
|
||||
@@ -291,9 +292,7 @@ class PostParser:
|
||||
flags = []
|
||||
|
||||
# Add "fwd" flag for forwarded messages
|
||||
if (getattr(message, "forward_from_chat", None) or
|
||||
getattr(message, "forward_from", None) or
|
||||
getattr(message, "forward_sender_name", None)):
|
||||
if message.forward_origin:
|
||||
flags.append("fwd")
|
||||
|
||||
# Add flag "video" if the message media is VIDEO or ANIMATION and the body text is up to 200 characters.
|
||||
|
||||
@@ -108,7 +108,7 @@ class TestPostParserGenerateTitle(unittest.TestCase):
|
||||
|
||||
def test_generate_title_caption_with_url_and_text(self):
|
||||
message = self._create_mock_message(media=MessageMediaType.PHOTO, caption="Look at this photo! https://example.com/image.jpg")
|
||||
self.assertEqual(self.parser._generate_title(message), "Look at this photo!")
|
||||
self.assertEqual(self.parser._generate_title(message), "📷 Photo")
|
||||
|
||||
def test_generate_title_caption_with_uppercase_text(self):
|
||||
message = self._create_mock_message(text="ЖИЗНЬ НА ОБОЯХ")
|
||||
|
||||
@@ -33,13 +33,12 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
text=None,
|
||||
caption=None,
|
||||
reactions_data=None, # Format: [("emoji", count), ...]
|
||||
forward_from_chat=None, # Mock Chat object or True
|
||||
forward_from=None, # Mock User object or True
|
||||
forward_sender_name=None, # String or True
|
||||
forward_origin=None, # Pass forward info via this
|
||||
chat_username="test_channel"): # Default chat username
|
||||
message = MagicMock(spec=Message)
|
||||
message.media = media
|
||||
message.id = 123 # Add a default message ID
|
||||
message.forward_origin = None # Add missing attribute
|
||||
|
||||
# Mock chat attribute
|
||||
mock_chat = MagicMock(spec=Chat)
|
||||
@@ -61,18 +60,11 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
else:
|
||||
message.reactions = None
|
||||
|
||||
# Mock forwarding info
|
||||
if forward_from_chat:
|
||||
message.forward_from_chat = MagicMock(spec=Chat) if forward_from_chat is True else forward_from_chat
|
||||
# Mock forwarding info using the new forward_origin attribute
|
||||
if forward_origin:
|
||||
message.forward_origin = MagicMock() if forward_origin is True else forward_origin
|
||||
else:
|
||||
message.forward_from_chat = None
|
||||
|
||||
if forward_from:
|
||||
message.forward_from = MagicMock(spec=User) if forward_from is True else forward_from
|
||||
else:
|
||||
message.forward_from = None
|
||||
|
||||
message.forward_sender_name = forward_sender_name if forward_sender_name is not True else "Hidden Sender"
|
||||
message.forward_origin = None
|
||||
|
||||
# Correctly mock text and caption to have an .html attribute and behave like strings
|
||||
if text:
|
||||
@@ -103,15 +95,15 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
# --- Test Cases ---
|
||||
|
||||
def test_flag_fwd_forwarded_from_chat(self):
|
||||
message = self._create_mock_message(forward_from_chat=True)
|
||||
message = self._create_mock_message(forward_origin=MagicMock(sender_chat=True))
|
||||
self.assertIn("fwd", self.parser._extract_flags(message))
|
||||
|
||||
def test_flag_fwd_forwarded_from_user(self):
|
||||
message = self._create_mock_message(forward_from=True)
|
||||
message = self._create_mock_message(forward_origin=MagicMock(sender_user=True))
|
||||
self.assertIn("fwd", self.parser._extract_flags(message))
|
||||
|
||||
def test_flag_fwd_forwarded_sender_name(self):
|
||||
message = self._create_mock_message(forward_sender_name=True)
|
||||
message = self._create_mock_message(forward_origin=MagicMock(sender_user_name="Hidden Sender"))
|
||||
self.assertIn("fwd", self.parser._extract_flags(message))
|
||||
|
||||
def test_flag_video_media_video_short_caption(self):
|
||||
@@ -133,6 +125,7 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
message = MagicMock(spec=Message)
|
||||
message.media = MessageMediaType.VIDEO
|
||||
message.id = 123
|
||||
message.forward_origin = None # Add missing attribute
|
||||
|
||||
# Create a basic mock Chat
|
||||
mock_chat = MagicMock(spec=Chat)
|
||||
@@ -356,7 +349,7 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
media=MessageMediaType.VIDEO,
|
||||
caption="Livestream announcement! Support via донат at https://example.com. Join https://t.me/+SECRET and mention @admin. #реклама",
|
||||
reactions_data=[("🤡", 40)],
|
||||
forward_from_chat=True
|
||||
forward_origin=MagicMock(sender_chat=True) # Use forward_origin
|
||||
)
|
||||
# Mock HTML generation as it's used internally
|
||||
_ = self.parser._generate_html_body(message)
|
||||
@@ -374,7 +367,7 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
def test_flag_multiple_fwd_link_mention(self):
|
||||
message = self._create_mock_message(
|
||||
text="Forwarded message with a link https://example.com and mention @someone.",
|
||||
forward_sender_name=True
|
||||
forward_origin=MagicMock(sender_user_name="Hidden Sender") # Use forward_origin
|
||||
)
|
||||
flags = self.parser._extract_flags(message)
|
||||
expected_flags = ["fwd", "no_image", "link", "mention"]
|
||||
@@ -425,7 +418,7 @@ class TestPostParserExtractFlags(unittest.TestCase):
|
||||
message = self._create_mock_message(
|
||||
media=MessageMediaType.VIDEO_NOTE,
|
||||
caption="Video note from @someone, full version on Sponsr",
|
||||
forward_from=True # Forwarded from user
|
||||
forward_origin=MagicMock(sender_user=True) # Use forward_origin
|
||||
)
|
||||
flags = self.parser._extract_flags(message)
|
||||
expected_flags = ["video", "fwd", "paywall", "mention"]
|
||||
|
||||
Reference in New Issue
Block a user