Ошибка - start_handler() missing 1 required positional argument: 'data'

Есть у меня задача: организовать доступ к разным разделам бота по ролям пользователей. Есть таблица в БД, где колонка user_role. Есть кастомный фильтр.

class GroupRoleFilter(Filter):
"""
Фильтр для проверки роли группы.
"""
def __init__(self, role: Union[GroupRoleEnum, list[GroupRoleEnum]]):
    if not isinstance(role, list):
        role = [role]
    self.roles = [r.value for r in role]

async def __call__(
    self,
    event: TelegramObject,
    data: Dict[str, Any]
) -> bool:
    """
    Проверяет, соответствует ли роль группы одной из разрешенных ролей.
    Если пользователь - суперпользователь, разрешаем доступ.
    """
    user_role: str = data.get("user_role")
    group_role: str = data.get("group_role")
    if user_role == UserRoleEnum.SUPERADMIN.value:
        return True  # Суперпользователь имеет доступ ко всему
    return group_role in self.roles

Далее фильтры по ролям: Superadmin, Admin, User и т.д.:

# Фильтры для конкретных ролей пользователей
class SuperAdminFilter(RoleFilter):
    def __init__(self):
        super().__init__(role=UserRole.SUPERADMIN)

class AdminFilter(RoleFilter):
    def __init__(self):
        super().__init__(role=UserRole.ADMIN)

class UserFilter(RoleFilter):

Есть Middleware:

class DatabaseAndRoleMiddleware(BaseMiddleware):
    def __init__(self, session_pool: async_sessionmaker):
        self.session_pool = session_pool

    async def __call__(
        self,
        handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
        event: Union[Message, CallbackQuery],
        data: Dict[str, Any]
    ) -> Any:
        async with self.session_pool() as session:
            data["db"] = session
            user_id = event.from_user.id
            user, group = await get_user_with_group(session, user_id)
            data["user"] = user
            data["group"] = group
            data["user_role"] = user.role if user else UserRoleEnum.GUEST
            data["group_role"] = group.role if group else GroupRoleEnum.GUEST_GP
            return await handler(event, data)

И под каждую роль роутеры.

В результате после запуска бота, при команде /start получаю ошибку:

"""start_handler() missing 1 required positional argument: 'data'"""

В предыдущих версиях моего кода получал такую ошибку: TypeError: RoleFilter.__call__() missing 1 required positional argument: 'data'

Три дня потеряны, разобраться не могу, не смотря на изучение Traceback.

Гуру, что подскажете, какую еще предоставить инфу для понимания моей проблемы?


Ответы (0 шт):