Пишем Telegram-бота на Python: Полное руководство по созданию клавиатур (часть 2) 💻

В первой части мы разобрали основы создания 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 🎲(костей) с нужным нам числом. Оставайтесь на связи! ✨

Leave a Reply