Filter (ABC)¶
Абстрактный базовый класс для всех фильтров.
class Filter(ABC):
async def __call__(self, *args: Any, **kwargs: Any) -> bool | dict[str, Any]:
"""
Возвращает:
- True — фильтр пройден
- False — фильтр не пройден
- dict — фильтр пройден + данные для инъекции в обработчик
"""
...
def __invert__(self) -> Filter:
"""Инверсия: ~filter"""
return _InvertFilter(self)
Создание пользовательского фильтра¶
from maxgram.filters import Filter
class IsAdmin(Filter):
def __init__(self, admin_ids: set[int]):
self.admin_ids = admin_ids
async def __call__(self, message, **kwargs) -> bool:
return message.sender and message.sender.user_id in self.admin_ids
# С инъекцией данных
class ExtractUserName(Filter):
async def __call__(self, message, **kwargs) -> dict | bool:
if message.sender:
return {"user_name": message.sender.first_name}
return False
Исходный файл¶
maxgram/filters/base.py