Как правильно инвертировать собственный фильтр в 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))
→ Ссылка