@enabl3

Как прервать bot.register_next_step_handler?

Подскажите пожалуйста, как выйти из любого шага при использовании данного метода, что бы на каждом из них, к примеру, можно было нажать кнопку, и цикл завершался.
Примерный код:
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def process_start(message):
    board = types.InlineKeyboardMarkup()
    cancel = types.InlineKeyboardButton(text="Отмена", callback_data="Отмена")
    board.add(cancel)
    text = 'start'
    msg = bot.send_message(message.chat.id, text, reply_markup=cancel)
    bot.register_next_step_handler(mgs, process_mid)

def process_mid(message):
    board = types.InlineKeyboardMarkup()
    cancel = types.InlineKeyboardButton(text="Отмена", callback_data="Отмена")
    board.add(cancel)
    text = 'mid'
    msg = bot.send_message(message.chat.id, text, reply_markup=cancel)
    bot.register_next_step_handler(msg, process_end)

def process_end(message):
    text = 'end'
    bot.send_message(message.chat.id, text)

@bot.callback_query_handler(func=lambda call: True)
    def callback_inline(call):
       if call.message:
           if call.data == "Отмена":
                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Отменено.')

bot.polling(none_stop=True)

При нажатии на ОТМЕНА, все работает, кнопка пропадает и заменяется на текст, но сам цикл не завершается.
  • Вопрос задан
  • 11035 просмотров
Пригласить эксперта
Ответы на вопрос 3
ScriptKiddo
@ScriptKiddo
bot.clear_step_handler_by_chat_id(chat_id=call.message.chat.id)


Source
@bot.message_handler(commands=['start'])
def process_start(message):
    board = types.InlineKeyboardMarkup()
    cancel = types.InlineKeyboardButton(text="Отмена", callback_data="Отмена")
    board.add(cancel)
    text = 'start'
    msg = bot.send_message(message.chat.id, text, reply_markup=board)
    bot.register_next_step_handler(msg, process_mid)


def process_mid(message):
    board = types.InlineKeyboardMarkup()
    cancel = types.InlineKeyboardButton(text="Отмена", callback_data="Отмена")
    board.add(cancel)
    text = 'mid'
    msg = bot.send_message(message.chat.id, text, reply_markup=board)
    bot.register_next_step_handler(msg, process_end)


def process_end(message):
    text = 'end'
    bot.send_message(message.chat.id, text)


@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.message:
        if call.data == "Отмена":
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Отменено.')
            bot.clear_step_handler_by_chat_id(chat_id=call.message.chat.id)


bot.polling(none_stop=True)
Ответ написан
@sergeyibragimov
Компьютерщик по жизни
Думал то что кнопка от клавиатуры-"inline" в боте, после конца, а тут еще есть с циклом проблемы
Ответ написан
Комментировать
@test293
Привет. register_next_step_handler устарел.
Юзайте стейты:
https://github.com/eternnoir/pyTelegramBotAPI/blob...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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