Как создать многоуровневое меню для бота в telegram
Перейти к содержимому

Как создать многоуровневое меню для бота в telegram

  • автор:

Многоуровневое меню в Bot Telegram, как сделать кнопку назад на каждом уровне?

Хелп товарищи, не могу разобраться, перепробовал разные варианты из туториалов
Код ниже:

import telebot from telebot import types bot = telebot.TeleBot('ТОКЕН') @bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1) item1 = types.KeyboardButton('меню') item2 = types.KeyboardButton('инфо') markup.add(item1, item2) bot.send_message(message.chat.id, 'Привет, !'.format(message.from_user), reply_markup=markup) @bot.message_handler(content_types=['text']) def bot_message(message): if message.chat.type == 'private': if message.text == 'меню': markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1) item1 = types.KeyboardButton('раздел 1') item2 = types.KeyboardButton('раздел 1.2') back = types.KeyboardButton(' Назад') markup.add(item1, item2, back) bot.send_message(message.chat.id, 'меню', reply_markup=markup) elif message.text == 'раздел 1': markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1) item1 = types.KeyboardButton('товар 1') item2 = types.KeyboardButton('товар 2') back = types.KeyboardButton(' Назад') markup.add(item1, item2, back) bot.send_message(message.chat.id, 'раздел 1', reply_markup=markup) elif message.text == ' Назад': markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2) item1 = types.KeyboardButton('меню') item2 = types.KeyboardButton('инфо') markup.add(item1, item2) bot.send_message(message.chat.id, ' Назад', reply_markup=markup) bot.polling(none_stop = True)
  • Вопрос задан 07 янв.
  • 468 просмотров

4 комментария

Простой 4 комментария

Как сделать многоуровневое меню в телеграмм боте?

Всем привет! Не судите строго, я новичок в программировании. Возникла потребность в создании бота в телеграмме, который будет содержать в себе каталог. Структура: Категории(кнопки)=>Подкатегории(кнопки)=>Товары(кнопки)=> Описание товара и фото(текст и картинка). Но столкнулся с проблемой после подкатегорий не появляются кнопки товаров. Что я делаю не так?))) И ещё вопрос, я хочу, чтобы после выбора товара отправлялись описание и картинка, правильный ли я кода использую? Пример кода:

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() 

Отслеживать
задан 15 ноя 2020 в 10:18
Артем Сыромятников Артем Сыромятников
1 1 1 серебряный знак 1 1 бронзовый знак

зачем вам куча хендлеров на обработку текста, если можно сделать всё в одном? первый будет if , последующие elif . а вообще посмотрите в сторону inline кнопокй

16 ноя 2020 в 6:10

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

@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') 

Многоуровневое меню в тг боте

Подскажите пожалуйста, как сделать кнопку назад в многоуровневом меню? что бы при нажатии на ктопку назад, я возвращался в основное меню?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Многоуровневое меню
Здравствуйте помогите создать многоуровневое меню Я создал первые два а как дальше при выборе.

Многоуровневое меню в TelegramBotApi
Здравствуйте! Я новичок в python, и для практики решил написать игрового телеграмм бота на.

Многоуровневое меню telegram bot
Есть бот telegram, вот код: keyboard = telebot.types.InlineKeyboardMarkup(); key_yes =.

многоуровневое меню
Здравствуйте. Как можно организовать многоуровневое меню.

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

Как сделать, что бы при нажатии на кнопку — открывалось новое меню из нескольких кнопок, с возможностью вернутся к главному меню?

  • Вопрос задан более трёх лет назад
  • 18931 просмотр

Комментировать
Решения вопроса 0
Ответы на вопрос 2

SuckMyPython

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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *