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

Как сделать многоуровневое меню телеграм бота ( inline — callback) на python?

Добрый день. Есть код телеграм бота, который выводит 4 кнопки и при нажатии на каждую из них выводится сообщение.
from telebot import types

import constants, os, re


bot = telebot.TeleBot(constants.token)

@bot.message_handler(commands=["start"])
def inline(message):
    key = types.InlineKeyboardMarkup()
    but_1 = types.InlineKeyboardButton(text="NumberOne", callback_data="NumberOne")
    but_2 = types.InlineKeyboardButton(text="NumberTwo", callback_data="NumberTwo")
    but_3 = types.InlineKeyboardButton(text="NumberTree", callback_data="NumberTree")
    but_4 = types.InlineKeyboardButton(text="Number4", callback_data="Number4")
    key.add(but_1, but_2, but_3, but_4)
    bot.send_message(message.chat.id, "ВЫБЕРИТЕ КНОПКУ", reply_markup=key)

@bot.callback_query_handler(func=lambda c:True)
def inlin(c):
    if c.data == 'NumberOne':
        bot.send_message(c.message.chat.id, 'Это кнопка 1')
    if c.data == 'NumberTwo':
        bot.send_message(c.message.chat.id, 'Это кнопка 2')
    if c.data == 'NumberTree':
        bot.send_message(c.message.chat.id, 'Это кнопка 3')
    if c.data == 'Number4':
        bot.send_message(c.message.chat.id, 'Это кнопка 4')




#    elif c.data == 'NumberTwo':
#        bot.send_message(c.message.chat.id, 'Это мазафака, кнопка 2')




if __name__ == "__main__":
    bot.polling(none_stop=True)


Как сделать, что бы при нажатии на кнопку - открывалось новое меню из нескольких кнопок, с возможностью вернутся к главному меню?
  • Вопрос задан
  • 20351 просмотр
Подписаться 5 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
SuckMyPython
@SuckMyPython
matrix.polling(none_stop=True)
Надо добавить в bot.send_message необязательный параметр reply_markup=key (т.е. помимо отправления текста бот создаст меню), предварительно указав необходимую информацию.

Вот пример на скорую руку (изменение 3 кнопки):

@bot.message_handler(commands=["start"])
def inline(message):
	key = types.InlineKeyboardMarkup()
	but_1 = types.InlineKeyboardButton(text="NumberOne", callback_data="NumberOne")
	but_2 = types.InlineKeyboardButton(text="NumberTwo", callback_data="NumberTwo")
	but_3 = types.InlineKeyboardButton(text="NumberTree", callback_data="NumberTree")
	key.add(but_1, but_2, but_3)
	bot.send_message(message.chat.id, "ВЫБЕРИТЕ КНОПКУ", reply_markup=key)

@bot.callback_query_handler(func=lambda c:True)
def inline(c):
	if c.data == 'NumberOne':
		bot.send_message(c.message.chat.id, 'Это кнопка 1')
	if c.data == 'NumberTwo':
		bot.send_message(c.message.chat.id, 'Это кнопка 2')
	if c.data == 'NumberTree':
		key = types.InlineKeyboardMarkup()
		but_1 = types.InlineKeyboardButton(text="NumberOne", callback_data="NumberOne")
		but_2 = types.InlineKeyboardButton(text="NumberTwo", callback_data="NumberTwo")
		but_3 = types.InlineKeyboardButton(text="NumberTree", callback_data="NumberTree")
		key.add(but_1, but_2, but_3)
		bot.send_message(c.message.chat.id, 'Это кнопка 3', reply_markup=key)
Ответ написан
@manvalit
Это делается простым изменением сообщения. После этого вставляем другую клавиатуру, подробно можете узнать здесь: https://groosha.gitbooks.io/telegram-bot-lessons/c...
Если всё же вы не могли понять, то напишите - объясню.
Ответ написан
Ваш ответ на вопрос

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

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