В первой части мы разобрали основы создания Telegram-ботов на Python. Теперь, вооружившись новыми знаниями, давайте научимся создавать интерактивные клавиатуры, которые сделают вашего бота более удобным и привлекательным для пользователей. 🤖
Виды клавиатур в Telegram: Inline и Reply
Telegram предоставляет два типа клавиатур: Inline и Reply. Каждая из них обладает своими уникальными особенностями и предназначена для решения разных задач.
1. ReplyKeyboardMarkup ⬅️
🔶 Представляет собой набор кнопок, которые заменяют стандартную клавиатуру пользователя.
🔶 Используется для предоставления заранее определенных вариантов ответов.
🔶 Не привязана к конкретному сообщению.
👉 *Пример*: Бот задает вопрос «Как дела?» и предлагает кнопки «Хорошо» и «Плохо». Пользователь может выбрать один из вариантов или ввести свой ответ.
2. InlineKeyboardMarkup ↩️
🔶 Это кастомная клавиатура, которая прикрепляется к сообщению.
🔶 Позволяет создавать более сложные сценарии взаимодействия.
🔶 Кнопки могут запускать различные действия, например, открывать ссылки, отправлять запросы к боту и т.д.
👉 *Пример*: Под постом с описанием товара появляется Inline-клавиатура с кнопками «Купить», «Подробнее» и «Поделиться».
Создаем Reply клавиатуру с помощью PyTelegramBotAPI
Давайте перейдем к практике и создадим нашу первую Reply клавиатуру. Для этого нам понадобится модуль types из библиотеки PyTelegramBotAPI.
1. Импортируем модуль types:
from telebot import types
2. Создаем объект ReplyKeyboardMarkup:
mm = types.ReplyKeyboardMarkup(row_width=2)
🔶 Параметр row_width=2 указывает, что в каждой строке клавиатуры будет по две кнопки.
🔶 Для компактного отображения кнопок можно использовать параметр resize_keyboard=True.
3. Создаем кнопки:
button1 = types.KeyboardButton(«🐣 Привет»)
button2 = types.KeyboardButton(«😀 Как дела?»)
🔶 Здесь мы создали две кнопки с текстом «🐣 Привет» and «😀 Как дела?».
4. Добавляем кнопки на клавиатуру:
mm.add(button1, button2)
5. Отправляем сообщение с клавиатурой:
bot.send_message(message.chat.id, «Hello World!», reply_markup=mm)
🔶 Параметр reply_markup=mm указывает, что к сообщению нужно прикрепить созданную нами клавиатуру.
Теперь при отправке команды /start бот будет отправлять приветственное сообщение «Hello World!» с прикрепленной клавиатурой.
Обработка нажатий на кнопки:
Чтобы бот реагировал на нажатия кнопок, нужно добавить обработчик сообщений.
@bot.message_handler(content_types=[‘text’])
def handler(message):
if message.text == «🐣 Привет»:
bot.send_message(message.chat.id, «Привет!»)
if message.text == «😀 Как дела?»:
bot.send_message(message.chat.id, «Отлично!»)
Теперь бот будет отвечать на сообщения «🐣 Привет» и «😀 Как дела?» соответствующими фразами.
Создаем Inline клавиатуру
Inline клавиатуры работают немного иначе, чем Reply клавиатуры. Вместо текстовых сообщений мы будем обрабатывать callback_data.
1. Создаем объект InlineKeyboardMarkup:
otvet = types.InlineKeyboardMarkup(row_width=2)
🔶 Параметры Inline клавиатуры аналогичны параметрам Reply клавиатуры.
2. Добавляем кнопки:
button1 = types.InlineKeyboardButton(«😎 Хорошо», callback_data=’good’)
button2 = types.InlineKeyboardButton(«😥 Плохо», callback_data=’bad’)
🔶 В параметре callback_data указывается уникальный идентификатор, который будет отправлен боту при нажатии на кнопку.
3. Добавляем кнопки на клавиатуру:
otvet.add(button1, button2)
4. Прикрепляем клавиатуру к сообщению:
bot.send_message(message.chat.id, «Как дела?», reply_markup=otvet)
Обработка callback_data:
Для обработки нажатий на кнопки Inline клавиатуры используется обработчик callback_query_handler.
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == «good»:
bot.send_message(call.message.chat.id, «Круто!»)
if call.data == «bad»:
bot.send_message(call.message.chat.id, «Ничего, все наладится!»)
except Exception as e:
print(repr(e))
Теперь, при нажатии на кнопку «Хорошо» бот ответит «Круто!», а при нажатии на «Плохо» – «Ничего, все наладится!».
Полный код бота с Reply и Inline клавиатурами
import telebot
from telebot import types
bot = telebot.TeleBot(‘YOUR_BOT_TOKEN’) # замените YOUR_BOT_TOKEN на токен вашего бота
Reply клавиатура
mm = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button1 = types.KeyboardButton(«🐣 Привет»)
button2 = types.KeyboardButton(«😀 Как дела?»)
mm.add(button1, button2)
@bot.message_handler(commands=[‘start’])
def start(message):
bot.send_message(message.chat.id, «Hello World!», reply_markup=mm)
@bot.message_handler(content_types=[‘text’])
def handler(message):
if message.text == «🐣 Привет»:
bot.send_message(message.chat.id, «Привет!»)
if message.text == «😀 Как дела?»:
# Inline клавиатура
otvet = types.InlineKeyboardMarkup(row_width=2)
button1 = types.InlineKeyboardButton(«😎 Хорошо», callback_data=’good’)
button2 = types.InlineKeyboardButton(«😥 Плохо», callback_data=’bad’)
otvet.add(button1, button2)
bot.send_message(message.chat.id, «Отлично! А у тебя?», reply_markup=otvet)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == «good»:
bot.send_message(call.message.chat.id, «Круто!»)
if call.data == «bad»:
bot.send_message(call.message.chat.id, «Ничего, все наладится!»)
except Exception as e:
print(repr(e))
bot.polling(none_stop=True)
Не забудьте:
🔶 Заменить YOUR_BOT_TOKEN на токен вашего бота.
🔶 Запустить скрипт, чтобы ваш бот начал работать.
Ответы на вопросы
1. Можно ли использовать смайлики в кнопках клавиатур?
🔶 Да, конечно! Смайлики 🎲🎉 делают клавиатуры более привлекательными и понятными.
2. Как добавить больше кнопок на клавиатуру?
🔶 Используйте метод add() объекта клавиатуры. Например: mm.add(button1, button2, button3).
3. Можно ли сделать кнопки клавиатуры разного размера?
🔶 К сожалению, PyTelegramBotAPI не предоставляет такой возможности.
Полезные советы
🔶 Используйте понятные и лаконичные названия для кнопок.
🔶 Не перегружайте клавиатуру слишком большим количеством кнопок.
🔶 Тестируйте работу бота на разных устройствах, чтобы убедиться, что клавиатуры отображаются корректно.
Выводы
Клавиатуры – мощный инструмент для создания интерактивных и удобных Telegram-ботов. Используйте знания, полученные в этой статье, чтобы улучшить функционал вашего бота и сделать его более привлекательным для пользователей. В следующей части мы рассмотрим работу с базами данных и научимся отправлять emoji 🎲(костей) с нужным нам числом. Оставайтесь на связи! ✨