• Как правильно написать многоуровневое меню для телеграмм бота в библиотеке telebot?

    @Fan_Tom_97 Автор вопроса
    Спасибо огромное!
    Теперь все красиво и работает.
    В пример отправлю получившийся рабочий код, если кому-то потребуется:

    import telebot
    from telebot import types
    
    token = '................................'  
    bot = telebot.TeleBot(token)
    
    
    @bot.message_handler(commands=['start'])
    
    # ГЛАВНОЕ МЕНЮ
    def main(message):
    
        st_menu = types.InlineKeyboardMarkup()
    
        btn1 = types.InlineKeyboardButton('Каталог', callback_data='main.catalog')
        st_menu.row(btn1)
        btn2 = types.InlineKeyboardButton('Частые вопросы', callback_data='main.questions')
        st_menu.row(btn2)
        
        bot.send_message(message.chat.id, "..................", reply_markup = st_menu)
    
    
    
    @bot.callback_query_handler(func=lambda call:  call.data.startswith('main.'))
    
    # ОБРАБОТКА КНОПОК ГЛАВНОГО МЕНЮ
    def call_start_menu(call):
    
        # КАТАЛОГ
        if call.data == 'main.catalog':
    
            cat_menu = types.InlineKeyboardMarkup()
    
            btn1 = types.InlineKeyboardButton('Товар 1', callback_data='catalog.01')
            btn2 = types.InlineKeyboardButton('Товар 2', callback_data='catalog.02')
            cat_menu.row(btn1, btn2)
    
            btn3 = types.InlineKeyboardButton('В главное меню', callback_data='back.home')
            cat_menu.row(btn3)
    
            bot.send_message(call.message.chat.id, 'Выбери мужские или женские:', reply_markup=cat_menu)
    
        # ЧАСТЫЕ ВОПРОСЫ
        if call.data == 'main.questions':
    
            quest_menu = types.InlineKeyboardMarkup()
    
            btn1 = types.InlineKeyboardButton('............', callback_data='questions.quest1')
            btn2 = types.InlineKeyboardButton('..........', callback_data='questions.quest2')
            quest_menu.row(btn1, btn2)
    
            btn5 = types.InlineKeyboardButton('В главное меню', callback_data='back.home')
            quest_menu.row(btn5)
    
    
            bot.send_message(call.message.chat.id, 'Выбери вопрос:', reply_markup=quest_menu)
    
    @bot.callback_query_handler(func=lambda call:  call.data.startswith('questions.'))
    # ОБРАБОТКА КНОПОК ЧАСТЫХ ВОПРОСОВ
    def call_quest_menu(call):
    
        # Вопрос 1
        if call.data == 'questions.quest1':
    
            dely_quest = types.InlineKeyboardMarkup()
    
            btn1 = types.InlineKeyboardButton('↩️Назад', callback_data='main.questions')
            btn2 = types.InlineKeyboardButton('Главное меню', callback_data='back.home')
            dely_quest.row(btn1, btn2)
    
            bot.send_message(call.message.chat.id, '......................', reply_markup=dely_quest)
    
        # Вопрос 2
        if call.data == 'questions.quest2':
            pass
    
    @bot.callback_query_handler(func=lambda call:  call.data.startswith('catalog.'))
    # ОБРАБОТКА КНОПОК КАТАЛОГА
    def call_cat_menu(call):
    
        # Товар 1
        if call.data == 'catalog.01':
    
            cat = types.InlineKeyboardMarkup()
    
            btn1 = types.InlineKeyboardButton('↩️Назад', callback_data='main.catalog')
            btn2 = types.InlineKeyboardButton('Главное меню', callback_data='back.home' )
            cat.row(btn1, btn2)
    
            bot.send_message(call.message.chat.id, '...........',  reply_markup=men_cat)
    
        # Товар 2
        if call.data == 'catalog.02':
            pass
    
    @bot.callback_query_handler(func=lambda call:  call.data.startswith('back.'))
    # ВОЗВРАТ В ГЛАВНОЕ МЕНЮ
    def back_start_menu(call):
    
        if call.data == 'back.home':
            main(call.message)
    
    
    bot.polling(none_stop=True)
    Написано