У меня есть бот, который должен показывать разное меню для людей с разным статусом пользователя.
Эти статусы можно разделить на две группы. Для каждой группы я выделил 2 модуля, чтобы не писать кучу кода в одном.
Для реализации задумки, написал фильтр:
from aiogram.filters import BaseFilter
from aiogram.types import Message
from db.users import read_status_member
class IsStatus(BaseFilter):
def __init__(self, status_member_list: list[str]) -> None:
self.status_member_list = status_member_list
async def __call__(self, message: Message) -> bool:
status = read_status_member(message.from_user.id)
return status in self.status_member_list
Вот фрагмент кода из модуля для новых пользователей:
@router.callback_query(Text(text='okay_but_pressed'))
async def show_menu(callback: CallbackQuery):
name_user = await read_name(callback.from_user.id)
await callback.message.answer_photo(photo=file_id[0],
caption=f"Привет, {name_user[0]}"
f"\n\n{USER_LEXICON['greetings']}",
reply_markup=menu_kb)
Далее код(скину весь, так как в этом модуле только начал работать, ещё мало чего успел написать) из модуля, предназначенного для пользователей, у которых более высокий статус:
from aiogram import Router
from aiogram.types import CallbackQuery
from aiogram.filters import Text
from filters.member_filters import IsStatus
from db.users import read_name
from lexicon.user_lexicon import USER_LEXICON
from keyboards.reply_user import menu_kb_1
router: Router = Router()
status_member_list: list[str] = ['Лайт', 'Стандарт', 'Макс']
@router.callback_query(Text(text='okay_but_pressed'), IsStatus(status_member_list))
async def show_menu_2(callback: CallbackQuery):
name_user = await read_name(callback.from_user.id)
await callback.message.answer(text=f"Привет, {name_user[0]}"
f"\n\n{USER_LEXICON['greetings']}",
reply_markup=menu_kb_1)
Моя проблема в том, что в обоих случаях срабатывает хэндлер из модуля для обычных пользователей. По какой причине может не срабатывать второй хэндлер?