@Xproz
Пытаюсь постигнуть компьютерные сети

Telebot: Условные операторы в ReplyKeyboardMarkup?

Здравствуйте. Я только недавно начал изучать Telebot и не совсем понимаю, что делать с кнопками ReplyKeyboardMarkup, а точнее как проверять, какую кнопку нажал пользователь. То есть скажем пользователь нажмет кнопку album и мне нужно предоставить ему определенную информацию (либо другую клаву с кнопками), но как проверить нажал ли он эту кнопку или нет. Нужно отдельный хендлер и проверять не написал ли пользователь 'album'?

table = types.ReplyKeyboardMarkup()
	
	button_album = types.KeyboardButton('album')
	button_profile = types.KeyboardButton('profile')
	button_instagram = types.KeyboardButton('insta')
	button_facebook = types.KeyboardButton('facebook')
	button_youtube = types.KeyboardButton('youtube')
	
	table.row(button_album, button_profile)
	table.row(button_instagram, button_facebook, button_youtube)
	
	bot.send_message(mes.chat.id, reply_markup = table)
  • Вопрос задан
  • 1243 просмотра
Решения вопроса 2
@OdAs
Начинающий пайтон програмист
Здравствуй , Во первых я бы посоветовал немного изменить код и написать следующим образом:
table = types.ReplyKeyboardMarkup()

button_album = types.KeyboardButton('album')
button_profile = types.KeyboardButton('profile')
button_instagram = types.KeyboardButton('insta')
button_facebook = types.KeyboardButton('facebook')
button_youtube = types.KeyboardButton('youtube')

table.add(button_album, button_profile, button_instagram, button_facebook, button_youtube)

здесь надо вставить текст к которому собственно будет привязана клавиатура и сделать еще один хендлер который будет начинать работу бота :

@bot.message_handler(command=["start"])
def start(message):
bot.send_message(message.chat.id, " какойто текст ", reply_markup = table)

Дальше надо добавить хендлер.Так как при нажатии кнопки бот пишет сообщение, тебе надо просто написать обработчик по типу такого:

@bot.message_handler(content_types=["text"])
def lalala(message):
if message.chat.type == "private": # обозначает что сообщение написано именно в этот чат
if message.text == "текст который будет написан после нажатия кнопки(текст кнопки) или тот который пользователь написал боту":
#и тут то что будет делать бот

Еще помни что одному сообщению можно прикрепить только одну клавиатуру и в клавиатуру нельзя добавлять другую клавиатуру не смотря на ее тип
Ответ написан
WolfInChains
@WolfInChains
@bot.message_handler(content_types=['text'])
def lalala(message):
    if message.chat.type == 'private':
        if message.text == 'album':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("variant1", callback_data='v1')
            item2 = types.InlineKeyboardButton("variant2", callback_data='v2')

            markup.add(item1, item2)

            bot.send_message(message.chat.id, 'Что имеено интересует', reply_markup=markup)

        elif message.text == 'profile':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item3 = types.InlineKeyboardButton("variant1", callback_data='v3')
            item4 = types.InlineKeyboardButton("variant2", callback_data='v4')

            markup.add(item3, item4)

            bot.send_message(message.chat.id, 'Что именно интересует', reply_markup=markup)

        elif message.text == 'insta':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item5 = types.InlineKeyboardButton("variant1", callback_data='v5')
            item6 = types.InlineKeyboardButton("variant2", callback_data='v6')

            markup.add(item5, item6)

            bot.send_message(message.chat.id, 'Что именно интересует', reply_markup=markup)

        elif message.text == 'facebook':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item7 = types.InlineKeyboardButton("variant1", callback_data='v7')
            item8 = types.InlineKeyboardButton("variant2", callback_data='v8')

            markup.add(item7, item8)

            bot.send_message(message.chat.id, 'Что именно интересует', reply_markup=markup)

        elif message.text == 'youtube':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item9 = types.InlineKeyboardButton("variant1", callback_data='v9')
            item10 = types.InlineKeyboardButton("variant2", callback_data='v10')

            markup.add(item9, item10)

            bot.send_message(message.chat.id, 'Что именно интересует', reply_markup=markup)

        else:
            bot.send_message(message.chat.id, 'Я не знаю такой команды')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'v1':
            #что должен сделать бот
            elif call.data == 'v2':
            #что должен сделать бот
            #и так далее
    except Exception as e:
     print(repr(e))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы