Aiogram. Второй хендлер не работает после регистрации первого

Рейтинг: 0Ответов: 1Опубликовано: 24.07.2023

Есть код разбитый по файлам. На каждый файл в идее должен быть один хендлер.

1й файл

@dp.message_handler()
async def create_guild_page_6(message: types.Message, state: FSMContext):
    try:
        async with state.proxy() as data:
            if data['name']:
                if IsSubscriber(await bot.get_chat_member(chat_id='@chatid', user_id=message.from_user.id)):
                    if message.text == 'Промокод':
                        buttons = [types.InlineKeyboardButton(text='Далее', callback_data='create_guild_page_7')]
                        kb = types.InlineKeyboardMarkup().add(*buttons)
                        cursor.execute(f"INSERT INTO guilds VALUES ({message.from_user.id}, '{data['name']}', {0}, "
                                       f"{0}, {0}, {10})")
                        base.commit()
                        await message.answer_photo(photo=Luna, caption='Текст', reply_markup=kb)
                        await state.finish()
                else: await message.answer('Сначала нужно подписаться)')
    except KeyError: pass

2й файл

@dp.message_handler()
async def up_guild_lvl_to_1_1(message: types.Message):
    name = cursor.execute(f"SELECT guild_name FROM guilds WHERE owner_id ={message.from_user.id}").fetchone()
    lvl = cursor.execute(f"SELECT guild_lvl FROM guilds WHERE owner_id ={message.from_user.id}").fetchone()
    if name != None and message.text == 'Помощь':
        if lvl[0] == 0:
            buttons = [types.InlineKeyboardButton(text='Далее', callback_data='up_guild_lvl_to_1_2')]
            kb = types.InlineKeyboardMarkup(resize_keyboard=True).add(*buttons)
            await message.answer_photo(photo=Luna, caption='Текст', reply_markup=kb)

Проблема в том, что сообщение "Промокод" бот обрабатывает и запускает первый хендлер, а "Помощь" - нет. Я в курсе про порядок инициализации хедлеров в init, если поменять местами, то будет наоборот "Помощь" - видит, "Промокод" - нет. Прошу помощи в решении данной проблемы.

P.S. если нужно больше информации - пишите

Ответы

▲ 0Принят

Решение простое:

@dp.message_handler(text=['Промокод', 'промокод'])
async def answer_on_media(message: Message):
    await message.answer('Я сработал, потому что ты отправил мне "Промокод"')


@dp.message_handler(text=['Помощь', 'помощь'])
async def answer_on_media(message: Message):
    await message.answer('Я сработал, потому что ты отправил мне "Помощь"')


@dp.message_handler()
async def answer_on_media(message: Message):
    await message.answer("Я сработал, потому что два верхних хэндлера не сработали")

раз вы отлавливаете по тексту, то пусть хэндлер и ловит этот текст. А в самой функции проверку if message.text == убирайте