From 5cba5c05c49c2ab77527fe7f872d4ea1a06796b5 Mon Sep 17 00:00:00 2001 From: Forden Date: Thu, 23 Apr 2020 22:42:30 +0300 Subject: [PATCH] Adding on_make_request and on_post_make_request methods to middlewares and CancelRequest exception --- aiogram/bot/base.py | 17 ++++++++++++++--- aiogram/utils/exceptions.py | 8 ++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/aiogram/bot/base.py b/aiogram/bot/base.py index 6750e8a8..537786aa 100644 --- a/aiogram/bot/base.py +++ b/aiogram/bot/base.py @@ -11,6 +11,7 @@ import aiohttp import certifi from aiohttp.helpers import sentinel +from utils.exceptions import CancelRequest from . import api from ..types import ParseMode, base from ..utils import json @@ -174,7 +175,7 @@ class BaseBot: async def request(self, method: base.String, data: Optional[Dict] = None, - files: Optional[Dict] = None, **kwargs) -> Union[List, Dict, base.Boolean]: + files: Optional[Dict] = None, **kwargs) -> Optional[Union[List, Dict, base.Boolean]]: """ Make an request to Telegram Bot API @@ -190,8 +191,18 @@ class BaseBot: :rtype: Union[List, Dict] :raise: :obj:`aiogram.exceptions.TelegramApiError` """ - return await api.make_request(self.session, self.__token, method, data, files, - proxy=self.proxy, proxy_auth=self.proxy_auth, timeout=self.timeout, **kwargs) + from aiogram import Dispatcher + dp = Dispatcher.get_current() + try: + await dp.middleware.trigger('make_request', [self.__token, method, data, files]) + except CancelRequest: + return None + else: + response = await api.make_request(self.session, self.__token, method, data, files, + proxy=self.proxy, proxy_auth=self.proxy_auth, timeout=self.timeout, + **kwargs) + await dp.middleware.trigger('post_make_request', [self.__token, method, data, files, response]) + return response async def download_file(self, file_path: base.String, destination: Optional[base.InputFile] = None, diff --git a/aiogram/utils/exceptions.py b/aiogram/utils/exceptions.py index cee2820a..1f972adc 100644 --- a/aiogram/utils/exceptions.py +++ b/aiogram/utils/exceptions.py @@ -153,6 +153,10 @@ class ValidationError(TelegramAPIError): pass +class CancelRequest(Exception): + pass + + class BadRequest(TelegramAPIError, _MatchErrorMixin): __group = True @@ -551,5 +555,5 @@ class Throttled(TelegramAPIError): def __str__(self): return f"Rate limit exceeded! (Limit: {self.rate} s, " \ - f"exceeded: {self.exceeded_count}, " \ - f"time delta: {round(self.delta, 3)} s)" + f"exceeded: {self.exceeded_count}, " \ + f"time delta: {round(self.delta, 3)} s)"