Задать вопрос

Как сделать цепочку inline меню в Telegram bot на Python?

Пишу телеграмм бота на Python, использую библиотеку telebot.
Хочу построить такую цепочку меню:
/start -> Кнопка ReplyKeyboardMarkup "Выбери меня" -> Кнопка Inline "Первая" -> Кнопка Inline "Третья" -> Сообщение "Конец"
5ec3ca5529bde760985712.png

Все работает нормально до кнопки "Третья". Как я поняла, функция step3 уже не получает параметров. Подскажите, что не так? Декоратор добавляла, не помогает. Извините, если вопрос глупый, я новичок.
Мой код:
import telebot
from config import TOKEN

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def process_start(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('Выбери меня')
    msg = bot.send_message(message.chat.id, text = 'Нажми кнопку в меню', reply_markup = keyboard )


@bot.message_handler(content_types = ['text'])
def step1(message):
    menu1 = telebot.types.InlineKeyboardMarkup()
    menu1.add(telebot.types.InlineKeyboardButton(text = 'Первая кнопка', callback_data ='first'))
    menu1.add(telebot.types.InlineKeyboardButton(text = 'Вторая кнопка', callback_data ='second'))

    if message.text == 'Выбери меня':
        msg = bot.send_message(message.chat.id, text ='Нажми первую inline кнопку', reply_markup = menu1)
        bot.register_next_step_handler(msg, step2)


@bot.callback_query_handler(func=lambda call: True)
def step2(call):
    menu2 = telebot.types.InlineKeyboardMarkup()
    menu2.add(telebot.types.InlineKeyboardButton(text = 'Третья кнопка', callback_data ='third'))
    menu2.add(telebot.types.InlineKeyboardButton(text = 'Четвертая кнопка', callback_data ='fourth'))

    if call.data == 'first':
        msg = bot.send_message(call.message.chat.id, 'Нажми третью кнопку', reply_markup = menu2)
        bot.register_next_step_handler(msg, step3)

def step3(call):
    if call.data == 'third':
        msg = bot.send_message(call.message.chat.id, 'Конец')
    else:
        pass
  

bot.polling(none_stop=True)
  • Вопрос задан
  • 13256 просмотров
Подписаться 5 Простой 2 комментария
Решения вопроса 1
@TheAngryPython
import telebot
from config import TOKEN

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def process_start(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('Выбери меня')
    msg = bot.send_message(message.chat.id, text = 'Нажми кнопку в меню', reply_markup = keyboard )


@bot.message_handler(content_types = ['text'])
def step1(message):
    menu1 = telebot.types.InlineKeyboardMarkup()
    menu1.add(telebot.types.InlineKeyboardButton(text = 'Первая кнопка', callback_data ='first'))
    menu1.add(telebot.types.InlineKeyboardButton(text = 'Вторая кнопка', callback_data ='second'))

    if message.text == 'Выбери меня':
        msg = bot.send_message(message.chat.id, text ='Нажми первую inline кнопку', reply_markup = menu1)

@bot.callback_query_handler(func=lambda call: True)
def step2(call):
    menu2 = telebot.types.InlineKeyboardMarkup()
    menu2.add(telebot.types.InlineKeyboardButton(text = 'Третья кнопка', callback_data ='third'))
    menu2.add(telebot.types.InlineKeyboardButton(text = 'Четвертая кнопка', callback_data ='fourth'))

    if call.data == 'first':
        msg = bot.send_message(call.message.chat.id, 'Нажми третью кнопку', reply_markup = menu2)
    elif call.data == 'third':
        msg = bot.send_message(call.message.chat.id, 'Конец')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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