diff --git a/pyrogram/methods/bots/send_game.py b/pyrogram/methods/bots/send_game.py index 98e28ed1..8af2bb0e 100644 --- a/pyrogram/methods/bots/send_game.py +++ b/pyrogram/methods/bots/send_game.py @@ -31,6 +31,7 @@ class SendGame: game_short_name: str, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, protect_content: bool = None, reply_markup: Union[ @@ -62,6 +63,10 @@ class SendGame: Unique identifier of a message thread to which the message belongs. for supergroups only + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -87,28 +92,43 @@ class SendGame: message_thread_id=message_thread_id ) - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=raw.types.InputMediaGame( - id=raw.types.InputGameShortName( - bot_id=raw.types.InputUserSelf(), - short_name=game_short_name - ), + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=raw.types.InputMediaGame( + id=raw.types.InputGameShortName( + bot_id=raw.types.InputUserSelf(), + short_name=game_short_name ), - message="", - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None - ) + ), + message="", + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) for i in r.updates: - if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage)): + if isinstance( + i, + ( + raw.types.UpdateNewMessage, + raw.types.UpdateNewChannelMessage, + raw.types.UpdateBotNewBusinessMessage + ) + ): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, - {i.id: i for i in r.chats} + {i.id: i for i in r.chats}, + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_animation.py b/pyrogram/methods/messages/send_animation.py index 2276f4e1..48f0e144 100644 --- a/pyrogram/methods/messages/send_animation.py +++ b/pyrogram/methods/messages/send_animation.py @@ -48,6 +48,7 @@ class SendAnimation: file_name: str = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -126,6 +127,10 @@ class SendAnimation: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Unique identifier for the target business connection. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -265,31 +270,40 @@ class SendAnimation: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(animation, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): message = await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) if unsave: diff --git a/pyrogram/methods/messages/send_audio.py b/pyrogram/methods/messages/send_audio.py index 9b2a9b64..e936248a 100644 --- a/pyrogram/methods/messages/send_audio.py +++ b/pyrogram/methods/messages/send_audio.py @@ -46,6 +46,7 @@ class SendAudio: file_name: str = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -119,6 +120,10 @@ class SendAudio: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -251,31 +256,40 @@ class SendAudio: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(audio, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except StopTransmission: return None diff --git a/pyrogram/methods/messages/send_chat_action.py b/pyrogram/methods/messages/send_chat_action.py index 57ebdd51..8ec307ef 100644 --- a/pyrogram/methods/messages/send_chat_action.py +++ b/pyrogram/methods/messages/send_chat_action.py @@ -28,7 +28,8 @@ class SendChatAction: self: "pyrogram.Client", chat_id: Union[int, str], action: "enums.ChatAction", - message_thread_id: int = None + message_thread_id: int = None, + business_connection_id: str = None ) -> bool: """Tell the other party that something is happening on your side. @@ -48,6 +49,10 @@ class SendChatAction: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + Returns: ``bool``: On success, True is returned. @@ -78,11 +83,16 @@ class SendChatAction: action = action.value(progress=0) else: action = action.value() - - return await self.invoke( - raw.functions.messages.SetTyping( - peer=await self.resolve_peer(chat_id), - action=action, - top_msg_id=message_thread_id - ) + rpc = raw.functions.messages.SetTyping( + peer=await self.resolve_peer(chat_id), + action=action, + top_msg_id=message_thread_id ) + if business_connection_id: + return await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + return await self.invoke(rpc) diff --git a/pyrogram/methods/messages/send_contact.py b/pyrogram/methods/messages/send_contact.py index 883a6e41..fce5af70 100644 --- a/pyrogram/methods/messages/send_contact.py +++ b/pyrogram/methods/messages/send_contact.py @@ -35,6 +35,7 @@ class SendContact: vcard: str = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_chat_id: Union[int, str] = None, quote_text: str = None, @@ -80,6 +81,10 @@ class SendContact: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -131,32 +136,41 @@ class SendContact: parse_mode=parse_mode ) - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=raw.types.InputMediaContact( - phone_number=phone_number, - first_name=first_name, - last_name=last_name or "", - vcard=vcard or "" - ), - message="", - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=raw.types.InputMediaContact( + phone_number=phone_number, + first_name=first_name, + last_name=last_name or "", + vcard=vcard or "" + ), + message="", + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_dice.py b/pyrogram/methods/messages/send_dice.py index b852af60..69bd6094 100644 --- a/pyrogram/methods/messages/send_dice.py +++ b/pyrogram/methods/messages/send_dice.py @@ -32,6 +32,7 @@ class SendDice: emoji: str = "🎲", disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -73,6 +74,10 @@ class SendDice: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -135,27 +140,36 @@ class SendDice: parse_mode=parse_mode ) - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=raw.types.InputMediaDice(emoticon=emoji), - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - message="" - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=raw.types.InputMediaDice(emoticon=emoji), + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + message="" ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_document.py b/pyrogram/methods/messages/send_document.py index 41bd2728..2dbb2b8a 100644 --- a/pyrogram/methods/messages/send_document.py +++ b/pyrogram/methods/messages/send_document.py @@ -44,6 +44,7 @@ class SendDocument: force_document: bool = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -111,6 +112,10 @@ class SendDocument: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -229,31 +234,40 @@ class SendDocument: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(document, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except StopTransmission: return None diff --git a/pyrogram/methods/messages/send_location.py b/pyrogram/methods/messages/send_location.py index 0465f235..54847100 100644 --- a/pyrogram/methods/messages/send_location.py +++ b/pyrogram/methods/messages/send_location.py @@ -33,6 +33,7 @@ class SendLocation: longitude: float, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_chat_id: Union[int, str] = None, quote_text: str = None, @@ -72,6 +73,10 @@ class SendLocation: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_chat_id (``int`` | ``str``, *optional*): Unique identifier for the origin chat. for reply to message from another chat. @@ -123,32 +128,41 @@ class SendLocation: parse_mode=parse_mode ) - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=raw.types.InputMediaGeoPoint( - geo_point=raw.types.InputGeoPoint( - lat=latitude, - long=longitude - ) - ), - message="", - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=raw.types.InputMediaGeoPoint( + geo_point=raw.types.InputGeoPoint( + lat=latitude, + long=longitude + ) + ), + message="", + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_media_group.py b/pyrogram/methods/messages/send_media_group.py index 65cf6f22..ca987c98 100644 --- a/pyrogram/methods/messages/send_media_group.py +++ b/pyrogram/methods/messages/send_media_group.py @@ -48,6 +48,7 @@ class SendMediaGroup: ]], disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -79,6 +80,10 @@ class SendMediaGroup: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -454,28 +459,38 @@ class SendMediaGroup: ) ) - r = await self.invoke( - raw.functions.messages.SendMultiMedia( - peer=await self.resolve_peer(chat_id), - multi_media=multi_media, - silent=disable_notification or None, - reply_to=reply_to, - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content - ), - sleep_threshold=60 - ) - + rpc = raw.functions.messages.SendMultiMedia( + peer=await self.resolve_peer(chat_id), + multi_media=multi_media, + silent=disable_notification or None, + reply_to=reply_to, + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content + ), + + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ), + sleep_threshold=60 + ) + else: + r = await self.invoke(rpc, sleep_threshold=60) + return await utils.parse_messages( self, raw.types.messages.Messages( messages=[m.message for m in filter( lambda u: isinstance(u, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)), + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)), r.updates )], users=r.users, chats=r.chats - ) + ), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_message.py b/pyrogram/methods/messages/send_message.py index 039deec8..2760e439 100644 --- a/pyrogram/methods/messages/send_message.py +++ b/pyrogram/methods/messages/send_message.py @@ -35,6 +35,7 @@ class SendMessage: disable_web_page_preview: bool = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: int = None, @@ -82,6 +83,10 @@ class SendMessage: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -166,21 +171,28 @@ class SendMessage: parse_mode=parse_mode ) - r = await self.invoke( - raw.functions.messages.SendMessage( - peer=await self.resolve_peer(chat_id), - no_webpage=disable_web_page_preview or None, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - reply_markup=await reply_markup.write(self) if reply_markup else None, - message=message, - entities=entities, - noforwards=protect_content, - invert_media=invert_media - ) + rpc = raw.functions.messages.SendMessage( + peer=await self.resolve_peer(chat_id), + no_webpage=disable_web_page_preview or None, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + reply_markup=await reply_markup.write(self) if reply_markup else None, + message=message, + entities=entities, + noforwards=protect_content, + invert_media=invert_media ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) if isinstance(r, raw.types.UpdateShortSentMessage): peer = await self.resolve_peer(chat_id) @@ -212,10 +224,12 @@ class SendMessage: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_photo.py b/pyrogram/methods/messages/send_photo.py index a2b18b4f..1394f313 100644 --- a/pyrogram/methods/messages/send_photo.py +++ b/pyrogram/methods/messages/send_photo.py @@ -42,6 +42,7 @@ class SendPhoto: ttl_seconds: int = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -102,6 +103,10 @@ class SendPhoto: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -214,31 +219,40 @@ class SendPhoto: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(photo, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except pyrogram.StopTransmission: return None diff --git a/pyrogram/methods/messages/send_poll.py b/pyrogram/methods/messages/send_poll.py index bceb8a8b..cb94fe59 100644 --- a/pyrogram/methods/messages/send_poll.py +++ b/pyrogram/methods/messages/send_poll.py @@ -44,6 +44,7 @@ class SendPoll: disable_notification: bool = None, protect_content: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_chat_id: Union[int, str] = None, quote_text: str = None, @@ -125,6 +126,10 @@ class SendPoll: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -177,45 +182,54 @@ class SendPoll: self, explanation, explanation_parse_mode, explanation_entities )).values() - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=raw.types.InputMediaPoll( - poll=raw.types.Poll( - id=self.rnd_id(), - question=question, - answers=[ - raw.types.PollAnswer(text=text, option=bytes([i])) - for i, text in enumerate(options) - ], - closed=is_closed, - public_voters=not is_anonymous, - multiple_choice=allows_multiple_answers, - quiz=type == enums.PollType.QUIZ or False, - close_period=open_period, - close_date=utils.datetime_to_timestamp(close_date) - ), - correct_answers=[bytes([correct_option_id])] if correct_option_id is not None else None, - solution=solution, - solution_entities=solution_entities or [] + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=raw.types.InputMediaPoll( + poll=raw.types.Poll( + id=self.rnd_id(), + question=question, + answers=[ + raw.types.PollAnswer(text=text, option=bytes([i])) + for i, text in enumerate(options) + ], + closed=is_closed, + public_voters=not is_anonymous, + multiple_choice=allows_multiple_answers, + quiz=type == enums.PollType.QUIZ or False, + close_period=open_period, + close_date=utils.datetime_to_timestamp(close_date) ), - message="", - silent=disable_notification, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None - ) + correct_answers=[bytes([correct_option_id])] if correct_option_id is not None else None, + solution=solution, + solution_entities=solution_entities or [] + ), + message="", + silent=disable_notification, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_sticker.py b/pyrogram/methods/messages/send_sticker.py index 25bc8a7d..10e39cc3 100644 --- a/pyrogram/methods/messages/send_sticker.py +++ b/pyrogram/methods/messages/send_sticker.py @@ -39,6 +39,7 @@ class SendSticker: sticker: Union[str, BinaryIO], disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -82,6 +83,10 @@ class SendSticker: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -195,31 +200,40 @@ class SendSticker: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - message="" - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + message="" ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(sticker, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except StopTransmission: return None diff --git a/pyrogram/methods/messages/send_venue.py b/pyrogram/methods/messages/send_venue.py index 5d6d6186..57db75e9 100644 --- a/pyrogram/methods/messages/send_venue.py +++ b/pyrogram/methods/messages/send_venue.py @@ -37,6 +37,7 @@ class SendVenue: foursquare_type: str = "", disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_chat_id: Union[int, str] = None, quote_text: str = None, @@ -89,6 +90,10 @@ class SendVenue: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message @@ -142,37 +147,46 @@ class SendVenue: parse_mode=parse_mode ) - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=raw.types.InputMediaVenue( - geo_point=raw.types.InputGeoPoint( - lat=latitude, - long=longitude - ), - title=title, - address=address, - provider="", - venue_id=foursquare_id, - venue_type=foursquare_type + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=raw.types.InputMediaVenue( + geo_point=raw.types.InputGeoPoint( + lat=latitude, + long=longitude ), - message="", - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None - ) + title=title, + address=address, + provider="", + venue_id=foursquare_id, + venue_type=foursquare_type + ), + message="", + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/send_video.py b/pyrogram/methods/messages/send_video.py index 43fafa4f..c599c21f 100644 --- a/pyrogram/methods/messages/send_video.py +++ b/pyrogram/methods/messages/send_video.py @@ -49,6 +49,7 @@ class SendVideo: supports_streaming: bool = True, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -132,6 +133,10 @@ class SendVideo: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -271,31 +276,40 @@ class SendVideo: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(video, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except StopTransmission: return None diff --git a/pyrogram/methods/messages/send_video_note.py b/pyrogram/methods/messages/send_video_note.py index 09bec489..2de9348d 100644 --- a/pyrogram/methods/messages/send_video_note.py +++ b/pyrogram/methods/messages/send_video_note.py @@ -41,6 +41,7 @@ class SendVideoNote: thumb: Union[str, BinaryIO] = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -97,6 +98,10 @@ class SendVideoNote: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -229,31 +234,40 @@ class SendVideoNote: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - message="" - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + message="" ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(video_note, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except StopTransmission: return None diff --git a/pyrogram/methods/messages/send_voice.py b/pyrogram/methods/messages/send_voice.py index d300cc2e..6c66a0b4 100644 --- a/pyrogram/methods/messages/send_voice.py +++ b/pyrogram/methods/messages/send_voice.py @@ -42,6 +42,7 @@ class SendVoice: duration: int = 0, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -97,6 +98,10 @@ class SendVoice: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message @@ -216,31 +221,40 @@ class SendVoice: while True: try: - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - media=media, - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - noforwards=protect_content, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + media=media, + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + noforwards=protect_content, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, caption, parse_mode, caption_entities) ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) except FilePartMissing as e: await self.save_file(voice, file_id=file.id, file_part=e.value) else: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id ) except StopTransmission: return None diff --git a/pyrogram/methods/messages/send_web_page.py b/pyrogram/methods/messages/send_web_page.py index 5a9aec9f..a411a51c 100644 --- a/pyrogram/methods/messages/send_web_page.py +++ b/pyrogram/methods/messages/send_web_page.py @@ -36,6 +36,7 @@ class SendWebPage: invert_media: bool = None, disable_notification: bool = None, message_thread_id: int = None, + business_connection_id: str = None, reply_to_message_id: int = None, reply_to_story_id: int = None, reply_to_chat_id: Union[int, str] = None, @@ -88,6 +89,10 @@ class SendWebPage: Unique identifier for the target message thread (topic) of the forum. for forum supergroups only. + business_connection_id (``str``, *optional*): + Business connection identifier. + for business bots only. + reply_to_message_id (``int``, *optional*): If the message is a reply, ID of the original message. @@ -146,21 +151,28 @@ class SendWebPage: force_large_media=large_media, force_small_media=not large_media ) - r = await self.invoke( - raw.functions.messages.SendMedia( - peer=await self.resolve_peer(chat_id), - silent=disable_notification or None, - reply_to=reply_to, - random_id=self.rnd_id(), - schedule_date=utils.datetime_to_timestamp(schedule_date), - reply_markup=await reply_markup.write(self) if reply_markup else None, - message=message, - media=media, - invert_media=invert_media, - entities=entities, - noforwards=protect_content - ) + rpc = raw.functions.messages.SendMedia( + peer=await self.resolve_peer(chat_id), + silent=disable_notification or None, + reply_to=reply_to, + random_id=self.rnd_id(), + schedule_date=utils.datetime_to_timestamp(schedule_date), + reply_markup=await reply_markup.write(self) if reply_markup else None, + message=message, + media=media, + invert_media=invert_media, + entities=entities, + noforwards=protect_content ) + if business_connection_id is not None: + r = await self.invoke( + raw.functions.InvokeWithBusinessConnection( + connection_id=business_connection_id, + query=rpc + ) + ) + else: + r = await self.invoke(rpc) if isinstance(r, raw.types.UpdateShortSentMessage): peer = await self.resolve_peer(chat_id) @@ -191,10 +203,12 @@ class SendWebPage: for i in r.updates: if isinstance(i, (raw.types.UpdateNewMessage, raw.types.UpdateNewChannelMessage, - raw.types.UpdateNewScheduledMessage)): + raw.types.UpdateNewScheduledMessage, + raw.types.UpdateBotNewBusinessMessage)): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats}, - is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage) + is_scheduled=isinstance(i, raw.types.UpdateNewScheduledMessage), + business_connection_id=business_connection_id )