From 5c30dafd4cbdc361432c15ccc67f03a3f7115081 Mon Sep 17 00:00:00 2001 From: Davte Date: Fri, 6 Jan 2023 10:29:44 +0100 Subject: [PATCH] Compliance with Telegram Bot API 6.4 --- davtelepot/__init__.py | 2 +- davtelepot/api.py | 73 +++++++++++++++++++++++++++++++++++++++- davtelepot/api_helper.py | 25 +++++++++++++- 3 files changed, 97 insertions(+), 3 deletions(-) diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py index 9dfe3c3..4f4a246 100644 --- a/davtelepot/__init__.py +++ b/davtelepot/__init__.py @@ -11,7 +11,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __license__ = "GNU General Public License v3.0" -__version__ = "2.8.11" +__version__ = "2.8.12" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/davtelepot/api.py b/davtelepot/api.py index a18be5b..8c23a5f 100644 --- a/davtelepot/api.py +++ b/davtelepot/api.py @@ -684,6 +684,7 @@ class TelegramBot: disable_notification: bool = None, reply_to_message_id: int = None, allow_sending_without_reply: bool = None, + has_spoiler: bool = None, reply_markup=None): """Send a photo from file_id, HTTP url or file. @@ -752,6 +753,7 @@ class TelegramBot: allow_sending_without_reply: bool = None, message_thread_id: int = None, protect_content: bool = None, + has_spoiler: bool = None, reply_markup=None): """Send a video from file_id, HTTP url or file. @@ -775,6 +777,7 @@ class TelegramBot: allow_sending_without_reply: bool = None, message_thread_id: int = None, protect_content: bool = None, + has_spoiler: bool = None, reply_markup=None): """Send animation files (GIF or H.264/MPEG-4 AVC video without sound). @@ -1010,7 +1013,8 @@ class TelegramBot: parameters=parameters ) - async def sendChatAction(self, chat_id: Union[int, str], action): + async def sendChatAction(self, chat_id: Union[int, str], action, + message_thread_id: int = None): """Fake a typing status or similar. See https://core.telegram.org/bots/api#sendchataction for details. @@ -2285,3 +2289,70 @@ class TelegramBot: 'createInvoiceLink', parameters=locals() ) + + async def editGeneralForumTopic(self, chat_id: Union[int, str], name: str): + """Edit the name of the 'General' topic in a forum supergroup chat. + + The bot must be an administrator in the chat for this to work and must + have can_manage_topics administrator rights. + Returns True on success. + See https://core.telegram.org/bots/api#editgeneralforumtopic for details. + """ + return await self.api_request( + 'editGeneralForumTopic', + parameters=locals() + ) + + async def closeGeneralForumTopic(self, chat_id: Union[int, str]): + """Close an open 'General' topic in a forum supergroup chat. + + The bot must be an administrator in the chat for this to work and must + have the can_manage_topics administrator rights. + Returns True on success. + See https://core.telegram.org/bots/api#closegeneralforumtopic for details. + """ + return await self.api_request( + 'closeGeneralForumTopic', + parameters=locals() + ) + + async def reopenGeneralForumTopic(self, chat_id: Union[int, str]): + """Reopen a closed 'General' topic in a forum supergroup chat. + + The bot must be an administrator in the chat for this to work and must + have the can_manage_topics administrator rights. + The topic will be automatically unhidden if it was hidden. + Returns True on success. + See https://core.telegram.org/bots/api#reopengeneralforumtopic for details. + """ + return await self.api_request( + 'reopenGeneralForumTopic', + parameters=locals() + ) + + async def hideGeneralForumTopic(self, chat_id: Union[int, str]): + """Hide the 'General' topic in a forum supergroup chat. + + The bot must be an administrator in the chat for this to work and + must have the can_manage_topics administrator rights. + The topic will be automatically closed if it was open. + Returns True on success. + See https://core.telegram.org/bots/api#hidegeneralforumtopic for details. + """ + return await self.api_request( + 'hideGeneralForumTopic', + parameters=locals() + ) + + async def unhideGeneralForumTopic(self, chat_id: Union[int, str]): + """Unhide the 'General' topic in a forum supergroup chat. + + The bot must be an administrator in the chat for this to work and must + have the can_manage_topics administrator rights. + Returns True on success. + See https://core.telegram.org/bots/api#unhidegeneralforumtopic for details. + """ + return await self.api_request( + 'unhideGeneralForumTopic', + parameters=locals() + ) diff --git a/davtelepot/api_helper.py b/davtelepot/api_helper.py index be64d78..998fd14 100644 --- a/davtelepot/api_helper.py +++ b/davtelepot/api_helper.py @@ -46,6 +46,29 @@ class TelegramApiMethod(object): """Return method description.""" return self._description + @property + def description_80chars(self): + """Return method description, breaking lines at 80 characters.""" + result, current_line = '', '' + indentation = 8 + redundant_string = "Use this method to " + for n, paragraph in enumerate(self.description.replace('.', '.\n').split('\n')): + additional_indentation = 0 + if n == 0 and paragraph.startswith(redundant_string): + paragraph = paragraph[len(redundant_string)].upper() + paragraph[len(redundant_string)+1:] + for word in paragraph.split(' '): + if len(current_line) + len(word) > 80 - indentation - additional_indentation: + additional_indentation = max(additional_indentation, 4) + result += f"{current_line.strip()}\n{' ' * additional_indentation}" + current_line = "" + current_line += f"{word} " + if len(current_line): + result += f"{current_line.strip()}\n" + current_line = "" + if n == 0: + result += '\n' + return result.strip() + @property def table(self): """Return method parameters table.""" @@ -193,7 +216,7 @@ async def print_api_methods(filename=None, f"{', '.join(['self'] + method.parameters_with_types)}" f"):\n" f" \"\"\"" - f"{method.description.replace(new_line, new_line + ' ' * 4)}\n" + f"{method.description_80chars.replace(new_line, new_line + ' ' * 8)}\n" f" See https://core.telegram.org/bots/api#" f"{method.name.lower()} for details.\n" f" \"\"\"\n"