From ff69bbaf3b787f73a07ac9265ad4fd9535f40dd8 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sat, 13 Jul 2024 15:02:12 +0700 Subject: [PATCH 01/16] pyrofork: fix Chat.promote_member NoneType error Signed-off-by: wulan17 --- pyrogram/types/user_and_chats/chat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/types/user_and_chats/chat.py b/pyrogram/types/user_and_chats/chat.py index 380f4591..e3e7ee0a 100644 --- a/pyrogram/types/user_and_chats/chat.py +++ b/pyrogram/types/user_and_chats/chat.py @@ -954,7 +954,7 @@ class Chat(Object): self, user_id: Union[int, str], privileges: "types.ChatPrivileges" = None, - title: Optional[str] = None, + title: Optional[str] = "", ) -> bool: """Bound method *promote_member* of :obj:`~pyrogram.types.Chat`. From 4795bdbd5b2eb96a510639c3902707ffe3d0f438 Mon Sep 17 00:00:00 2001 From: S!R X <111647198+SIR-X@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:50:26 +0330 Subject: [PATCH 02/16] Fix a bug with get_session * Fix a bug InputBotInlineMessageID's dc_id being the same with Client's dc_id. --------- https://github.com/KurimuzonAkuma/pyrogram/pull/76 Co-authored-by: KurimuzonAkuma <31959970+KurimuzonAkuma@users.noreply.github.com> Signed-off-by: wulan17 --- pyrogram/methods/messages/inline_session.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyrogram/methods/messages/inline_session.py b/pyrogram/methods/messages/inline_session.py index 4f09bc88..ed6e9980 100644 --- a/pyrogram/methods/messages/inline_session.py +++ b/pyrogram/methods/messages/inline_session.py @@ -40,6 +40,9 @@ async def get_session(client: "pyrogram.Client", dc_id: int): await session.start() + if dc_id == await client.storage.dc_id(): + return session + for _ in range(3): exported_auth = await client.invoke( raw.functions.auth.ExportAuthorization( From 58f0031eadaed3006968137b575d30929ac0a112 Mon Sep 17 00:00:00 2001 From: KurimuzonAkuma Date: Wed, 27 Dec 2023 01:44:51 +0300 Subject: [PATCH 03/16] Raise exception if auth key not found Signed-off-by: wulan17 --- pyrogram/session/session.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index e023d88b..a6bc06d2 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -309,6 +309,12 @@ class Session: if packet: error_code = -Int.read(BytesIO(packet)) + if error_code == 404: + raise Exception( + "Auth key not found in the system. You must delete your session file" + "and log in again with your phone number or bot token" + ) + log.warning( "Server sent transport error: %s (%s)", error_code, Session.TRANSPORT_ERRORS.get(error_code, "unknown error") From f37c5c9f2f575d09811e0558643d29cea9845730 Mon Sep 17 00:00:00 2001 From: KurimuzonAkuma Date: Mon, 8 Jul 2024 16:05:55 +0300 Subject: [PATCH 04/16] Change Exception to Unauthorized when auth key not found Signed-off-by: wulan17 --- pyrogram/session/session.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index a6bc06d2..40625cfd 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -33,7 +33,7 @@ from pyrogram.errors import ( RPCError, InternalServerError, AuthKeyDuplicated, FloodWait, FloodPremiumWait, ServiceUnavailable, BadMsgNotification, - SecurityCheckMismatch + SecurityCheckMismatch, Unauthorized ) from pyrogram.raw.all import layer from pyrogram.raw.core import TLObject, MsgContainer, Int, FutureSalts @@ -310,9 +310,9 @@ class Session: error_code = -Int.read(BytesIO(packet)) if error_code == 404: - raise Exception( - "Auth key not found in the system. You must delete your session file" - "and log in again with your phone number or bot token" + raise Unauthorized( + "Auth key not found in the system. You must delete your session file " + "and log in again with your phone number or bot token." ) log.warning( From c394a3ea3a975bedb5ae771c36095e43fccb8525 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sat, 13 Jul 2024 15:29:00 +0700 Subject: [PATCH 05/16] pyrofork: Bump version to 2.3.33 Signed-off-by: wulan17 --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 6a9e4b04..ccbf7019 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -18,7 +18,7 @@ # along with Pyrofork. If not, see . __fork_name__ = "PyroFork" -__version__ = "2.3.32" +__version__ = "2.3.33" __license__ = "GNU Lesser General Public License v3.0 (LGPL-3.0)" __copyright__ = "Copyright (C) 2022-present Mayuri-Chan " From 8584ea3599a029c8936e4677137d31b186d06601 Mon Sep 17 00:00:00 2001 From: KurimuzonAkuma Date: Thu, 7 Mar 2024 12:39:50 +0300 Subject: [PATCH 06/16] Allow to specify a limit to message cache size Signed-off-by: wulan17 --- pyrogram/client.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pyrogram/client.py b/pyrogram/client.py index 761fd1b0..23a378b3 100644 --- a/pyrogram/client.py +++ b/pyrogram/client.py @@ -203,6 +203,10 @@ class Client(Methods): A value that is too high may result in network related issues. Defaults to 1. + max_message_cache_size (``int``, *optional*): + Set the maximum size of the message cache. + Defaults to 10000. + client_platform (:obj:`~pyrogram.enums.ClientPlatform`, *optional*): The platform where this client is running. Defaults to 'other' @@ -224,6 +228,7 @@ class Client(Methods): UPDATES_WATCHDOG_INTERVAL = 15 * 60 MAX_CONCURRENT_TRANSMISSIONS = 1 + MAX_MESSAGE_CACHE_SIZE = 10000 mimetypes = MimeTypes() mimetypes.readfp(StringIO(mime_types)) @@ -259,7 +264,8 @@ class Client(Methods): sleep_threshold: int = Session.SLEEP_THRESHOLD, hide_password: Optional[bool] = False, max_concurrent_transmissions: int = MAX_CONCURRENT_TRANSMISSIONS, - client_platform: "enums.ClientPlatform" = enums.ClientPlatform.OTHER + client_platform: "enums.ClientPlatform" = enums.ClientPlatform.OTHER, + max_message_cache_size: int = MAX_MESSAGE_CACHE_SIZE ): super().__init__() @@ -292,6 +298,7 @@ class Client(Methods): self.hide_password = hide_password self.max_concurrent_transmissions = max_concurrent_transmissions self.client_platform = client_platform + self.max_message_cache_size = max_message_cache_size self.executor = ThreadPoolExecutor(self.workers, thread_name_prefix="Handler") @@ -341,7 +348,7 @@ class Client(Methods): self.me: Optional[User] = None - self.message_cache = Cache(10000) + self.message_cache = Cache(self.max_message_cache_size) # Sometimes, for some reason, the server will stop sending updates and will only respond to pings. # This watchdog will invoke updates.GetState in order to wake up the server and enable it sending updates again From fb2d49efbdb3dcea8a3f5a6f7fa151862f92d489 Mon Sep 17 00:00:00 2001 From: shriMADhav U k Date: Mon, 8 Apr 2024 08:58:45 +0200 Subject: [PATCH 07/16] Add business_user_connection_cache similar to message_cache Signed-off-by: wulan17 --- pyrogram/client.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pyrogram/client.py b/pyrogram/client.py index 23a378b3..a6dffe2c 100644 --- a/pyrogram/client.py +++ b/pyrogram/client.py @@ -207,6 +207,10 @@ class Client(Methods): Set the maximum size of the message cache. Defaults to 10000. + max_business_user_connection_cache_size (``int``, *optional*): + Set the maximum size of the message cache. + Defaults to 10000. + client_platform (:obj:`~pyrogram.enums.ClientPlatform`, *optional*): The platform where this client is running. Defaults to 'other' @@ -228,7 +232,7 @@ class Client(Methods): UPDATES_WATCHDOG_INTERVAL = 15 * 60 MAX_CONCURRENT_TRANSMISSIONS = 1 - MAX_MESSAGE_CACHE_SIZE = 10000 + MAX_CACHE_SIZE = 10000 mimetypes = MimeTypes() mimetypes.readfp(StringIO(mime_types)) @@ -265,7 +269,8 @@ class Client(Methods): hide_password: Optional[bool] = False, max_concurrent_transmissions: int = MAX_CONCURRENT_TRANSMISSIONS, client_platform: "enums.ClientPlatform" = enums.ClientPlatform.OTHER, - max_message_cache_size: int = MAX_MESSAGE_CACHE_SIZE + max_message_cache_size: int = MAX_CACHE_SIZE, + max_business_user_connection_cache_size: int = MAX_CACHE_SIZE ): super().__init__() @@ -299,6 +304,8 @@ class Client(Methods): self.max_concurrent_transmissions = max_concurrent_transmissions self.client_platform = client_platform self.max_message_cache_size = max_message_cache_size + self.max_message_cache_size = max_message_cache_size + self.max_business_user_connection_cache_size = max_business_user_connection_cache_size self.executor = ThreadPoolExecutor(self.workers, thread_name_prefix="Handler") @@ -349,6 +356,7 @@ class Client(Methods): self.me: Optional[User] = None self.message_cache = Cache(self.max_message_cache_size) + self.business_user_connection_cache = Cache(self.max_business_user_connection_cache_size) # Sometimes, for some reason, the server will stop sending updates and will only respond to pings. # This watchdog will invoke updates.GetState in order to wake up the server and enable it sending updates again From 9d0c11caf501d6986198a1a8e7c819be2d2f6796 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sun, 14 Jul 2024 19:32:00 +0700 Subject: [PATCH 08/16] pyrofork: fix CallbackQuery parser errors Signed-off-by: wulan17 --- pyrogram/types/bots_and_keyboards/callback_query.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pyrogram/types/bots_and_keyboards/callback_query.py b/pyrogram/types/bots_and_keyboards/callback_query.py index cc709862..c1ac0d6c 100644 --- a/pyrogram/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/types/bots_and_keyboards/callback_query.py @@ -107,11 +107,10 @@ class CallbackQuery(Object, Update): client, callback_query.message, users, - chats, + {}, is_scheduled=False, replies=0, - business_connection_id=callback_query.connection_id, - raw_reply_to_message=getattr(callback_query, "reply_to_message", None) + business_connection_id=callback_query.connection_id ) # Try to decode callback query data into string. If that fails, fallback to bytes instead of decoding by # ignoring/replacing errors, this way, button clicks will still work. From 48e8d0c4a1185731119dc0c24b7afcf49851ecb8 Mon Sep 17 00:00:00 2001 From: shriMADhav U k Date: Sun, 7 Apr 2024 16:12:24 +0200 Subject: [PATCH 09/16] Add get_business_connection to get information about the BusinessConnection Co-authored-by: wulan17 Signed-off-by: wulan17 --- compiler/docs/compiler.py | 4 ++ compiler/docs/template/methods.rst | 13 +++++ pyrogram/methods/__init__.py | 2 + pyrogram/methods/business/__init__.py | 25 ++++++++ .../business/get_business_connection.py | 58 +++++++++++++++++++ 5 files changed, 102 insertions(+) create mode 100644 pyrogram/methods/business/__init__.py create mode 100644 pyrogram/methods/business/get_business_connection.py diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index f6479d74..c2411639 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -374,6 +374,10 @@ def pyrogram_api(): set_bot_info get_collectible_item_info """, + business=""" + Telegram Business + get_business_connection + """, authorization=""" Authorization connect diff --git a/compiler/docs/template/methods.rst b/compiler/docs/template/methods.rst index e69a89c2..c48e37ac 100644 --- a/compiler/docs/template/methods.rst +++ b/compiler/docs/template/methods.rst @@ -112,6 +112,19 @@ Stickers {stickers} +Telegram Business +------------- + +.. autosummary:: + :nosignatures: + + {business} + +.. toctree:: + :hidden: + + {business} + Users ----- diff --git a/pyrogram/methods/__init__.py b/pyrogram/methods/__init__.py index e788ab46..2da4627c 100644 --- a/pyrogram/methods/__init__.py +++ b/pyrogram/methods/__init__.py @@ -30,6 +30,7 @@ from .pyromod import Pyromod from .stickers import Stickers from .users import Users from .utilities import Utilities +from .business import TelegramBusiness class Methods( @@ -46,5 +47,6 @@ class Methods( Decorators, Utilities, InviteLinks, + TelegramBusiness, ): pass diff --git a/pyrogram/methods/business/__init__.py b/pyrogram/methods/business/__init__.py new file mode 100644 index 00000000..eda3b7f0 --- /dev/null +++ b/pyrogram/methods/business/__init__.py @@ -0,0 +1,25 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-present Dan +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from .get_business_connection import GetBusinessConnection + + +class TelegramBusiness( + GetBusinessConnection, +): + pass diff --git a/pyrogram/methods/business/get_business_connection.py b/pyrogram/methods/business/get_business_connection.py new file mode 100644 index 00000000..5fe7dc56 --- /dev/null +++ b/pyrogram/methods/business/get_business_connection.py @@ -0,0 +1,58 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-present Dan +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from datetime import datetime +from typing import Union, List + +import pyrogram +from pyrogram import types, utils, raw + + +class GetBusinessConnection: + async def get_business_connection( + self: "pyrogram.Client", + business_connection_id: str + ) -> "types.Message": + """Use this method to get information about the connection of the bot with a business account. + + .. include:: /_includes/usable-by/bots.rst + + Parameters: + business_connection_id (``str``): + Unique identifier of the business connection + + Returns: + :obj:`~pyrogram.types.BusinessConnection`: On success, the the connection of the bot with a business account is returned. + """ + + r = await self.invoke( + raw.functions.account.GetBotBusinessConnection( + connection_id=business_connection_id + ) + ) + for i in r.updates: + if isinstance( + i, + ( + raw.types.UpdateBotBusinessConnect + ) + ): + return await types.BotBusinessConnection._parse( + client=self, + bot_connection=i.connection + ) From 61398bc5a4cb36d65e4bc9e80a05db5bb38f0074 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sun, 14 Jul 2024 19:49:40 +0700 Subject: [PATCH 10/16] Revert "Add business_connection_id parameter in" This reverts commit 4d6fb409b83fface5e925597995e338e1d7d136d. Signed-off-by: wulan17 --- .../methods/messages/edit_message_caption.py | 9 +-- .../methods/messages/edit_message_media.py | 61 ++++-------------- .../messages/edit_message_reply_markup.py | 62 +++---------------- .../methods/messages/edit_message_text.py | 57 +++-------------- pyrogram/methods/messages/stop_poll.py | 57 +++++------------ .../bots_and_keyboards/callback_query.py | 9 +-- pyrogram/types/messages_and_media/message.py | 9 +-- pyrogram/types/messages_and_media/poll.py | 9 +-- 8 files changed, 57 insertions(+), 216 deletions(-) diff --git a/pyrogram/methods/messages/edit_message_caption.py b/pyrogram/methods/messages/edit_message_caption.py index 25f06366..a902b03a 100644 --- a/pyrogram/methods/messages/edit_message_caption.py +++ b/pyrogram/methods/messages/edit_message_caption.py @@ -32,8 +32,7 @@ class EditMessageCaption: parse_mode: Optional["enums.ParseMode"] = None, caption_entities: List["types.MessageEntity"] = None, invert_media: bool = False, - reply_markup: "types.InlineKeyboardMarkup" = None, - business_connection_id: str = None + reply_markup: "types.InlineKeyboardMarkup" = None ) -> "types.Message": """Edit the caption of media messages. @@ -65,9 +64,6 @@ 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. @@ -83,6 +79,5 @@ class EditMessageCaption: parse_mode=parse_mode, entities=caption_entities, invert_media=invert_media, - reply_markup=reply_markup, - business_connection_id=business_connection_id + reply_markup=reply_markup ) diff --git a/pyrogram/methods/messages/edit_message_media.py b/pyrogram/methods/messages/edit_message_media.py index d14fcff7..e15218e4 100644 --- a/pyrogram/methods/messages/edit_message_media.py +++ b/pyrogram/methods/messages/edit_message_media.py @@ -28,8 +28,6 @@ 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( @@ -39,8 +37,7 @@ class EditMessageMedia: media: "types.InputMedia", reply_markup: "types.InlineKeyboardMarkup" = None, file_name: str = None, - invert_media: bool = False, - business_connection_id: str = None + invert_media: bool = False ) -> "types.Message": """Edit animation, audio, document, photo or video messages. @@ -72,9 +69,6 @@ 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. @@ -279,35 +273,17 @@ class EditMessageMedia: else: media = utils.get_input_media_from_file_id(media.media, FileType.DOCUMENT) - 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 + 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 + ) ) - 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)): @@ -316,18 +292,3 @@ 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 43717478..c2c70da8 100644 --- a/pyrogram/methods/messages/edit_message_reply_markup.py +++ b/pyrogram/methods/messages/edit_message_reply_markup.py @@ -20,9 +20,8 @@ from typing import Union import pyrogram -from pyrogram import raw, types - -from .inline_session import get_session +from pyrogram import raw +from pyrogram import types class EditMessageReplyMarkup: @@ -31,7 +30,6 @@ 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. @@ -50,9 +48,6 @@ 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. @@ -67,57 +62,18 @@ class EditMessageReplyMarkup: InlineKeyboardMarkup([[ InlineKeyboardButton("New button", callback_data="new_data")]])) """ - 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, + 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, + ) ) - 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 bc0a30df..cf5eb72f 100644 --- a/pyrogram/methods/messages/edit_message_text.py +++ b/pyrogram/methods/messages/edit_message_text.py @@ -35,8 +35,7 @@ class EditMessageText: entities: List["types.MessageEntity"] = None, disable_web_page_preview: bool = None, invert_media: bool = None, - reply_markup: "types.InlineKeyboardMarkup" = None, - business_connection_id: str = None + reply_markup: "types.InlineKeyboardMarkup" = None ) -> "types.Message": """Edit the text of messages. @@ -71,9 +70,6 @@ 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. @@ -89,34 +85,16 @@ class EditMessageText: disable_web_page_preview=True) """ - 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) + 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) + ) ) - 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)): @@ -125,18 +103,3 @@ 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 c95ec0b5..7c3b32e3 100644 --- a/pyrogram/methods/messages/stop_poll.py +++ b/pyrogram/methods/messages/stop_poll.py @@ -20,9 +20,8 @@ from typing import Union import pyrogram -from pyrogram import raw, types - -from .inline_session import get_session +from pyrogram import raw +from pyrogram import types class StopPoll: @@ -30,8 +29,7 @@ class StopPoll: self: "pyrogram.Client", chat_id: Union[int, str], message_id: int, - reply_markup: "types.InlineKeyboardMarkup" = None, - business_connection_id: str = None + reply_markup: "types.InlineKeyboardMarkup" = None ) -> "types.Poll": """Stop a poll which was sent by you. @@ -52,9 +50,6 @@ 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. @@ -65,38 +60,20 @@ class StopPoll: """ poll = (await self.get_messages(chat_id, message_id)).poll - 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 + 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 + ) ) - 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 c1ac0d6c..9b110fa1 100644 --- a/pyrogram/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/types/bots_and_keyboards/callback_query.py @@ -215,8 +215,7 @@ class CallbackQuery(Object, Update): text=text, parse_mode=parse_mode, disable_web_page_preview=disable_web_page_preview, - reply_markup=reply_markup, - business_connection_id=self.message.business_connection_id + reply_markup=reply_markup ) else: return await self._client.edit_inline_text( @@ -285,8 +284,7 @@ class CallbackQuery(Object, Update): chat_id=self.message.chat.id, message_id=self.message.id, media=media, - reply_markup=reply_markup, - business_connection_id=self.message.business_connection_id + reply_markup=reply_markup ) else: return await self._client.edit_inline_media( @@ -318,8 +316,7 @@ 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, - business_connection_id=self.message.business_connection_id, + reply_markup=reply_markup ) 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 f1b56b37..f797fcbd 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -4121,8 +4121,7 @@ class Message(Object, Update): entities=entities, disable_web_page_preview=disable_web_page_preview, invert_media=invert_media, - reply_markup=reply_markup, - business_connection_id=self.business_connection_id + reply_markup=reply_markup ) edit = edit_text @@ -4229,8 +4228,7 @@ class Message(Object, Update): message_id=self.id, media=media, invert_media=invert_media, - reply_markup=reply_markup, - business_connection_id=self.business_connection_id + reply_markup=reply_markup ) async def edit_reply_markup(self, reply_markup: "types.InlineKeyboardMarkup" = None) -> "Message": @@ -4265,8 +4263,7 @@ 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, - business_connection_id=self.business_connection_id + reply_markup=reply_markup ) async def forward( diff --git a/pyrogram/types/messages_and_media/poll.py b/pyrogram/types/messages_and_media/poll.py index 5c04cc79..001a9d8e 100644 --- a/pyrogram/types/messages_and_media/poll.py +++ b/pyrogram/types/messages_and_media/poll.py @@ -218,8 +218,7 @@ class Poll(Object, Update): async def stop( self, - reply_markup: "types.InlineKeyboardMarkup" = None, - business_connection_id: str = None + reply_markup: "types.InlineKeyboardMarkup" = None ) -> "types.Poll": """Bound method *stop* of :obj:`~pyrogram.types.Poll`. @@ -236,9 +235,6 @@ 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 @@ -254,6 +250,5 @@ class Poll(Object, Update): return await self._client.stop_poll( chat_id=self.chat.id, message_id=self.id, - reply_markup=reply_markup, - business_connection_id=business_connection_id + reply_markup=reply_markup ) From e999da461d24d1359c82eb09b34a6fb047f4afba Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sun, 14 Jul 2024 20:02:29 +0700 Subject: [PATCH 11/16] pyrofork: Add missings business_connection_id Signed-off-by: wulan17 --- .../methods/messages/edit_message_caption.py | 9 +++- .../methods/messages/edit_message_media.py | 33 ++++++++++----- .../messages/edit_message_reply_markup.py | 23 ++++++++--- .../methods/messages/edit_message_text.py | 31 +++++++++----- pyrogram/methods/messages/stop_poll.py | 41 ++++++++++++------- .../bots_and_keyboards/callback_query.py | 25 +++++++---- pyrogram/types/messages_and_media/message.py | 12 ++++-- pyrogram/types/messages_and_media/poll.py | 3 +- 8 files changed, 121 insertions(+), 56 deletions(-) diff --git a/pyrogram/methods/messages/edit_message_caption.py b/pyrogram/methods/messages/edit_message_caption.py index a902b03a..0900670c 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. + 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..96a526fc 100644 --- a/pyrogram/methods/messages/edit_message_media.py +++ b/pyrogram/methods/messages/edit_message_media.py @@ -37,7 +37,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 +70,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. + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -273,17 +277,24 @@ 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 ) + 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.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): diff --git a/pyrogram/methods/messages/edit_message_reply_markup.py b/pyrogram/methods/messages/edit_message_reply_markup.py index c2c70da8..2cb56436 100644 --- a/pyrogram/methods/messages/edit_message_reply_markup.py +++ b/pyrogram/methods/messages/edit_message_reply_markup.py @@ -30,6 +30,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 +49,9 @@ class EditMessageReplyMarkup: reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -62,13 +66,20 @@ 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 ) + 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.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): diff --git a/pyrogram/methods/messages/edit_message_text.py b/pyrogram/methods/messages/edit_message_text.py index cf5eb72f..58f003b6 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. + Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. @@ -85,16 +89,23 @@ 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) ) + 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.UpdateEditMessage, raw.types.UpdateEditChannelMessage)): diff --git a/pyrogram/methods/messages/stop_poll.py b/pyrogram/methods/messages/stop_poll.py index 7c3b32e3..8a20c8ab 100644 --- a/pyrogram/methods/messages/stop_poll.py +++ b/pyrogram/methods/messages/stop_poll.py @@ -29,7 +29,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 +51,9 @@ class StopPoll: reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + Returns: :obj:`~pyrogram.types.Poll`: On success, the stopped poll with the final results is returned. @@ -60,20 +64,27 @@ 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 ) + 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) 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 9b110fa1..b99e4c27 100644 --- a/pyrogram/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/types/bots_and_keyboards/callback_query.py @@ -215,7 +215,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=getattr(self.message, "business_connection_id", None) ) else: return await self._client.edit_inline_text( @@ -223,7 +224,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=getattr(self.message, "business_connection_id", None) ) async def edit_message_caption( @@ -254,7 +256,12 @@ class CallbackQuery(Object, Update): Raises: RPCError: In case of a Telegram RPC error. """ - return await self.edit_message_text(caption, parse_mode, reply_markup=reply_markup) + return await self.edit_message_text( + caption, + parse_mode, + reply_markup=reply_markup, + business_connection_id=getattr(self.message, "business_connection_id", None) + ) async def edit_message_media( self, @@ -284,13 +291,15 @@ 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=getattr(self.message, "business_connection_id", None) ) else: return await self._client.edit_inline_media( inline_message_id=self.inline_message_id, media=media, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=getattr(self.message, "business_connection_id", None) ) async def edit_message_reply_markup( @@ -316,10 +325,12 @@ 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=getattr(self.message, "business_connection_id", None) ) else: return await self._client.edit_inline_reply_markup( inline_message_id=self.inline_message_id, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=getattr(self.message, "business_connection_id", None) ) diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index f797fcbd..fa6fc76f 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -4121,7 +4121,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 @@ -4181,7 +4182,8 @@ class Message(Object, Update): parse_mode=parse_mode, caption_entities=caption_entities, invert_media=invert_media, - reply_markup=reply_markup + reply_markup=reply_markup, + business_connection_id=self.business_connection_id ) async def edit_media( @@ -4228,7 +4230,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": @@ -4263,7 +4266,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..44193690 100644 --- a/pyrogram/types/messages_and_media/poll.py +++ b/pyrogram/types/messages_and_media/poll.py @@ -250,5 +250,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=self.business_connection_id ) From b0f449a0d6e44e7335a0461d6a6ef7e173db9091 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sun, 14 Jul 2024 20:35:43 +0700 Subject: [PATCH 12/16] pyrofork: Bump version to 2.3.34 Signed-off-by: wulan17 --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index ccbf7019..51b02db5 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -18,7 +18,7 @@ # along with Pyrofork. If not, see . __fork_name__ = "PyroFork" -__version__ = "2.3.33" +__version__ = "2.3.34" __license__ = "GNU Lesser General Public License v3.0 (LGPL-3.0)" __copyright__ = "Copyright (C) 2022-present Mayuri-Chan " From d46e8f1da41e9459b6e46decd59939958371ee6b Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sun, 14 Jul 2024 21:01:46 +0700 Subject: [PATCH 13/16] pyrofork: Add support for requested channel/chat/user in utils.get_raw_peer_id Signed-off-by: wulan17 --- pyrogram/utils.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pyrogram/utils.py b/pyrogram/utils.py index 6b1857d7..bc0d1421 100644 --- a/pyrogram/utils.py +++ b/pyrogram/utils.py @@ -281,15 +281,20 @@ MAX_USER_ID_OLD = 2147483647 MAX_USER_ID = 999999999999 -def get_raw_peer_id(peer: raw.base.Peer) -> Optional[int]: +def get_raw_peer_id( + peer: Union[ + raw.base.Peer, + raw.base.RequestedPeer + ] + ) -> Optional[int]: """Get the raw peer id from a Peer object""" - if isinstance(peer, raw.types.PeerUser): + if isinstance(peer, raw.types.PeerUser) or isinstance(peer, raw.types.RequestedPeerUser): return peer.user_id - if isinstance(peer, raw.types.PeerChat): + if isinstance(peer, raw.types.PeerChat) or isinstance(peer, raw.types.RequestedPeerChat): return peer.chat_id - if isinstance(peer, raw.types.PeerChannel): + if isinstance(peer, raw.types.PeerChannel) or isinstance(peer, raw.types.RequestedPeerChannel): return peer.channel_id return None From 561d3d3def8f9635a23d7145efa7179713fc7e67 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Sun, 14 Jul 2024 21:03:30 +0700 Subject: [PATCH 14/16] pyrofork: Bump version to 2.3.35 Signed-off-by: wulan17 --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 51b02db5..fa0a650d 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -18,7 +18,7 @@ # along with Pyrofork. If not, see . __fork_name__ = "PyroFork" -__version__ = "2.3.34" +__version__ = "2.3.35" __license__ = "GNU Lesser General Public License v3.0 (LGPL-3.0)" __copyright__ = "Copyright (C) 2022-present Mayuri-Chan " From 869965acf3d29587291bcf8c5211f0dca254e133 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Mon, 15 Jul 2024 16:35:22 +0700 Subject: [PATCH 15/16] pyrofork: Refactor business_connection Signed-off-by: wulan17 --- .../methods/messages/edit_message_caption.py | 1 + .../methods/messages/edit_message_media.py | 1 + .../messages/edit_message_reply_markup.py | 1 + .../methods/messages/edit_message_text.py | 1 + .../bots_and_keyboards/callback_query.py | 55 ++++++++++++++----- pyrogram/types/messages_and_media/message.py | 39 ++++++++++--- pyrogram/types/messages_and_media/poll.py | 8 ++- 7 files changed, 83 insertions(+), 23 deletions(-) diff --git a/pyrogram/methods/messages/edit_message_caption.py b/pyrogram/methods/messages/edit_message_caption.py index 0900670c..c5ef508e 100644 --- a/pyrogram/methods/messages/edit_message_caption.py +++ b/pyrogram/methods/messages/edit_message_caption.py @@ -67,6 +67,7 @@ class EditMessageCaption: business_connection_id (``str``, *optional*): Unique identifier of the business connection. + for business bots only. Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. diff --git a/pyrogram/methods/messages/edit_message_media.py b/pyrogram/methods/messages/edit_message_media.py index 96a526fc..c1c2a4e1 100644 --- a/pyrogram/methods/messages/edit_message_media.py +++ b/pyrogram/methods/messages/edit_message_media.py @@ -72,6 +72,7 @@ class EditMessageMedia: business_connection_id (``str``, *optional*): Unique identifier of the business connection. + for business bots only. Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. diff --git a/pyrogram/methods/messages/edit_message_reply_markup.py b/pyrogram/methods/messages/edit_message_reply_markup.py index 2cb56436..67349b3d 100644 --- a/pyrogram/methods/messages/edit_message_reply_markup.py +++ b/pyrogram/methods/messages/edit_message_reply_markup.py @@ -51,6 +51,7 @@ class EditMessageReplyMarkup: business_connection_id (``str``, *optional*): Unique identifier of the business connection. + for business bots only. Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. diff --git a/pyrogram/methods/messages/edit_message_text.py b/pyrogram/methods/messages/edit_message_text.py index 58f003b6..31f4eb47 100644 --- a/pyrogram/methods/messages/edit_message_text.py +++ b/pyrogram/methods/messages/edit_message_text.py @@ -73,6 +73,7 @@ class EditMessageText: business_connection_id (``str``, *optional*): Unique identifier of the business connection. + for business bots only. Returns: :obj:`~pyrogram.types.Message`: On success, the edited message is returned. diff --git a/pyrogram/types/bots_and_keyboards/callback_query.py b/pyrogram/types/bots_and_keyboards/callback_query.py index b99e4c27..1491497b 100644 --- a/pyrogram/types/bots_and_keyboards/callback_query.py +++ b/pyrogram/types/bots_and_keyboards/callback_query.py @@ -181,7 +181,8 @@ class CallbackQuery(Object, Update): text: str, parse_mode: Optional["enums.ParseMode"] = None, disable_web_page_preview: bool = None, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: Optional[str] = None ) -> Union["types.Message", bool]: """Edit the text of messages attached to callback queries. @@ -201,6 +202,10 @@ class CallbackQuery(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: :obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited message is returned, otherwise True is returned (message sent via the bot, as inline query result). @@ -224,15 +229,15 @@ class CallbackQuery(Object, Update): text=text, parse_mode=parse_mode, disable_web_page_preview=disable_web_page_preview, - reply_markup=reply_markup, - business_connection_id=getattr(self.message, "business_connection_id", None) + reply_markup=reply_markup ) async def edit_message_caption( self, caption: str, parse_mode: Optional["enums.ParseMode"] = None, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: Optional[str] = None ) -> Union["types.Message", bool]: """Edit the caption of media messages attached to callback queries. @@ -249,6 +254,10 @@ class CallbackQuery(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: :obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited message is returned, otherwise True is returned (message sent via the bot, as inline query result). @@ -260,13 +269,18 @@ class CallbackQuery(Object, Update): caption, parse_mode, reply_markup=reply_markup, - business_connection_id=getattr(self.message, "business_connection_id", None) + business_connection_id=getattr( + self.message, + "business_connection_id", + None + ) if business_connection_id is None else business_connection_id ) async def edit_message_media( self, media: "types.InputMedia", - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: Optional[str] = None ) -> Union["types.Message", bool]: """Edit animation, audio, document, photo or video messages attached to callback queries. @@ -279,6 +293,10 @@ class CallbackQuery(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: :obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited message is returned, otherwise True is returned (message sent via the bot, as inline query result). @@ -292,19 +310,23 @@ class CallbackQuery(Object, Update): message_id=self.message.id, media=media, reply_markup=reply_markup, - business_connection_id=getattr(self.message, "business_connection_id", None) + business_connection_id=getattr( + self.message, + "business_connection_id", + None + ) if business_connection_id is None else business_connection_id ) else: return await self._client.edit_inline_media( inline_message_id=self.inline_message_id, media=media, - reply_markup=reply_markup, - business_connection_id=getattr(self.message, "business_connection_id", None) + reply_markup=reply_markup ) async def edit_message_reply_markup( self, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: Optional[str] = None ) -> Union["types.Message", bool]: """Edit only the reply markup of messages attached to callback queries. @@ -314,6 +336,10 @@ class CallbackQuery(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: :obj:`~pyrogram.types.Message` | ``bool``: On success, if the edited message was sent by the bot, the edited message is returned, otherwise True is returned (message sent via the bot, as inline query result). @@ -326,11 +352,14 @@ class CallbackQuery(Object, Update): chat_id=self.message.chat.id, message_id=self.message.id, reply_markup=reply_markup, - business_connection_id=getattr(self.message, "business_connection_id", None) + business_connection_id=getattr( + self.message, + "business_connection_id", + None + ) if business_connection_id is None else business_connection_id ) else: return await self._client.edit_inline_reply_markup( inline_message_id=self.inline_message_id, - reply_markup=reply_markup, - business_connection_id=getattr(self.message, "business_connection_id", None) + reply_markup=reply_markup ) diff --git a/pyrogram/types/messages_and_media/message.py b/pyrogram/types/messages_and_media/message.py index fa6fc76f..d88a78bc 100644 --- a/pyrogram/types/messages_and_media/message.py +++ b/pyrogram/types/messages_and_media/message.py @@ -4066,7 +4066,8 @@ class Message(Object, Update): 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 ) -> "Message": """Bound method *edit_text* of :obj:`~pyrogram.types.Message`. @@ -4107,6 +4108,10 @@ class Message(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: On success, the edited :obj:`~pyrogram.types.Message` is returned. @@ -4122,7 +4127,7 @@ class Message(Object, Update): disable_web_page_preview=disable_web_page_preview, invert_media=invert_media, reply_markup=reply_markup, - business_connection_id=self.business_connection_id + business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id ) edit = edit_text @@ -4133,7 +4138,8 @@ class Message(Object, Update): parse_mode: Optional["enums.ParseMode"] = None, caption_entities: List["types.MessageEntity"] = None, invert_media: bool = None, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "Message": """Bound method *edit_caption* of :obj:`~pyrogram.types.Message`. @@ -4169,6 +4175,10 @@ class Message(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: On success, the edited :obj:`~pyrogram.types.Message` is returned. @@ -4183,14 +4193,15 @@ class Message(Object, Update): caption_entities=caption_entities, invert_media=invert_media, reply_markup=reply_markup, - business_connection_id=self.business_connection_id + business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id ) async def edit_media( self, media: "types.InputMedia", invert_media: bool = None, - reply_markup: "types.InlineKeyboardMarkup" = None + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None ) -> "Message": """Bound method *edit_media* of :obj:`~pyrogram.types.Message`. @@ -4219,6 +4230,10 @@ class Message(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: On success, the edited :obj:`~pyrogram.types.Message` is returned. @@ -4231,10 +4246,14 @@ class Message(Object, Update): media=media, invert_media=invert_media, reply_markup=reply_markup, - business_connection_id=self.business_connection_id + business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id ) - async def edit_reply_markup(self, reply_markup: "types.InlineKeyboardMarkup" = None) -> "Message": + async def edit_reply_markup( + self, + reply_markup: "types.InlineKeyboardMarkup" = None, + business_connection_id: str = None + ) -> "Message": """Bound method *edit_reply_markup* of :obj:`~pyrogram.types.Message`. Use as a shortcut for: @@ -4256,6 +4275,10 @@ class Message(Object, Update): reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`): An InlineKeyboardMarkup object. + business_connection_id (``str``, *optional*): + Unique identifier of the business connection. + for business bots only. + Returns: On success, if edited message is sent by the bot, the edited :obj:`~pyrogram.types.Message` is returned, otherwise True is returned. @@ -4267,7 +4290,7 @@ class Message(Object, Update): chat_id=self.chat.id, message_id=self.id, reply_markup=reply_markup, - business_connection_id=self.business_connection_id + business_connection_id=self.business_connection_id if business_connection_id is None else 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 44193690..c423e8b3 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. + Example: .. code-block:: python @@ -251,5 +255,5 @@ class Poll(Object, Update): chat_id=self.chat.id, message_id=self.id, reply_markup=reply_markup, - business_connection_id=self.business_connection_id + business_connection_id=self.business_connection_id if business_connection_id is None else business_connection_id ) From 5316a16a8352e9becd3f88f4a0899e1efd1cf5a8 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Mon, 15 Jul 2024 17:34:06 +0700 Subject: [PATCH 16/16] pyrofork: Bump version to 2.3.36 Signed-off-by: wulan17 --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index fa0a650d..dca63d41 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -18,7 +18,7 @@ # along with Pyrofork. If not, see . __fork_name__ = "PyroFork" -__version__ = "2.3.35" +__version__ = "2.3.36" __license__ = "GNU Lesser General Public License v3.0 (LGPL-3.0)" __copyright__ = "Copyright (C) 2022-present Mayuri-Chan "