micromeow
@micromeow

Как остановить bot.register_next_step_handler?

Доброго времени суток.
Нужен код, который начинает брать от пользователя информацию из телеграм бота, которую пользователь вводит в чат, для дальнейшей обработки.

Есть такая реализация через bot.register_next_step_handler.

def ur_name(message):
    msg = bot.send_message(message.chat.id, 'Здравствуйте, введите пожалуйста ваше имя') #запрашиваем имя
    bot.register_next_step_handler(msg, ur_secondname) #отправляем ответ в следующую функцию

def ur_secondname(message):
    user_data = {} #создаем словарь
    user_data['firstname'] = message.text #записываем имя в словарь
    msg = bot.send_message(message.chat.id, 'Введите пожалуйста вашу фамилию') #запрашиваем фамилию
    bot.register_next_step_handler(msg, ur_phone, user_data) #отправляем ответ в следующую функцию, где так же записываем фамилию и просим телефон и так далее


В общем все работает, но есть одно но, например если пользователь сделает опечатку или захочет остановить процесс, то последующие команды как /stop или повторный вызов любой команды будет восприниматься как текст и записываться в словарь, что с этим делать? Возможно есть способ брать информацию от пользователя получше?
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
@twistfire92
Python backend developer
как один из вариантов, делать проверку на слова триггеры:
def ur_secondname(message):
    if message.text.lower() in ['отмена', 'stop', '/stop', 'cancel']:
        bot.send_message(message.chat.id, 'Отмена пользователем!')
    else:
        user_data = {} #создаем словарь
        ...
Ответ написан
SoreMix
@SoreMix Куратор тега Python
yellow
Сделать кнопку «Отмена», проверять в начале каждой функции текст сообщения, если он == отмена, то можно просто выйти из функции, отослать другое сообщение, отправить стартовое сообщение и тд и тп
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы