diff --git a/pyrogram/methods/bots/send_game.py b/pyrogram/methods/bots/send_game.py index 81509f33..122f6624 100644 --- a/pyrogram/methods/bots/send_game.py +++ b/pyrogram/methods/bots/send_game.py @@ -21,7 +21,7 @@ from typing import Union import pyrogram from pyrogram import raw -from pyrogram import types +from pyrogram import types, utils class SendGame: @@ -79,9 +79,12 @@ class SendGame: await app.send_game(chat_id, "gamename") """ - reply_to = None - if reply_to_message_id or message_thread_id: - reply_to = types.InputReplyToMessage(reply_to_message_id=reply_to_message_id, message_thread_id=message_thread_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id + ) r = await self.invoke( raw.functions.messages.SendMedia( diff --git a/pyrogram/methods/bots/send_inline_bot_result.py b/pyrogram/methods/bots/send_inline_bot_result.py index 33722357..c827b973 100644 --- a/pyrogram/methods/bots/send_inline_bot_result.py +++ b/pyrogram/methods/bots/send_inline_bot_result.py @@ -20,7 +20,7 @@ from typing import Union import pyrogram -from pyrogram import raw, types +from pyrogram import raw, types, utils class SendInlineBotResult: @@ -75,9 +75,13 @@ class SendInlineBotResult: await app.send_inline_bot_result(chat_id, query_id, result_id) """ - reply_to = None - if reply_to_message_id or message_thread_id: - reply_to = types.InputReplyToMessage(reply_to_message_id=reply_to_message_id, message_thread_id=message_thread_id, quote_text=quote_text) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id, + quote_text=quote_text + ) return await self.invoke( raw.functions.messages.SendInlineBotResult( diff --git a/pyrogram/methods/messages/send_animation.py b/pyrogram/methods/messages/send_animation.py index 2e552e0f..3ffa546d 100644 --- a/pyrogram/methods/messages/send_animation.py +++ b/pyrogram/methods/messages/send_animation.py @@ -195,20 +195,15 @@ class SendAnimation: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(animation, str): diff --git a/pyrogram/methods/messages/send_audio.py b/pyrogram/methods/messages/send_audio.py index c87bccff..e46314f4 100644 --- a/pyrogram/methods/messages/send_audio.py +++ b/pyrogram/methods/messages/send_audio.py @@ -189,20 +189,15 @@ class SendAudio: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(audio, str): diff --git a/pyrogram/methods/messages/send_cached_media.py b/pyrogram/methods/messages/send_cached_media.py index 582ceec7..77094c74 100644 --- a/pyrogram/methods/messages/send_cached_media.py +++ b/pyrogram/methods/messages/send_cached_media.py @@ -122,20 +122,15 @@ class SendCachedMedia: await app.send_cached_media("me", file_id) """ - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) media = utils.get_input_media_from_file_id(file_id) media.spoiler = has_spoiler diff --git a/pyrogram/methods/messages/send_contact.py b/pyrogram/methods/messages/send_contact.py index dbc470d0..4cbace44 100644 --- a/pyrogram/methods/messages/send_contact.py +++ b/pyrogram/methods/messages/send_contact.py @@ -107,17 +107,14 @@ class SendContact: await app.send_contact("me", "+1-123-456-7890", "Name") """ - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) r = await self.invoke( raw.functions.messages.SendMedia( diff --git a/pyrogram/methods/messages/send_dice.py b/pyrogram/methods/messages/send_dice.py index 03e83e4f..1f0c840f 100644 --- a/pyrogram/methods/messages/send_dice.py +++ b/pyrogram/methods/messages/send_dice.py @@ -110,20 +110,15 @@ class SendDice: await app.send_dice(chat_id, "🏀") """ - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) r = await self.invoke( raw.functions.messages.SendMedia( diff --git a/pyrogram/methods/messages/send_document.py b/pyrogram/methods/messages/send_document.py index 9c0265f4..4deb0bd1 100644 --- a/pyrogram/methods/messages/send_document.py +++ b/pyrogram/methods/messages/send_document.py @@ -176,20 +176,15 @@ class SendDocument: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(document, str): diff --git a/pyrogram/methods/messages/send_location.py b/pyrogram/methods/messages/send_location.py index 6de5c2e7..323cb03c 100644 --- a/pyrogram/methods/messages/send_location.py +++ b/pyrogram/methods/messages/send_location.py @@ -99,17 +99,14 @@ class SendLocation: app.send_location("me", latitude, longitude) """ - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) r = await self.invoke( raw.functions.messages.SendMedia( diff --git a/pyrogram/methods/messages/send_media_group.py b/pyrogram/methods/messages/send_media_group.py index 4216921c..9d913e0a 100644 --- a/pyrogram/methods/messages/send_media_group.py +++ b/pyrogram/methods/messages/send_media_group.py @@ -114,20 +114,15 @@ class SendMediaGroup: """ multi_media = [] - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) for i in media: if isinstance(i, types.InputMediaPhoto): diff --git a/pyrogram/methods/messages/send_message.py b/pyrogram/methods/messages/send_message.py index 7b12906e..0e918054 100644 --- a/pyrogram/methods/messages/send_message.py +++ b/pyrogram/methods/messages/send_message.py @@ -143,20 +143,15 @@ class SendMessage: message, entities = (await utils.parse_text_entities(self, text, parse_mode, entities)).values() - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) r = await self.invoke( raw.functions.messages.SendMessage( diff --git a/pyrogram/methods/messages/send_photo.py b/pyrogram/methods/messages/send_photo.py index 50b07540..d62a1759 100644 --- a/pyrogram/methods/messages/send_photo.py +++ b/pyrogram/methods/messages/send_photo.py @@ -167,20 +167,15 @@ class SendPhoto: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(photo, str): diff --git a/pyrogram/methods/messages/send_poll.py b/pyrogram/methods/messages/send_poll.py index ca143a02..9e89dc47 100644 --- a/pyrogram/methods/messages/send_poll.py +++ b/pyrogram/methods/messages/send_poll.py @@ -149,17 +149,14 @@ class SendPoll: await app.send_poll(chat_id, "Is this a poll question?", ["Yes", "No", "Maybe"]) """ - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) solution, solution_entities = (await utils.parse_text_entities( self, explanation, explanation_parse_mode, explanation_entities diff --git a/pyrogram/methods/messages/send_sticker.py b/pyrogram/methods/messages/send_sticker.py index c39e5f8e..847df01c 100644 --- a/pyrogram/methods/messages/send_sticker.py +++ b/pyrogram/methods/messages/send_sticker.py @@ -140,20 +140,15 @@ class SendSticker: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(sticker, str): diff --git a/pyrogram/methods/messages/send_venue.py b/pyrogram/methods/messages/send_venue.py index ea43d700..041264a6 100644 --- a/pyrogram/methods/messages/send_venue.py +++ b/pyrogram/methods/messages/send_venue.py @@ -118,17 +118,14 @@ class SendVenue: "Venue title", "Venue address") """ - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) r = await self.invoke( raw.functions.messages.SendMedia( diff --git a/pyrogram/methods/messages/send_video.py b/pyrogram/methods/messages/send_video.py index 12d50af7..64995257 100644 --- a/pyrogram/methods/messages/send_video.py +++ b/pyrogram/methods/messages/send_video.py @@ -200,20 +200,15 @@ class SendVideo: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(video, str): diff --git a/pyrogram/methods/messages/send_video_note.py b/pyrogram/methods/messages/send_video_note.py index 24c7b55d..779fbbbe 100644 --- a/pyrogram/methods/messages/send_video_note.py +++ b/pyrogram/methods/messages/send_video_note.py @@ -154,20 +154,15 @@ class SendVideoNote: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(video_note, str): diff --git a/pyrogram/methods/messages/send_voice.py b/pyrogram/methods/messages/send_voice.py index 49da4cb5..a985d0cf 100644 --- a/pyrogram/methods/messages/send_voice.py +++ b/pyrogram/methods/messages/send_voice.py @@ -162,20 +162,15 @@ class SendVoice: """ file = None - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) try: if isinstance(voice, str): diff --git a/pyrogram/methods/messages/send_web_page.py b/pyrogram/methods/messages/send_web_page.py index d37d2af9..67ca2436 100644 --- a/pyrogram/methods/messages/send_web_page.py +++ b/pyrogram/methods/messages/send_web_page.py @@ -122,20 +122,15 @@ class SendWebPage: message, entities = (await utils.parse_text_entities(self, text, parse_mode, entities)).values() - reply_to = None - reply_to_chat = None - if reply_to_message_id or message_thread_id: - if reply_to_chat_id is not None: - reply_to_chat = await self.resolve_peer(reply_to_chat_id) - reply_to = types.InputReplyToMessage( - reply_to_message_id=reply_to_message_id, - message_thread_id=message_thread_id, - reply_to_chat=reply_to_chat, - quote_text=quote_text - ) - if reply_to_story_id: - user_id = await self.resolve_peer(chat_id) - reply_to = types.InputReplyToStory(user_id=user_id, story_id=reply_to_story_id) + reply_to = await utils.get_reply_to( + client=self, + chat_id=chat_id, + reply_to_message_id=reply_to_message_id, + reply_to_story_id=reply_to_story_id, + message_thread_id=message_thread_id, + reply_to_chat_id=reply_to_chat_id, + quote_text=quote_text + ) media = raw.types.InputMediaWebPage( url=url, diff --git a/pyrogram/utils.py b/pyrogram/utils.py index 5c74103a..fe04f2b2 100644 --- a/pyrogram/utils.py +++ b/pyrogram/utils.py @@ -446,3 +446,31 @@ def datetime_to_timestamp(dt: Optional[datetime]) -> Optional[int]: async def run_sync(func: Callable[..., TypeVar("Result")], *args: Any, **kwargs: Any) -> TypeVar("Result"): loop = asyncio.get_event_loop() return await loop.run_in_executor(None, functools.partial(func, *args, **kwargs)) + +async def get_reply_to( + client: "pyrogram.Client", + chat_id: Union[int,str] = None, + reply_to_message_id: int = None, + reply_to_story_id: int = None, + message_thread_id: int = None, + reply_to_chat_id: Union[int,str] = None, + quote_text: str = None +): + reply_to = None + reply_to_chat = None + if reply_to_message_id or message_thread_id: + if reply_to_chat_id is not None: + reply_to_chat = await client.resolve_peer(reply_to_chat_id) + reply_to = types.InputReplyToMessage( + reply_to_message_id=reply_to_message_id, + message_thread_id=message_thread_id, + reply_to_chat=reply_to_chat, + quote_text=quote_text + ) + if reply_to_story_id: + user_id = await client.resolve_peer(chat_id) + reply_to = types.InputReplyToStory( + user_id=user_id, + story_id=reply_to_story_id + ) + return reply_to