Не работают последующие хэндлеры, а выполняется только первый. Aiogram 3
Пишу бота helpdesk, но при нажатии любых кнопок выводится результат из хэндлера Просмотр заявок. В чем проблема?
async def get_contact(message: types.Message):
contact = message.contact
global user_contact
global key_admin
user_contact = str(contact.phone_number)
if user_contact[:1] == '+':
user_contact = user_contact[1:]
if db_01.user_exist(user_contact):
await message.answer("Добро пожаловать!", reply_markup=kb.function_keyboard())
user_contact = str(contact.phone_number)
key_admin = True
else:
await message.answer(f"Данного номера нет в базе сотрудников.")
@dp.message(lambda message: key_admin == True and F.text == 'Просмотр заявок')
async def view_report(message: types.Message):
await message.answer(resultSelect)
@dp.message(lambda message: key_admin == True and F.text == 'Редактировать заявку')
async def edit_report(message: types.Message):
await message.answer("Введите ID заявки:")
request_id = message.text
await message.answer("Что изменить:", reply_markup=kb.edit_keyboard())
@dp.message(lambda message: key_admin == True and F.text == 'Подать заявку')
async def new_report(message: types.Message):
await message.answer("Здесь будет реализована функция подача заявки.")
Ответы (1 шт):
Автор решения: CausonQ
→ Ссылка
Если на хендлере несколько фильтров, нужно использовать не and
, а указывать их через запятую.
У вас получается, что выполняется фильтр key_admin == True, а дальше проверка не идет. Соответственно, ввиду того, что всегда срабатывает первый хендлер, дальнейшая проверка не проводится.
На примере первого хендлер
@dp.message(lambda message: key_admin == True, F.text == 'Просмотр заявок')
async def view_report(message: types.Message):
await message.answer(resultSelect)