Как сделать многоуровневое меню в телеграмм боте?
Всем привет! Не судите строго, я новичок в программировании. Возникла потребность в создании бота в телеграмме, который будет содержать в себе каталог. Структура: Категории(кнопки)=>Подкатегории(кнопки)=>Товары(кнопки)=> Описание товара и фото(текст и картинка). Но столкнулся с проблемой после подкатегорий не появляются кнопки товаров. Что я делаю не так?))) И ещё вопрос, я хочу, чтобы после выбора товара отправлялись описание и картинка, правильный ли я кода использую? Пример кода:
import telebot
from telebot import types
from requests import get
bot=telebot.TeleBot('ТОКЕН')
# выбираем категории
@bot.message_handler(commands=['start', 'help'])
def category(message):
keyboard_category = types.ReplyKeyboardMarkup(resize_keyboard=True)
key_1_1 = types.KeyboardButton('1_1')
keyboard_category.add(key_1_1)
bot.reply_to(message, "Привет! Я помогу подобрать товар!",
reply_markup=keyboard_category)
# выбираем подкатегории
@bot.message_handler(content_types = ['text'])
def subcategory(message):
if message.text == "1_1":
keyboard_subcategory = types.ReplyKeyboardMarkup(resize_keyboard=True)
key_2_1 = types.KeyboardButton('2_1')
keyboard_subcategory.add(2_1)
bot.send_message(message, 'Выберите подкатегорию', reply_markup=keyboard_subcategory)
# выбираем товар из подкатегории
@bot.message_handler(content_types = ['text'])
def tovar(message):
if message.text == "2_1":
keyboard_tovar = types.ReplyKeyboardMarkup(resize_keyboard=True)
key_3_1 = types.KeyboardButton('3_1')
keyboard_tovar.add(key_id1)
bot.send_message(message, 'Выберите товар по названию и я пришлю вам подробности',
reply_markup= keyboard_tovar)
@bot.message_handler(content_types = ['text'])
def abc(message):
if message.text == "3_1"
bot.send_message(message.chat.id, "Описание товара")
bot.send_photo(message.chat.id, get("Ссылка на картинку").content)
bot.polling()
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
@bot.message_handler(commands=['start', 'help'])
def category(message):
keyboard_category = types.ReplyKeyboardMarkup(resize_keyboard=True)
key_1_1 = types.KeyboardButton('1_1')
keyboard_category.add(key_1_1)
bot.reply_to(message, "Привет! Я помогу подобрать товар!", reply_markup=keyboard_category)
@bot.message_handler(content_types=['text'])
def subcategory(message):
if message.text == "1_1":
keyboard_subcategory = types.ReplyKeyboardMarkup(resize_keyboard=True)
key_2_1 = types.KeyboardButton('2_1')
keyboard_subcategory.add(key_2_1) # key_2_1 не использовалась
bot.send_message(message.chat.id, 'Выберите подкатегорию', reply_markup=keyboard_subcategory)
elif message.text == "2_1":
keyboard_tovar = types.ReplyKeyboardMarkup(resize_keyboard=True)
key_3_1 = types.KeyboardButton('3_1')
keyboard_tovar.add(key_3_1) # key_3_1 не использовалась
bot.send_message(message.chat.id, 'Выберите товар по названию и я пришлю вам подробности',
reply_markup=keyboard_tovar)
elif message.text == "3_1": # потеряли двоеточие
bot.send_message(message.chat.id, "Описание товара")
bot.send_photo(message.chat.id, 'https://cs13.pikabu.ru/images/big_size_comm/2020-06_3/159194100716237333.jpg') # просто укажите ссылку на картинку
bot.polling()
и пример на inline кнопках:
def keyboard(where_call):
kb = types.InlineKeyboardMarkup()
if where_call == 'start':
kb_1 = types.InlineKeyboardButton(text='1_1_inline', callback_data='1_1_inline')
kb.add(kb_1)
return kb
elif where_call == 'subcategory':
kb_2 = types.InlineKeyboardButton(text='2_1_inline', callback_data='2_1_inline')
kb.add(kb_2)
return kb
elif where_call == 'product':
kb_3 = types.InlineKeyboardButton(text='3_1_inline', callback_data='3_1_inline')
kb.add(kb_3)
return kb
@bot.message_handler(commands=['start', 'help'])
def category(message):
bot.reply_to(message, "Привет! Я помогу подобрать товар!", reply_markup=keyboard('start'))
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.data == '1_1_inline':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text='подкатегория', reply_markup=keyboard('subcategory'))
elif call.data == '2_1_inline':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text='товар', reply_markup=keyboard('product'))
elif call.data == '3_1_inline':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text='Описание товара')
bot.send_photo(call.message.chat.id,
'https://cs13.pikabu.ru/images/big_size_comm/2020-06_3/159194100716237333.jpg')