Как реализовать выбор меню в telebot?

Всем привет, у меня возник вопрос, как сделать выбор меню в telebot:
Вот картинка
6002f8ccce821777158598.png

Я выбрал общество, и там вылезает действие, допустим нууу купить.
Как я могу понять что выбрали общество (да есть call.data, но после нажатия купить он меняется) не могу же создавать клавиатуры для каждого выбранного предмета, подскажите пожалуйста
  • Вопрос задан
  • 1017 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
upd:

Для создания большого кол-ва кнопок можно использовать циклы

subjects = {
            'Русский язык': {'desc': 'Книга по русскому языку', 'shortname': 'rus'},
            'Математика': {'desc': 'Книга по русскому языку', 'shortname': 'math'},
            'Физика': {'desc': 'Книга по физике', 'shortname': 'physics'},
            'Литература': {'desc': 'Книга по литературе', 'shortname': 'literature'}
            }


@bot.message_handler(commands=['start'])
def send_start(message):

    main_kb = InlineKeyboardMarkup(row_width=2)

    buttons = []
    for name, value in subjects.items():
        buttons.append(InlineKeyboardButton(name, callback_data=value['shortname']))

    main_kb.add(*buttons)

    bot.send_message(message.chat.id, 'Список книг', reply_markup=main_kb)


@bot.callback_query_handler(func=lambda call: True)
def callback(call):

    for name, value in subjects.items():
        if value['shortname'] in call.data:

            if call.data.startswith('buy_'):
                bot.send_message(call.message.chat.id, 'Кнопка покупки {}'.format(name))
            
            else:
                buy_button = InlineKeyboardMarkup()
                buy_button.add(InlineKeyboardButton('Купить книгу {}'.format(name), callback_data='buy_{}'.format(value['shortname'])))
                bot.send_message(call.message.chat.id, value['desc'], reply_markup=buy_button)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MinTnt
@MinTnt
При помощи редактирования уже отправленного сообщения.
Ответ написан
Ваш ответ на вопрос

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

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