diff --git a/pyrogram/methods/messages/edit_message_caption.py b/pyrogram/methods/messages/edit_message_caption.py index a902b03a..25f06366 100644 --- a/pyrogram/methods/messages/edit_message_caption.py +++ b/pyrogram/methods/messages/edit_message_caption.py @@ -32,7 +32,8 @@ class EditMessageCaption: parse_mode: Optional["enums.ParseMode"] = None, caption_entities: List["types.MessageEntity"] = None, invert_media: bool = False, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "types.Message": """Edit the caption of media messages. @@ -64,6 +65,9 @@ class EditMessageCaption: reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection on behalf of which the message to be edited was sent + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -79,5 +83,6 @@ class EditMessageCaption: parse_mode=parse_mode, entities=caption_entities, invert_media=invert_media, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=business_connection_id ) diff --git a/pyrogram/methods/messages/edit_message_media.py b/pyrogram/methods/messages/edit_message_media.py index e15218e4..d14fcff7 100644 --- a/pyrogram/methods/messages/edit_message_media.py +++ b/pyrogram/methods/messages/edit_message_media.py @@ -28,6 +28,8 @@ from pyrogram import types from pyrogram import utils from pyrogram.file_id import FileType +from .inline_session import get_session + class EditMessageMedia: async def edit_message_media( @@ -37,7 +39,8 @@ class EditMessageMedia: media: "types.InputMedia", reply_markup: "types.InlineKeyboardMarkup" = None, file_name: str = None, - invert_media: bool = False + invert_media: bool = False, + business_connection_id: str = None ) -> "types.Message": """Edit animation, audio, document, photo or video messages. @@ -69,6 +72,9 @@ class EditMessageMedia: invert_media (``bool``, *optional*): Inverts the position of the media and caption. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection on behalf of which the message to be edited was sent + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -273,17 +279,35 @@ class EditMessageMedia: else: media = utils.get_input_media_from_file_id(media.media, FileType.DOCUMENT) - r = await self.invoke( - raw.functions.messages.EditMessage( - peer=await self.resolve_peer(chat_id), - id=message_id, - media=media, - reply_markup=await reply_markup.write(self) if reply_markup else None, - message=message, - entities=entities, - invert_media=invert_media - ) + rpc = raw.functions.messages.EditMessage( + peer=await self.resolve_peer(chat_id), + id=message_id, + media=media, + reply_markup=await reply_markup.write(self) if reply_markup else None, + message=message, + entities=entities, + invert_media=invert_media ) + session = None + business_connection = None + if business_connection_id: + business_connection = self.business_user_connection_cache[business_connection_id] + if not business_connection: + business_connection = await self.get_business_connection(business_connection_id) + session = await get_session( + self, + business_connection._raw.connection.dc_id + ) + if business_connection_id: + r = await session.invoke( + raw.functions.InvokeWithBusinessConnection( + query=rpc, + connection_id=business_connection_id + ) + ) + # await session.stop() + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): @@ -292,3 +316,18 @@ class EditMessageMedia: {i.id: i for i in r.users}, {i.id: i for i in r.chats} ) + elif isinstance( + i, + ( + raw.types.UpdateBotEditBusinessMessage + ) + ): + return await types.Message._parse( + self, + i.message, + {i.id: i for i in r.users}, + {i.id: i for i in r.chats}, + business_connection_id=getattr(i, "connection_id", business_connection_id), + raw_reply_to_message=i.reply_to_message, + replies=0 + ) diff --git a/pyrogram/methods/messages/edit_message_reply_markup.py b/pyrogram/methods/messages/edit_message_reply_markup.py index c2c70da8..43717478 100644 --- a/pyrogram/methods/messages/edit_message_reply_markup.py +++ b/pyrogram/methods/messages/edit_message_reply_markup.py @@ -20,8 +20,9 @@ from typing import Union import pyrogram -from pyrogram import raw -from pyrogram import types +from pyrogram import raw, types + +from .inline_session import get_session class EditMessageReplyMarkup: @@ -30,6 +31,7 @@ class EditMessageReplyMarkup: chat_id: Union[int, str], message_id: int, reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "types.Message": """Edit only the reply markup of messages sent by the bot. @@ -48,6 +50,9 @@ class EditMessageReplyMarkup: reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection on behalf of which the message to be edited was sent + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -62,18 +67,57 @@ class EditMessageReplyMarkup: InlineKeyboardMarkup([[ InlineKeyboardButton("New button", callback_data="new_data")]])) """ - r = await self.invoke( - raw.functions.messages.EditMessage( - peer=await self.resolve_peer(chat_id), - id=message_id, - reply_markup=await reply_markup.write(self) if reply_markup else None, - ) + rpc = raw.functions.messages.EditMessage( + peer=await self.resolve_peer(chat_id), + id=message_id, + reply_markup=await reply_markup.write(self) if reply_markup else None, ) + session = None + business_connection = None + if business_connection_id: + business_connection = self.business_user_connection_cache[business_connection_id] + if not business_connection: + business_connection = await self.get_business_connection(business_connection_id) + session = await get_session( + self, + business_connection._raw.connection.dc_id + ) + if business_connection_id: + r = await session.invoke( + raw.functions.InvokeWithBusinessConnection( + query=rpc, + connection_id=business_connection_id + ) + ) + # await session.stop() + else: + r = await self.invoke(rpc) for i in r.updates: - if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): + if isinstance( + i, + ( + raw.types.UpdateEditMessage, + raw.types.UpdateEditChannelMessage + ) + ): return await types.Message._parse( self, i.message, {i.id: i for i in r.users}, {i.id: i for i in r.chats} ) + elif isinstance( + i, + ( + raw.types.UpdateBotEditBusinessMessage + ) + ): + return await types.Message._parse( + self, + i.message, + {i.id: i for i in r.users}, + {i.id: i for i in r.chats}, + business_connection_id=getattr(i, "connection_id", business_connection_id), + raw_reply_to_message=i.reply_to_message, + replies=0 + ) diff --git a/pyrogram/methods/messages/edit_message_text.py b/pyrogram/methods/messages/edit_message_text.py index cf5eb72f..bc0a30df 100644 --- a/pyrogram/methods/messages/edit_message_text.py +++ b/pyrogram/methods/messages/edit_message_text.py @@ -35,7 +35,8 @@ class EditMessageText: entities: List["types.MessageEntity"] = None, disable_web_page_preview: bool = None, invert_media: bool = None, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "types.Message": """Edit the text of messages. @@ -70,6 +71,9 @@ class EditMessageText: reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection on behalf of which the message to be edited was sent + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -85,16 +89,34 @@ class EditMessageText: disable_web_page_preview=True) """ - r = await self.invoke( - raw.functions.messages.EditMessage( - peer=await self.resolve_peer(chat_id), - id=message_id, - no_webpage=disable_web_page_preview or None, - invert_media=invert_media, - reply_markup=await reply_markup.write(self) if reply_markup else None, - **await utils.parse_text_entities(self, text, parse_mode, entities) - ) + rpc = raw.functions.messages.EditMessage( + peer=await self.resolve_peer(chat_id), + id=message_id, + no_webpage=disable_web_page_preview or None, + invert_media=invert_media, + reply_markup=await reply_markup.write(self) if reply_markup else None, + **await utils.parse_text_entities(self, text, parse_mode, entities) ) + session = None + business_connection = None + if business_connection_id: + business_connection = self.business_user_connection_cache[business_connection_id] + if not business_connection: + business_connection = await self.get_business_connection(business_connection_id) + session = await get_session( + self, + business_connection._raw.connection.dc_id + ) + if business_connection_id: + r = await session.invoke( + raw.functions.InvokeWithBusinessConnection( + query=rpc, + connection_id=business_connection_id + ) + ) + # await session.stop() + else: + r = await self.invoke(rpc) for i in r.updates: if isinstance(i, (raw.types.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): @@ -103,3 +125,18 @@ class EditMessageText: {i.id: i for i in r.users}, {i.id: i for i in r.chats} ) + elif isinstance( + i, + ( + raw.types.UpdateBotEditBusinessMessage + ) + ): + return await types.Message._parse( + self, + i.message, + {i.id: i for i in r.users}, + {i.id: i for i in r.chats}, + business_connection_id=getattr(i, "connection_id", business_connection_id), + raw_reply_to_message=i.reply_to_message, + replies=0 + ) diff --git a/pyrogram/methods/messages/stop_poll.py b/pyrogram/methods/messages/stop_poll.py index 7c3b32e3..c95ec0b5 100644 --- a/pyrogram/methods/messages/stop_poll.py +++ b/pyrogram/methods/messages/stop_poll.py @@ -20,8 +20,9 @@ from typing import Union import pyrogram -from pyrogram import raw -from pyrogram import types +from pyrogram import raw, types + +from .inline_session import get_session class StopPoll: @@ -29,7 +30,8 @@ class StopPoll: self: "pyrogram.Client", chat_id: Union[int, str], message_id: int, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "types.Poll": """Stop a poll which was sent by you. @@ -50,6 +52,9 @@ class StopPoll: reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection on behalf of which the message to be edited was sent + Returns: :obj:`~pyrogram.types.Poll`: On success, the stopped poll with the final results is returned. @@ -60,20 +65,38 @@ class StopPoll: """ poll = (await self.get_messages(chat_id, message_id)).poll - r = await self.invoke( - raw.functions.messages.EditMessage( - peer=await self.resolve_peer(chat_id), - id=message_id, - media=raw.types.InputMediaPoll( - poll=raw.types.Poll( - id=int(poll.id), - closed=True, - question="", - answers=[] - ) - ), - reply_markup=await reply_markup.write(self) if reply_markup else None - ) + rpc = raw.functions.messages.EditMessage( + peer=await self.resolve_peer(chat_id), + id=message_id, + media=raw.types.InputMediaPoll( + poll=raw.types.Poll( + id=int(poll.id), + closed=True, + question="", + answers=[] + ) + ), + reply_markup=await reply_markup.write(self) if reply_markup else None ) + session = None + business_connection = None + if business_connection_id: + business_connection = self.business_user_connection_cache[business_connection_id] + if not business_connection: + business_connection = await self.get_business_connection(business_connection_id) + session = await get_session( + self, + business_connection._raw.connection.dc_id + ) + if business_connection_id: + r = await session.invoke( + raw.functions.InvokeWithBusinessConnection( + query=rpc, + connection_id=business_connection_id + ) + ) + # await session.stop() + else: + r = await self.invoke(rpc) return types.Poll._parse(self, r.updates[0]) diff --git a/pyrogram/types/bots_and_keyboards/callback_query.py b/pyrogram/types/bots_and_keyboards/callback_query.py index e3159d48..89d04250 100644 --- a/pyrogram/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/types/bots_and_keyboards/callback_query.py @@ -204,7 +204,8 @@ class CallbackQuery(Object, Update): text=text, parse_mode=parse_mode, disable_web_page_preview=disable_web_page_preview, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.message.business_connection_id ) else: return await self._client.edit_inline_text( @@ -273,7 +274,8 @@ class CallbackQuery(Object, Update): chat_id=self.message.chat.id, message_id=self.message.id, media=media, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.message.business_connection_id ) else: return await self._client.edit_inline_media( @@ -305,7 +307,8 @@ class CallbackQuery(Object, Update): return await self._client.edit_message_reply_markup( chat_id=self.message.chat.id, message_id=self.message.id, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.message.business_connection_id, ) else: return await self._client.edit_inline_reply_markup( diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index b455530f..7d0c35f2 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -4092,7 +4092,8 @@ class Message(Object, Update): entities=entities, disable_web_page_preview=disable_web_page_preview, invert_media=invert_media, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.business_connection_id ) edit = edit_text @@ -4199,7 +4200,8 @@ class Message(Object, Update): message_id=self.id, media=media, invert_media=invert_media, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.business_connection_id ) async def edit_reply_markup(self, reply_markup: "types.InlineKeyboardMarkup" = None) -> "Message": @@ -4234,7 +4236,8 @@ class Message(Object, Update): return await self._client.edit_message_reply_markup( chat_id=self.chat.id, message_id=self.id, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.business_connection_id ) async def forward( diff --git a/pyrogram/types/messages_and_media/poll.py b/pyrogram/types/messages_and_media/poll.py index 001a9d8e..5c04cc79 100644 --- a/pyrogram/types/messages_and_media/poll.py +++ b/pyrogram/types/messages_and_media/poll.py @@ -218,7 +218,8 @@ class Poll(Object, Update): async def stop( self, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "types.Poll": """Bound method *stop* of :obj:`~pyrogram.types.Poll`. @@ -235,6 +236,9 @@ class Poll(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection on behalf of which the message to be edited was sent + Example: .. code-block:: python @@ -250,5 +254,6 @@ class Poll(Object, Update): return await self._client.stop_poll( chat_id=self.chat.id, message_id=self.id, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=business_connection_id )