Как отслеживать нажатие на reply кнопку telebot

@bot.message_handler(commands=['start'])
def start(message):
    full_name = f'Привет, <u>{message.from_user.first_name} {message.from_user.last_name}</u>, снизу можешь выбрать программу тренировок и узнать их стоимость.'
    bot.send_message(message.chat.id, full_name, parse_mode='html')
    bot.send_message(message.chat.id,f"Чтобы воспользоваться встроенной клавиатурой напишите /help")
    
    
@bot.message_handler(commands=['help'])
def keyboard(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    buttonA = types.KeyboardButton('Программа тренировок')
    buttonB = types.KeyboardButton('Стоимость')
    buttonC = types.KeyboardButton('Контакты и адреса')
    markup.row(buttonA, buttonB, buttonC)
    bot.send_message(message.chat.id, '?', reply_markup=markup)


bot.polling(none_stop=True)

Хотел бы добавить функционал в кнопки. Чтобы человек нажимал на кнопку 'Программа тренировок' и у него должно появиться изображение или текст.Как можно добавить данный функционал?


Ответы (2 шт):

Автор решения: oleksandrigo

Reply кнопки это по факту обычные сообщения от юзера и обрабатывать и нужно как сообщения

@bot.message_handler(func=lambda message: message.text=="Программа тренировок")
def training(message):
    bot.send_message(...)
→ Ссылка
Автор решения: cool rage

Ну, все проще чем можно было.

Код:

import telebot
from telebot import types

bot = telebot.TeleBot('TOKEN')

@bot.message_handler(commands=['start'])
def start(message):
    full_name = f'Привет, <u>{message.from_user.first_name} {message.from_user.last_name}</u>, снизу можешь выбрать программу тренировок и узнать их стоимость.'
    bot.send_message(message.chat.id, full_name, parse_mode='html')
    bot.send_message(message.chat.id,f"Чтобы воспользоваться встроенной клавиатурой напишите /help")

@bot.message_handler(commands=['help'])
def keyboard(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    buttonA = types.KeyboardButton('Программа тренировок')
    buttonB = types.KeyboardButton('Стоимость')
    buttonC = types.KeyboardButton('Контакты и адреса')
    markup.row(buttonA, buttonB, buttonC)
    bot.send_message(message.chat.id, '?', reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == 'Программа тренировок')
def workout_program(message):
    # отправка изображения
    with open('workout_program.jpg', 'rb') as f:
        bot.send_photo(message.chat.id, f)
    # отправка текста
    bot.send_message(message.chat.id, 'Это программа тренировок.')

@bot.message_handler(func=lambda message: message.text == 'Стоимость')
def price(message):
    bot.send_message(message.chat.id, 'Это стоимость.')

@bot.message_handler(func=lambda message: message.text == 'Контакты и адреса')
def contacts(message):
    bot.send_message(message.chat.id, 'Это контакты и адреса.')

bot.polling(none_stop=True)
 

Медиа должно лежать рядом с bot.py, в другом случае, в папке с ботом создаешь photo и грузишь туда все фотки, затем в коде добавляешь просто путь:

'photo/workout_program.jpg' 
 если для win - \

Можно еще использовать метод caption чтобы отправить медиа вместе с подписью, эксперементируй)

→ Ссылка