Compliance with bot API 8.02
Also, closed sessions are now removed from Bot.sessions
This commit is contained in:
		| @@ -11,7 +11,7 @@ __author__ = "Davide Testa" | |||||||
| __email__ = "davide@davte.it" | __email__ = "davide@davte.it" | ||||||
| __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] | __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] | ||||||
| __license__ = "GNU General Public License v3.0" | __license__ = "GNU General Public License v3.0" | ||||||
| __version__ = "2.10.8" | __version__ = "2.10.9" | ||||||
| __maintainer__ = "Davide Testa" | __maintainer__ = "Davide Testa" | ||||||
| __contact__ = "t.me/davte" | __contact__ = "t.me/davte" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -457,6 +457,40 @@ class InputPaidMediaVideo(InputPaidMedia): | |||||||
|         self['supports_streaming'] = supports_streaming |         self['supports_streaming'] = supports_streaming | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MessageEntity(DictToDump): | ||||||
|  |     def __init__(self, | ||||||
|  |                  type_: str, | ||||||
|  |                  offset: int, | ||||||
|  |                  length: int, | ||||||
|  |                  url: str, | ||||||
|  |                  user: 'User', | ||||||
|  |                  language: str, | ||||||
|  |                  custom_emoji_id: str): | ||||||
|  |         super().__init__() | ||||||
|  |         self['type'] = type_ | ||||||
|  |         self['offset'] = offset | ||||||
|  |         self['length'] = length | ||||||
|  |         self['url'] = url | ||||||
|  |         self['user'] = user | ||||||
|  |         self['language'] = language | ||||||
|  |         self['custom_emoji_id'] = custom_emoji_id | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class PreparedInlineMessage(DictToDump): | ||||||
|  |     """Describes an inline message to be sent by a user of a Mini App. | ||||||
|  |      | ||||||
|  |     Attributes: | ||||||
|  |         id (str): Unique identifier of the prepared message | ||||||
|  |         expiration_date (int): Expiration date of the prepared message, | ||||||
|  |         in Unix time. Expired prepared messages can no longer be used. | ||||||
|  |     """ | ||||||
|  |     def __init__(self, | ||||||
|  |                  id: str, | ||||||
|  |                  expiration_date: int): | ||||||
|  |         super().__init__() | ||||||
|  |         self['id'] = id | ||||||
|  |         self['expiration_date'] = expiration_date | ||||||
|  |  | ||||||
| def handle_deprecated_disable_web_page_preview(parameters: dict, | def handle_deprecated_disable_web_page_preview(parameters: dict, | ||||||
|                                                kwargs: dict): |                                                kwargs: dict): | ||||||
|     if 'disable_web_page_preview' in kwargs: |     if 'disable_web_page_preview' in kwargs: | ||||||
| @@ -917,6 +951,7 @@ class TelegramBot: | |||||||
|                           message_effect_id: str = None, |                           message_effect_id: str = None, | ||||||
|                           reply_parameters: ReplyParameters = None, |                           reply_parameters: ReplyParameters = None, | ||||||
|                           reply_markup=None, |                           reply_markup=None, | ||||||
|  |                           allow_paid_broadcast: bool = None, | ||||||
|                           **kwargs): |                           **kwargs): | ||||||
|         """Send a text message. On success, return it. |         """Send a text message. On success, return it. | ||||||
|  |  | ||||||
| @@ -963,6 +998,7 @@ class TelegramBot: | |||||||
|                         message_effect_id: str = None, |                         message_effect_id: str = None, | ||||||
|                         reply_parameters: ReplyParameters = None, |                         reply_parameters: ReplyParameters = None, | ||||||
|                         reply_markup=None, |                         reply_markup=None, | ||||||
|  |                         allow_paid_broadcast: bool = None, | ||||||
|                         **kwargs): |                         **kwargs): | ||||||
|         """Send a photo from file_id, HTTP url or file. |         """Send a photo from file_id, HTTP url or file. | ||||||
|  |  | ||||||
| @@ -992,6 +1028,7 @@ class TelegramBot: | |||||||
|                         message_effect_id: str = None, |                         message_effect_id: str = None, | ||||||
|                         reply_parameters: ReplyParameters = None, |                         reply_parameters: ReplyParameters = None, | ||||||
|                         reply_markup=None, |                         reply_markup=None, | ||||||
|  |                         allow_paid_broadcast: bool = None, | ||||||
|                         **kwargs): |                         **kwargs): | ||||||
|         """Send an audio file from file_id, HTTP url or file. |         """Send an audio file from file_id, HTTP url or file. | ||||||
|  |  | ||||||
| @@ -1024,6 +1061,7 @@ class TelegramBot: | |||||||
|                            message_effect_id: str = None, |                            message_effect_id: str = None, | ||||||
|                            reply_parameters: ReplyParameters = None, |                            reply_parameters: ReplyParameters = None, | ||||||
|                            reply_markup=None, |                            reply_markup=None, | ||||||
|  |                            allow_paid_broadcast: bool = None, | ||||||
|                            **kwargs): |                            **kwargs): | ||||||
|         """Send a document from file_id, HTTP url or file. |         """Send a document from file_id, HTTP url or file. | ||||||
|  |  | ||||||
| @@ -1061,6 +1099,7 @@ class TelegramBot: | |||||||
|                         has_spoiler: bool = None, |                         has_spoiler: bool = None, | ||||||
|                         reply_parameters: ReplyParameters = None, |                         reply_parameters: ReplyParameters = None, | ||||||
|                         reply_markup=None, |                         reply_markup=None, | ||||||
|  |                         allow_paid_broadcast: bool = None, | ||||||
|                         **kwargs): |                         **kwargs): | ||||||
|         """Send a video from file_id, HTTP url or file. |         """Send a video from file_id, HTTP url or file. | ||||||
|  |  | ||||||
| @@ -1097,6 +1136,7 @@ class TelegramBot: | |||||||
|                             has_spoiler: bool = None, |                             has_spoiler: bool = None, | ||||||
|                             reply_parameters: ReplyParameters = None, |                             reply_parameters: ReplyParameters = None, | ||||||
|                             reply_markup=None, |                             reply_markup=None, | ||||||
|  |                             allow_paid_broadcast: bool = None, | ||||||
|                             **kwargs): |                             **kwargs): | ||||||
|         """Send animation files (GIF or H.264/MPEG-4 AVC video without sound). |         """Send animation files (GIF or H.264/MPEG-4 AVC video without sound). | ||||||
|  |  | ||||||
| @@ -1128,6 +1168,7 @@ class TelegramBot: | |||||||
|                         message_effect_id: str = None, |                         message_effect_id: str = None, | ||||||
|                         reply_parameters: ReplyParameters = None, |                         reply_parameters: ReplyParameters = None, | ||||||
|                         reply_markup=None, |                         reply_markup=None, | ||||||
|  |                         allow_paid_broadcast: bool = None, | ||||||
|                         **kwargs): |                         **kwargs): | ||||||
|         """Send an audio file to be displayed as playable voice message. |         """Send an audio file to be displayed as playable voice message. | ||||||
|  |  | ||||||
| @@ -1154,6 +1195,7 @@ class TelegramBot: | |||||||
|                             message_effect_id: str = None, |                             message_effect_id: str = None, | ||||||
|                             reply_parameters: ReplyParameters = None, |                             reply_parameters: ReplyParameters = None, | ||||||
|                             reply_markup=None, |                             reply_markup=None, | ||||||
|  |                             allow_paid_broadcast: bool = None, | ||||||
|                             **kwargs): |                             **kwargs): | ||||||
|         """Send a rounded square mp4 video message of up to 1 minute long. |         """Send a rounded square mp4 video message of up to 1 minute long. | ||||||
|  |  | ||||||
| @@ -1180,6 +1222,7 @@ class TelegramBot: | |||||||
|                              protect_content: bool = None, |                              protect_content: bool = None, | ||||||
|                              message_effect_id: str = None, |                              message_effect_id: str = None, | ||||||
|                              reply_parameters: ReplyParameters = None, |                              reply_parameters: ReplyParameters = None, | ||||||
|  |                              allow_paid_broadcast: bool = None, | ||||||
|                              **kwargs): |                              **kwargs): | ||||||
|         """Send a group of photos or videos as an album. |         """Send a group of photos or videos as an album. | ||||||
|  |  | ||||||
| @@ -1209,6 +1252,7 @@ class TelegramBot: | |||||||
|                            message_effect_id: str = None, |                            message_effect_id: str = None, | ||||||
|                            reply_parameters: ReplyParameters = None, |                            reply_parameters: ReplyParameters = None, | ||||||
|                            reply_markup=None, |                            reply_markup=None, | ||||||
|  |                            allow_paid_broadcast: bool = None, | ||||||
|                            **kwargs): |                            **kwargs): | ||||||
|         """Send a point on the map. May be kept updated for a `live_period`. |         """Send a point on the map. May be kept updated for a `live_period`. | ||||||
|  |  | ||||||
| @@ -1296,6 +1340,7 @@ class TelegramBot: | |||||||
|                         message_effect_id: str = None, |                         message_effect_id: str = None, | ||||||
|                         reply_parameters: ReplyParameters = None, |                         reply_parameters: ReplyParameters = None, | ||||||
|                         reply_markup=None, |                         reply_markup=None, | ||||||
|  |                         allow_paid_broadcast: bool = None, | ||||||
|                         **kwargs): |                         **kwargs): | ||||||
|         """Send information about a venue. |         """Send information about a venue. | ||||||
|  |  | ||||||
| @@ -1323,6 +1368,7 @@ class TelegramBot: | |||||||
|                           message_effect_id: str = None, |                           message_effect_id: str = None, | ||||||
|                           reply_parameters: ReplyParameters = None, |                           reply_parameters: ReplyParameters = None, | ||||||
|                           reply_markup=None, |                           reply_markup=None, | ||||||
|  |                           allow_paid_broadcast: bool = None, | ||||||
|                           **kwargs): |                           **kwargs): | ||||||
|         """Send a phone contact. |         """Send a phone contact. | ||||||
|  |  | ||||||
| @@ -1360,6 +1406,7 @@ class TelegramBot: | |||||||
|                        message_effect_id: str = None, |                        message_effect_id: str = None, | ||||||
|                        reply_parameters: ReplyParameters = None, |                        reply_parameters: ReplyParameters = None, | ||||||
|                        reply_markup=None, |                        reply_markup=None, | ||||||
|  |                        allow_paid_broadcast: bool = None, | ||||||
|                        **kwargs): |                        **kwargs): | ||||||
|         """Send a native poll in a group, a supergroup or channel. |         """Send a native poll in a group, a supergroup or channel. | ||||||
|  |  | ||||||
| @@ -1881,6 +1928,7 @@ class TelegramBot: | |||||||
|                           message_effect_id: str = None, |                           message_effect_id: str = None, | ||||||
|                           reply_parameters: ReplyParameters = None, |                           reply_parameters: ReplyParameters = None, | ||||||
|                           reply_markup=None, |                           reply_markup=None, | ||||||
|  |                           allow_paid_broadcast: bool = None, | ||||||
|                           **kwargs): |                           **kwargs): | ||||||
|         """Send `.webp` stickers. |         """Send `.webp` stickers. | ||||||
|  |  | ||||||
| @@ -2100,6 +2148,7 @@ class TelegramBot: | |||||||
|                           message_effect_id: str = None, |                           message_effect_id: str = None, | ||||||
|                           reply_parameters: ReplyParameters = None, |                           reply_parameters: ReplyParameters = None, | ||||||
|                           reply_markup=None, |                           reply_markup=None, | ||||||
|  |                           allow_paid_broadcast: bool = None, | ||||||
|                           **kwargs): |                           **kwargs): | ||||||
|         """Send an invoice. |         """Send an invoice. | ||||||
|  |  | ||||||
| @@ -2180,6 +2229,7 @@ class TelegramBot: | |||||||
|                        message_effect_id: str = None, |                        message_effect_id: str = None, | ||||||
|                        reply_parameters: ReplyParameters = None, |                        reply_parameters: ReplyParameters = None, | ||||||
|                        reply_markup=None, |                        reply_markup=None, | ||||||
|  |                        allow_paid_broadcast: bool = None, | ||||||
|                        **kwargs): |                        **kwargs): | ||||||
|         """Send a game. |         """Send a game. | ||||||
|  |  | ||||||
| @@ -2247,6 +2297,7 @@ class TelegramBot: | |||||||
|                        message_effect_id: str = None, |                        message_effect_id: str = None, | ||||||
|                        reply_parameters: ReplyParameters = None, |                        reply_parameters: ReplyParameters = None, | ||||||
|                        reply_markup=None, |                        reply_markup=None, | ||||||
|  |                        allow_paid_broadcast: bool = None, | ||||||
|                        **kwargs): |                        **kwargs): | ||||||
|         """Send a dice. |         """Send a dice. | ||||||
|  |  | ||||||
| @@ -2396,6 +2447,7 @@ class TelegramBot: | |||||||
|                           disable_notification: bool = None, |                           disable_notification: bool = None, | ||||||
|                           reply_parameters: ReplyParameters = None, |                           reply_parameters: ReplyParameters = None, | ||||||
|                           reply_markup=None, |                           reply_markup=None, | ||||||
|  |                           allow_paid_broadcast: bool = None, | ||||||
|                           **kwargs): |                           **kwargs): | ||||||
|         """Use this method to copy messages of any kind. |         """Use this method to copy messages of any kind. | ||||||
|  |  | ||||||
| @@ -2758,11 +2810,27 @@ class TelegramBot: | |||||||
|                                 need_shipping_address: bool, |                                 need_shipping_address: bool, | ||||||
|                                 send_phone_number_to_provider: bool, |                                 send_phone_number_to_provider: bool, | ||||||
|                                 send_email_to_provider: bool, |                                 send_email_to_provider: bool, | ||||||
|                                 is_flexible: bool): |                                 is_flexible: bool, | ||||||
|  |                                 business_connection_id: str = None, | ||||||
|  |                                 subscription_period: int = None | ||||||
|  |                                 ): | ||||||
|         """Use this method to create a link for an invoice. |         """Use this method to create a link for an invoice. | ||||||
|  |  | ||||||
|         Returns the created invoice link as String on success. |         Returns the created invoice link as String on success. See | ||||||
|         See https://core.telegram.org/bots/api#createinvoicelink for details. |         https://core.telegram.org/bots/api#createinvoicelink for details. | ||||||
|  |  | ||||||
|  |         Attributes: | ||||||
|  |             business_connection_id (Optional[str]): Unique identifier of the | ||||||
|  |                 business connection on behalf of which the link will be created. | ||||||
|  |                 For payments in Telegram Stars only. | ||||||
|  |             subscription_period (Optional[int]): The number of seconds the | ||||||
|  |                 subscription will be active for before the next payment. The | ||||||
|  |                 currency must be set to “XTR” (Telegram Stars) if the parameter | ||||||
|  |                 is used. Currently, it must always be 2592000 (30 days) if | ||||||
|  |                 specified. Any number of subscriptions can be active for a given | ||||||
|  |                 bot at the same time, including multiple concurrent | ||||||
|  |                 subscriptions from the same user. | ||||||
|  |                 Subscription price must no exceed 2500 Telegram Stars. | ||||||
|         """ |         """ | ||||||
|         return await self.api_request( |         return await self.api_request( | ||||||
|             'createInvoiceLink', |             'createInvoiceLink', | ||||||
| @@ -3117,6 +3185,7 @@ class TelegramBot: | |||||||
|                             disable_notification: bool = None, |                             disable_notification: bool = None, | ||||||
|                             protect_content: bool = None, |                             protect_content: bool = None, | ||||||
|                             reply_parameters: ReplyParameters = None, |                             reply_parameters: ReplyParameters = None, | ||||||
|  |                             allow_paid_broadcast: bool = None, | ||||||
|                             reply_markup = None): |                             reply_markup = None): | ||||||
|         """Send paid media to channel chats. |         """Send paid media to channel chats. | ||||||
|  |  | ||||||
| @@ -3189,3 +3258,146 @@ class TelegramBot: | |||||||
|             'editChatSubscriptionInviteLink', |             'editChatSubscriptionInviteLink', | ||||||
|             parameters=locals() |             parameters=locals() | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  |     async def setUserEmojiStatus(self, user_id: int, | ||||||
|  |                                  emoji_status_custom_emoji_id: str = None, | ||||||
|  |                                  emoji_status_expiration_date: int = None): | ||||||
|  |         """Changes the emoji status for a given user that previously allowed the | ||||||
|  |             bot to manage their emoji status via the Mini App method | ||||||
|  |             requestEmojiStatusAccess. | ||||||
|  |          | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#setuseremojistatus for details. | ||||||
|  |         """ | ||||||
|  |         if emoji_status_custom_emoji_id is None: | ||||||
|  |             emoji_status_custom_emoji_id = '' | ||||||
|  |         return await self.api_request( | ||||||
|  |             'setUserEmojiStatus', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |      | ||||||
|  |     async def getAvailableGifts(self): | ||||||
|  |         """Returns the list of gifts that can be sent by the bot to users. | ||||||
|  |          | ||||||
|  |         Requires no parameters. | ||||||
|  |         Returns a Gifts object. | ||||||
|  |         See https://core.telegram.org/bots/api#getavailablegifts for details. | ||||||
|  |         """ | ||||||
|  |         return await self.api_request( | ||||||
|  |             'getAvailableGifts', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def sendGift(self, user_id: int, gift_id: str, pay_for_upgrade: bool, | ||||||
|  |                        text: str, text_parse_mode: str, | ||||||
|  |                        text_entities: List['MessageEntity']): | ||||||
|  |         """Sends a gift to the given user. | ||||||
|  |          | ||||||
|  |         The gift can't be converted to Telegram Stars by the user. | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#sendgift for details. | ||||||
|  |         """ | ||||||
|  |         return await self.api_request( | ||||||
|  |             'sendGift', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def verifyUser(self, user_id: int, | ||||||
|  |                          custom_description: str = None): | ||||||
|  |         """Verifies a user on behalf of the organization which is represented by | ||||||
|  |             the bot. | ||||||
|  |          | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#verifyuser for details. | ||||||
|  |         """ | ||||||
|  |         if len(custom_description) > 70: | ||||||
|  |             raise TypeError("Parameter `custom_description` is too long " | ||||||
|  |                             "(0-70 characters).") | ||||||
|  |         return await self.api_request( | ||||||
|  |             'verifyUser', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def verifyChat(self, chat_id: Union[int, str], | ||||||
|  |                          custom_description: str = None): | ||||||
|  |         """Verifies a chat on behalf of the organization which is represented by | ||||||
|  |             the bot. | ||||||
|  |          | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#verifychat for details. | ||||||
|  |         """ | ||||||
|  |         if isinstance(chat_id, str) and chat_id.isnumeric(): | ||||||
|  |             chat_id = int(chat_id) | ||||||
|  |         if not (isinstance(chat_id, int) or | ||||||
|  |             (isinstance(chat_id, str) and chat_id.startswith('@'))): | ||||||
|  |             raise TypeError(f"Invalid chat_id: `{chat_id}`") | ||||||
|  |         if len(custom_description) > 70: | ||||||
|  |             raise TypeError("Parameter `custom_description` is too long " | ||||||
|  |                             "(0-70 characters).") | ||||||
|  |         return await self.api_request( | ||||||
|  |             'verifyChat', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def removeUserVerification(self, user_id: int): | ||||||
|  |         """Removes verification from a user who is currently verified on behalf | ||||||
|  |         of the organization represented by the bot. | ||||||
|  |          | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#removeuserverification for | ||||||
|  |             details. | ||||||
|  |         """ | ||||||
|  |         return await self.api_request( | ||||||
|  |             'removeUserVerification', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def removeChatVerification(self, chat_id: Union[int, str]): | ||||||
|  |         """Removes verification from a chat that is currently verified on behalf | ||||||
|  |         of the organization represented by the bot. | ||||||
|  |          | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#removechatverification for | ||||||
|  |             details. | ||||||
|  |         """ | ||||||
|  |         if not (isinstance(chat_id, int) or | ||||||
|  |             (isinstance(chat_id, str) and chat_id.startswith('@'))): | ||||||
|  |             raise TypeError(f"Invalid chat_id: `{chat_id}`") | ||||||
|  |         return await self.api_request( | ||||||
|  |             'removeChatVerification', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def savePreparedInlineMessage(self, | ||||||
|  |                                         user_id: int, | ||||||
|  |                                         result: 'InlineQueryResult', | ||||||
|  |                                         allow_user_chats: bool = None, | ||||||
|  |                                         allow_bot_chats: bool = None, | ||||||
|  |                                         allow_group_chats: bool = None, | ||||||
|  |                                         allow_channel_chats: bool = None | ||||||
|  |                                         ) -> 'PreparedInlineMessage': | ||||||
|  |         """Stores a message that can be sent by a user of a Mini App. | ||||||
|  |          | ||||||
|  |         Returns a PreparedInlineMessage object. | ||||||
|  |         See https://core.telegram.org/bots/api#savepreparedinlinemessage for | ||||||
|  |             details. | ||||||
|  |         """ | ||||||
|  |         return await self.api_request( | ||||||
|  |             'savePreparedInlineMessage', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     async def editUserStarSubscription(self, user_id: int, | ||||||
|  |                                        telegram_payment_charge_id: str, | ||||||
|  |                                        is_canceled: bool): | ||||||
|  |         """Allows the bot to cancel or re-enable extension of a subscription | ||||||
|  |             paid in Telegram Stars. | ||||||
|  |          | ||||||
|  |         Returns True on success. | ||||||
|  |         See https://core.telegram.org/bots/api#edituserstarsubscription for | ||||||
|  |             details. | ||||||
|  |         """ | ||||||
|  |         return await self.api_request( | ||||||
|  |             'editUserStarSubscription', | ||||||
|  |             parameters=locals() | ||||||
|  |         ) | ||||||
|   | |||||||
| @@ -3243,9 +3243,11 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject): | |||||||
|  |  | ||||||
|     async def close_sessions(self): |     async def close_sessions(self): | ||||||
|         """Close open sessions.""" |         """Close open sessions.""" | ||||||
|         for session_name, session in self.sessions.items(): |         for session_name in list(self.sessions.keys()): | ||||||
|  |             session = self.sessions[session_name] | ||||||
|             if not session.closed: |             if not session.closed: | ||||||
|                 await session.close() |                 await session.close() | ||||||
|  |                 del self.sessions[session_name] | ||||||
|  |  | ||||||
|     async def send_one_message(self, *args, **kwargs): |     async def send_one_message(self, *args, **kwargs): | ||||||
|         sent_message = await self.send_message(*args, **kwargs) |         sent_message = await self.send_message(*args, **kwargs) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user