Merge pull request #1947 from alex75311/edit_antiflood_method

redesigned the antiflood method for guaranteed message delivery
This commit is contained in:
Badiboy 2023-05-08 09:10:28 +03:00 committed by GitHub
commit 48377ac905
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 8 deletions

View File

@ -590,7 +590,7 @@ def webhook_google_functions(bot, request):
return 'Bot ON' return 'Bot ON'
def antiflood(function: Callable, *args, **kwargs): def antiflood(function: Callable, *args, number_retries=5, **kwargs):
""" """
Use this function inside loops in order to avoid getting TooManyRequests error. Use this function inside loops in order to avoid getting TooManyRequests error.
Example: Example:
@ -604,6 +604,9 @@ def antiflood(function: Callable, *args, **kwargs):
:param function: The function to call :param function: The function to call
:type function: :obj:`Callable` :type function: :obj:`Callable`
:param number_retries: Number of retries to send
:type function: :obj:int
:param args: The arguments to pass to the function :param args: The arguments to pass to the function
:type args: :obj:`tuple` :type args: :obj:`tuple`
@ -615,14 +618,16 @@ def antiflood(function: Callable, *args, **kwargs):
from telebot.apihelper import ApiTelegramException from telebot.apihelper import ApiTelegramException
from time import sleep from time import sleep
try: for _ in range(number_retries - 1):
return function(*args, **kwargs) try:
except ApiTelegramException as ex:
if ex.error_code == 429:
sleep(ex.result_json['parameters']['retry_after'])
return function(*args, **kwargs) return function(*args, **kwargs)
else: except ApiTelegramException as ex:
raise if ex.error_code == 429:
sleep(ex.result_json['parameters']['retry_after'])
else:
raise
else:
return function(*args, **kwargs)
def parse_web_app_data(token: str, raw_init_data: str): def parse_web_app_data(token: str, raw_init_data: str):