diff --git a/aiogram/dispatcher/event/telegram.py b/aiogram/dispatcher/event/telegram.py index f91e8b77..9aa76cdf 100644 --- a/aiogram/dispatcher/event/telegram.py +++ b/aiogram/dispatcher/event/telegram.py @@ -31,6 +31,15 @@ class TelegramEventObserver: self.filters: List[Type[BaseFilter]] = [] self.outer_middlewares: List[MiddlewareType] = [] self.middlewares: List[MiddlewareType] = [] + self._handler = HandlerObject(callback=lambda: True, filters=[]) + + def filter(self, *filters: FilterType, **bound_filters: Any) -> None: + resolved_filters = self.resolve_filters(bound_filters) + if self._handler.filters is None: + self._handler.filters = [] + self._handler.filters.extend( + [FilterObject(filter_) for filter_ in chain(resolved_filters, filters)] + ) def bind_filter(self, bound_filter: Type[BaseFilter]) -> None: """ @@ -139,6 +148,11 @@ class TelegramEventObserver: return await wrapped_outer(event, kwargs) async def _trigger(self, event: TelegramObject, **kwargs: Any) -> Any: + result, data = await self._handler.check(event, **kwargs) + if not result: + return UNHANDLED + kwargs.update(data) + for handler in self.handlers: result, data = await handler.check(event, **kwargs) if result: diff --git a/tests/test_api/test_methods/test_delete_my_commands.py b/tests/test_api/test_methods/test_delete_my_commands.py index a39d080b..b5546b25 100644 --- a/tests/test_api/test_methods/test_delete_my_commands.py +++ b/tests/test_api/test_methods/test_delete_my_commands.py @@ -1,6 +1,6 @@ import pytest -from aiogram.methods import BanChatMember, DeleteMyCommands, Request +from aiogram.methods import DeleteMyCommands, Request from tests.mocked_bot import MockedBot