Aiogram не правильно обрабатывает сообщение от пользователя

Начал изучать Aiogram, хочу сделать очень простого бота, который генерил бы 2 числа a,b от -100 до 100 и присылал бы a*b, от пользователя ожидал бы правильный ответ.

a = random.randrange(-100, 100)
b = random.randrange(-100, 100)
@dp.message_handler(commands=['math_task'])
async def math_task(message:types.Message):
    await bot.send_message(message.from_user.id,
                            text='Начинаем')

    await message.answer(text=('Перемножить',a,b))

@dp.message_handler()
async def math_task(message:types.Message):
    c = a * b
    if message.text==c:
        await message.answer("YES")
    else:
        await message.answer('NO')

бот реагирует на любой ответ пользователя NO. пробовал message.text==c заменить message.text in c. В чем может быть ошибка?


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

Автор решения: Mango

надеюсь ответ устроит ( в данном случае это бесконечный цикл)

a = random.randrange(-100, 100)
b = random.randrange(-100, 100)
@dp.message_handler(commands=['math_task'])
async def math_task(message:types.Message):
    await bot.send_message(message.from_user.id,text='Начинаем')

    await message.answer(text=f'Перемножить {a}, {b}')

@dp.message_handler()
async def math_task(message:types.Message):
    global a,b
    c = a * b
    if str(message.text)==str(c):
        await message.answer("Правильно")
        a = random.randrange(-100, 100)
        b = random.randrange(-100, 100)
        await message.answer(text=f'Перемножить {a}, {b}')
        math_task
    else:
        await message.answer('Неправильно, пробуй еще.')

executor.start_polling(dp)

но можно запихнуть в цикл for или while (например)

for a in range(5): #или while something:
    @dp.message_handler()
    async def math_task(message: types.Message):
        global a, b
        c = a * b
        if str(message.text) == str(c):
            await message.answer("Правильно")
            a = random.randrange(-100, 100)
            b = random.randrange(-100, 100)
            await message.answer(text=f'Перемножить {a}, {b}')
        else:
            await message.answer('Неправильно, пробуй еще.')
→ Ссылка