Перехват действий с помощью команды в Telegram-боте[Закрыто]

При выполнении команды "/start" пользователь должен ввести свой логин, но если он вдруг передумает, то предусмотрена команда "/cancel", которая, в теории, "должна отменять любые действия"(на самом деле она просто должна обрабатываться хэндлером и вызываться как обычно), но на практике она не работает.

Код:

@bot.message_handler(commands=['start'])
def start(message):
    msg = bot.send_message(message.chat.id, "Введите Ваш логин")
    bot.register_next_step_handler(msg, new_function)


def new_function(message):
    bot.send_message(message.chat.id, f"Ваш логин: {message.text}")


@bot.message_handler(commands=['cancel'])
def cancel(message):
    bot.send_message(message.chat.id, "Действие отменено")

Как бот работает сейчас:

Команда /cancel не обрабатывается


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

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

Дело в том, что после /start любое сообщение будет перехвачено и описано как текст, я предлагаю немного костыльный, но рабочий вариант - проверить саму строку:

@bot.message_handler(commands=['start'])
def start(message):
    msg = bot.send_message(message.chat.id, "Введите Ваш логин")
    bot.register_next_step_handler(msg, new_function)


def new_function(message):
    if message.text == "/cancel":
        bot.send_message(message.chat.id, "Действие отменено")
    else:
        bot.send_message(message.chat.id, f"Ваш логин:{message.text}")

→ Ссылка