From c0fcaa6f456bfd690e26610eb4922d6d2c2e61a7 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Sat, 14 Apr 2018 02:40:16 +0300 Subject: [PATCH] More API Exceptions. --- aiogram/bot/api.py | 5 +++++ aiogram/utils/exceptions.py | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/aiogram/bot/api.py b/aiogram/bot/api.py index 4ef89d68..7c4b35b7 100644 --- a/aiogram/bot/api.py +++ b/aiogram/bot/api.py @@ -60,6 +60,7 @@ async def _check_result(method_name, response): description = result_json.get('description') or body + # TODO: refactor the detection of error types if HTTPStatus.OK <= response.status <= HTTPStatus.IM_USED: return result_json.get('result') elif 'retry_after' in result_json: @@ -93,6 +94,8 @@ async def _check_result(method_name, response): exceptions.CantParseUrl.throw() elif exceptions.PhotoAsInputFileRequired.check(description): exceptions.PhotoAsInputFileRequired.throw() + elif exceptions.ToMuchMessages.check(description): + exceptions.ToMuchMessages.throw() raise exceptions.BadRequest(description) elif response.status == HTTPStatus.NOT_FOUND: if exceptions.MethodNotKnown.check(description): @@ -111,6 +114,8 @@ async def _check_result(method_name, response): exceptions.BotBlocked.throw() elif exceptions.UserDeactivated.check(description): exceptions.UserDeactivated.throw() + elif exceptions.CantInitiateConversation.check(description): + exceptions.UserDeactivated.throw() raise exceptions.Unauthorized(description) elif response.status == HTTPStatus.REQUEST_ENTITY_TOO_LARGE: raise exceptions.NetworkError('File too large for uploading. ' diff --git a/aiogram/utils/exceptions.py b/aiogram/utils/exceptions.py index b7bacb1e..7b52091e 100644 --- a/aiogram/utils/exceptions.py +++ b/aiogram/utils/exceptions.py @@ -21,6 +21,7 @@ TelegramAPIError NotFound MethodNotKnown PhotoAsInputFileRequired + ToMuchMessages ConflictError TerminatedByOtherGetUpdates CantGetUpdates @@ -28,6 +29,7 @@ TelegramAPIError BotKicked BotBlocked UserDeactivated + CantInitiateConversation NetworkError RetryAfter MigrateToChat @@ -147,6 +149,13 @@ class PhotoAsInputFileRequired(BadRequest, _MatchErrorMixin): match = 'Photo should be uploaded as an InputFile' +class ToMuchMessages(BadRequest, _MatchErrorMixin): + """ + Will be raised when you try to send media group with more than 10 items. + """ + match = 'Too much messages to send as an album' + + class BadWebhook(BadRequest): pass @@ -203,6 +212,10 @@ class UserDeactivated(Unauthorized, _MatchErrorMixin): match = 'user is deactivated' +class CantInitiateConversation(Unauthorized, _MatchErrorMixin): + match = 'bot can\'t initiate conversation with a user' + + class NetworkError(TelegramAPIError): pass