Queer European MD passionate about IT
Browse Source

Compliance with Telegram Bot API 6.4

Davte 1 năm trước cách đây
mục cha
commit
5c30dafd4c
3 tập tin đã thay đổi với 97 bổ sung3 xóa
  1. 1 1
      davtelepot/__init__.py
  2. 72 1
      davtelepot/api.py
  3. 24 1
      davtelepot/api_helper.py

+ 1 - 1
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"
 

+ 72 - 1
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()
+        )

+ 24 - 1
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"