Для создания многоуровневого меню для телеграмм бота с использованием библиотеки telebot, можно использовать следующий подход:
1. Создайте основное меню бота, например, главное меню с несколькими кнопками.
2. При нажатии на каждую кнопку основного меню, запускайте новое меню с дополнительными кнопками.
3. Добавьте обработчики для каждой кнопки в соответствующем меню.
Пример кода для создания многоуровневого меню в боте с использованием библиотеки telebot:
```python
import telebot
from telebot import types
bot = telebot.TeleBot('TOKEN')
@bot.message_handler(commands=['start'])
def start(message):
markup = types.ReplyKeyboardMarkup()
markup.row(types.KeyboardButton('Каталог кроссовок'))
bot.send_message(message.chat.id, "Выберите действие:", reply_markup=markup)
@bot.message_handler(func=lambda message: True)
def handle_messages(message):
if message.text == 'Каталог кроссовок':
shoes_menu(message)
def shoes_menu(message):
markup = types.ReplyKeyboardMarkup()
markup.row(types.KeyboardButton('Adidas'))
markup.row(types.KeyboardButton('Nike'))
bot.send_message(message.chat.id, "Выберите бренд кроссовок:", reply_markup=markup)
bot.polling()
```
Чтобы оптимизировать код многоуровневого меню каталога кроссовок и избежать большого количества условий if в одной функции, можно разделить каждое меню в отдельные функции. Для доступа к переменной `call` из различных функций и сделать ее глобальной, можно передавать `call` как аргумент в каждую функцию, где она используется.
Пример оптимизированного кода:
```python
import telebot
from telebot import types
bot = telebot.TeleBot('TOKEN')
@bot.message_handler(commands=['start'])
def start(message):
main_menu(message.chat.id)
def main_menu(chat_id):
markup = types.ReplyKeyboardMarkup()
markup.row(types.KeyboardButton('Каталог кроссовок'))
bot.send_message(chat_id, "Выберите действие:", reply_markup=markup)
@bot.message_handler(func=lambda message: True)
def handle_messages(message):
if message.text == 'Каталог кроссовок':
shoes_menu(message.chat.id)
def shoes_menu(chat_id):
markup = types.ReplyKeyboardMarkup()
markup.row(types.KeyboardButton('Adidas'))
markup.row(types.KeyboardButton('Nike'))
bot.send_message(chat_id, "Выберите бренд кроссовок:", reply_markup=markup)
bot.polling()
```
Таким образом, выделение каждого меню в отдельную функцию поможет сделать код более читаемым и управляемым, а передача `chat_id` как аргумент в функции позволит избежать использования глобальной переменной.