Как правильно инвертировать собственный фильтр в aiogram
Я написал свой фильтр на проверку админа из базы данных:
class IsAdmin:
def __call__(self, message: Message) -> bool:
"""
:return: bool
"""
return db.reference(f'users/{message.from_user.id}/role/admin').get() is True
def __invert__(self, message: Message) -> bool:
"""
:return: bool
"""
return db.reference(f'users/{message.from_user.id}/role/admin').get() is False
Но когда я использую:
@dp.message(~IsAdmin())
Вылетает ошибка, что нужно передать message, окей
@dp.message(lambda msg: ~IsAdmin(msg))
И ничего не работает, без ошибок
Ответы (1 шт):
Автор решения: Иван Ипатов
→ Ссылка
Получилось решить проблему вот так
class IsAdmin:
def __init__(self, msg):
self.message = msg
def __call__(self) -> bool:
"""
:return: bool
"""
return db.reference(f'users/{self.message.from_user.id}/role/admin').get() is True
def __invert__(self) -> bool:
"""
:return: bool
"""
return db.reference(f'users/{self.message.from_user.id}/role/admin').get() is False
@dp.message(lambda msg: ~IsAdmin(msg))