Кнопки снизу: reply-клавиатура

Печатать команды вручную скучно и легко ошибиться. Куда приятнее, когда у бота есть кнопки: ткнул и готово. Сегодня добавим первый вид кнопок, тот, что заменяет клавиатуру снизу. Их называют reply-кнопки.

После урока сможешь: объяснить тему «Кнопки снизу: reply-клавиатура» и выполнить связанный с ней учебный шаг без подсказки.

Помнишь аналогию из словаря? Кнопки это как пульт от телевизора. Не объясняешь словами, просто жмёшь. Соберём такой пульт для своего бота.

Главная мысль про reply-кнопки

Когда пользователь жмёт reply-кнопку, боту приходит обычное текстовое сообщение с надписью этой кнопки. Нажал «Шутка», бот получил сообщение «Шутка». Будто человек сам напечатал это слово. Значит, и ловить нажатие будем знакомым обработчиком по тексту.

Собираем клавиатуру

Для кнопок понадобится помощник из библиотеки. В самом верху, рядом с импортом, добавь from telebot import types. types это набор готовых деталей: клавиатуры и кнопки. Теперь на /start бот покажет две кнопки:

import telebot
from telebot import types
from config import TOKEN

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def start(message):
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(types.KeyboardButton("Шутка"), types.KeyboardButton("Совет"))
    bot.send_message(message.chat.id, "Привет! Жми кнопку снизу:", reply_markup=keyboard)

bot.infinity_polling()
  • types.ReplyKeyboardMarkup(resize_keyboard=True) создаёт пустую клавиатуру; resize_keyboard=True делает кнопки аккуратными, а не во весь экран.
  • keyboard.add(...) кладёт кнопки. Каждая это types.KeyboardButton("надпись").
  • reply_markup=keyboard в send_message значит «покажи вместе с сообщением вот эту клавиатуру». Без этого кнопок не будет.

Учим бота реагировать

Кнопки показались, но пока немые. Добавим обработчики. Помни секрет: нажатие это просто текст, ловим по тексту кнопки.

@bot.message_handler(func=lambda message: message.text == "Шутка")
def joke(message):
    bot.send_message(message.chat.id, "Почему программисты путают Хэллоуин и Рождество? 31 OCT = 25 DEC.")

@bot.message_handler(func=lambda message: message.text == "Совет")
def advice(message):
    bot.send_message(message.chat.id, "Сохраняйся почаще. И пей воду.")

Фильтр func=lambda message: message.text == "Шутка" значит «срабатывай, только если текст ровно Шутка». Поставь эти обработчики выше общего эхо, если он остался, иначе эхо перехватит нажатие. Частные правила выше общего, мы это проходили в Боте-Эхо.

Контрольный вопрос. Чтобы клавиатура показалась вместе с сообщением, в send_message добавляют параметр ____=keyboard. Напиши имя параметра.

Подсказка: reply_____

Онлайн-проверка ответа появится позже

Задание. Добавь боту на /start reply-клавиатуру с двумя своими кнопками, каждой кнопке свой ответ. Пришли скриншот, где видны кнопки снизу и ответ бота на нажатие.

Подсказка: Кнопки через keyboard.add(types.KeyboardButton(…)), показать через reply_markup=keyboard. Реагировать обработчиком func=lambda message: message.text == «надпись».

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Зачёт, если:
✅ на /start показывается reply-клавиатура с двумя твоими кнопками;
✅ на каждую кнопку бот отвечает по-своему;
✅ прислан скриншот: кнопки снизу и ответ бота на нажатие.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева