diff --git a/aiogram/bot/api.py b/aiogram/bot/api.py index 342ec62c..48904446 100644 --- a/aiogram/bot/api.py +++ b/aiogram/bot/api.py @@ -79,6 +79,8 @@ async def _check_result(method_name, response): raise exceptions.NetworkError('File too large for uploading. ' 'Check telegram api limits https://core.telegram.org/bots/api#senddocument') elif response.status >= HTTPStatus.INTERNAL_SERVER_ERROR: + if 'restart' in description: + raise exceptions.RestartingTelegram() raise exceptions.TelegramAPIError(description) raise exceptions.TelegramAPIError(f"{description} [{response.status}]") diff --git a/aiogram/utils/exceptions.py b/aiogram/utils/exceptions.py index 7aed8e54..d305b9b5 100644 --- a/aiogram/utils/exceptions.py +++ b/aiogram/utils/exceptions.py @@ -19,6 +19,7 @@ TelegramAPIError BadWebhook WebhookRequireHTTPS BadWebhookPort + BadWebhookAddrInfo CantParseUrl NotFound MethodNotKnown @@ -39,6 +40,7 @@ TelegramAPIError NetworkError RetryAfter MigrateToChat + RestartingTelegram AIOGramWarning TimeoutWarning @@ -232,6 +234,11 @@ class BadWebhookPort(BadWebhook): text = 'bad webhook: ' + match +class BadWebhookAddrInfo(BadWebhook): + match = 'getaddrinfo: Temporary failure in name resolution' + text = 'bad webhook: ' + match + + class CantParseUrl(BadRequest): match = 'can\'t parse URL' @@ -282,6 +289,11 @@ class NetworkError(TelegramAPIError): pass +class RestartingTelegram(TelegramAPIError): + def __init__(self): + super(RestartingTelegram, self).__init__('The Telegram Bot API service is restarting. Wait few second.') + + class RetryAfter(TelegramAPIError): def __init__(self, retry_after): super(RetryAfter, self).__init__(f"Flood control exceeded. Retry in {retry_after} seconds.")