Telethon. Как сравнить полученное сообщение?

Всем привет! Пишу telegram бота на Telethon. Перерыл весь интернет, но так и не нашел способа как сравнить полученное от пользователя сообщение. Подробнее: я пишу систему промокодов, то есть человек нажимает кнопку "Ввести промокод", соответственно это ловит событие NewMessage(pattern="Ввести промокод"), бот ждет пока человек напишет следующие сообщение, дальше идет сравнение,но бот не ждет следущего сообщения а выполняет функцию, сравнивая текст кнопки "Ввести промокод" и ничего конечно не работает. Вопрос: как сделать так, чтобы после нажатия кнопки "Ввести промокод" бот ждал сообщения с этим самым промокодом, а затем его сравнивал? Свой вариант прилагаю:

Свой вариант прилагаю:

@bot.on(events.NewMessage(incoming=True, pattern='Ввести промокод'))
async def answer2(event):
    await event.respond("Ваш код:")
    if event.text=="BIJO":
        await event.respond("Правильно!")
    else:
        await event.respond("Неправильно!")

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

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

В aiogram если не ошибаюсь для этих целей есть машина состояний, по этой библиотеке я не могу точно вам сказать, но поищите информацию по этой теме. Лично я при создании ботов работал чисто на библиотеке requests и эти ситуации решал путём создания временного состояния для пользователя с этим ID. То есть в данных пользователя создавать переменную status и в ней прописывал кратко что я ожидаю, а в коде уже обрабатывал это как: Если status None, то работает как и работали, если пришло сообщение "Промокод", то присваиваем status ожидание промокода, если status = ожидание промокода, то сравниваем текст полученного сообщения и сбрасываем status в None. Всё это загонял в конструкцию if, elif, else. Всё работало быстро и без каких либо проблем

→ Ссылка
Автор решения: ProgrammerBandit

Я нашел решение моей задачи. Чтобы сравнить сообщение, его нужно ожидать, а затем получить. Оказывается, в Telethon есть класс TelegramClient, у которого существует вспомогательный Conversation(), для ожидания какого либо события (в нашем случае сообщения), нужен его метод wait_event(). Ниже приведен пример кода:

@bot.on(events.NewMessage())
async def surveillance_and_answ(event):
    print(event.text) 
    if event.text=="Ввести промокод":
        await event.respond("Ваш код: ")
        try:
            async with bot.conversation(event.chat_id,timeout=60) as wait:
                wait_message = wait.wait_event(events.NewMessage())
                msg = await wait_message
                print(msg.message.message)
                if msg.message.message=='PROMOCODE':
                    await event.respond("Поздравляю, вы получили подписку на **12 месяцев!**")
                else:
                    await event.respond("Увы, такого промокода **не существует!**")
        except TimeoutError:
            await event.respond("Время для ввода промокода истекло, попробуйте снова")
→ Ссылка