Почему бот отправляет только первые четыре сообщения, а дальше повторяет последнее?

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

Пытаюсь создать телеграм бот, который принимает несколько фотографий и задает несколько вопросов юзеру. Столкнулся с такой проблемой: бот делает первые четыре запроса, а потом возвращает на предпоследний запрос.

@dp.message_handler(commands=["start"])
async def cmd_start(message: types.Message):
    await message.answer("Пришлите фото")
photo_delivered: set[int] = set()

async def say_thanks(user: types.User):
    if user.id in photo_delivered:
        return

    photo_delivered.add(user.id)

    await bot.send_message(user.id, "Запрос 1")


async def photo_handler(message: types.Message):
    await say_thanks(message.from_user)
    photo = message.photo.pop()
    await photo.download(f'newImages/{str(random.randint(1, 99))}.jpg')

dp.register_message_handler(photo_handler, content_types=['photo'])

@dp.message_handler(content_types="text")
async def get_req1(message: types.Message):
    req1 = message.text
    await message.answer("Запрос 2")


@dp.message_handler(content_types= 'text')
async def get_req2(message: types.Message):
    req2 = message.text
    await message.answer("Запрос 3")

@dp.message_handler()
async def get_req3(message: types.Message):
    req3 = message.text
    await message.answer("Запрос 4")

@dp.message_handler()
async def get_req4(message: types.Message):
    req4 = message.text
    await message.answer("Запрос 5")

@dp.message_handler()
async def get_req5(message: types.Message):
    req5 = message.text

пример получившегося см. изображение

вот пример получившегося

Ответы

▲ 0

Потому что обработчики не выполняются последовательно. Выполняется только 1 обработчик - тот, который получил True на все условия.

В данном случае, подряд несколько обработчиков с условием "Текстовое сообщение", поэтому проваливается в первый и дальше никуда не идёт.

Учите матчасть прежде чем пытаться что-то сделать.