Найти в Дзене
Михаил Гок

Кнопки в телеграм-ботах

Это статья из серии о телеграм-ботах. Я по частям расскажу о важных моментах в pytelegrambotapi. Сразу полезная информация: я начал учиться делать ботов по этой статье и всем ее рекомендую. Нужен хостинг для сайта? Рекомендую timeweb. У них также есть облачные и выделенные сервера. Виды Кнопки в телеграм бывают двух видов - inline и обычные (reply). Обычные Обычные вы видите вместо клавиатуры, все, что они делают, как правило, - отправляют текстовое сообщение боту. Но, перед тем, как сделать кнопку, нужно создать клавиатуру. Для обычных кнопок она одна, для inline другая, вот обычная: keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=False, one_time_keyboard=True) Параметры: resize_keyboard: bool - необязательный | будет ли клавиатура растягиваться (по умолчанию: без значения) one_time_keyboard: bool - необязательный \ разовая ли клавиатура (по умолчанию: без значения) selective: bool - необязательный | кому показывать (по умолчанию: без значения) row_width: int - об
Оглавление

Это статья из серии о телеграм-ботах. Я по частям расскажу о важных моментах в pytelegrambotapi. Сразу полезная информация: я начал учиться делать ботов по этой статье и всем ее рекомендую.

Нужен хостинг для сайта? Рекомендую timeweb. У них также есть облачные и выделенные сервера.

Виды

Кнопки в телеграм бывают двух видов - inline и обычные (reply).

Обычные

Обычные вы видите вместо клавиатуры, все, что они делают, как правило, - отправляют текстовое сообщение боту.

обычные кнопки
обычные кнопки

Но, перед тем, как сделать кнопку, нужно создать клавиатуру. Для обычных кнопок она одна, для inline другая, вот обычная:

keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=False, one_time_keyboard=True)

Параметры:

resize_keyboard: bool - необязательный | будет ли клавиатура растягиваться (по умолчанию: без значения)

one_time_keyboard: bool - необязательный \ разовая ли клавиатура (по умолчанию: без значения)

selective: bool - необязательный | кому показывать (по умолчанию: без значения)

row_width: int - обязательный | количество столбцов кнопок (по умолчанию: 3)

input_field_placeholder: str - необязательный | заменяет текст-заглушку в поле ввода (по умолчанию: без значения)

Создав клавиатуру, создадим к ней кнопку:

stop = types.KeyboardButton(text='отмена ❌')

text: str - обязательный | текст кнопки. Если указан только он, то кнопка будет просто отправлять текст при нажатии.

request_contact: bool - необязательный | если указан как true то пользователь при нажатии отправит свой контакт. Доступен только в приватных чатах.

request_location: bool - необязательный | если указан как true, то пользователь при нажатии отправит свою локацию. Доступен только в приватных чатах.

request_poll: bool - необязательный | если указан как true, то пользователь при нажатии отправит свою локацию. Доступен только в приватных чатах.

web_app: WebAppInfo - необязательный | если указан как true, то при нажатии откроется страница указанного веб-приложения - про это есть отдельная статья. Доступен только в приватных чатах.

После создания кнопки ее нужно добавить в клавиатуру вот так:

keyboard.add(stop)

И далее дать эту клавиатуру пользователю с сообщением:

bot.send_message(message.chat.id, 'Клавиатура с одной кнопкой, reply_markup=keyboard)
  • Отправить можно только одну клавиатуру за раз
  • Это актуально для всех типов клавиатур.

Inline

Inline-кнопки вы видите под сообщением.

Inline-кнопки
Inline-кнопки

Клавиатура для них делается вот так:

keyboard = types.InlineKeyboardMarkup(row_width=2)

у нее только один параметр:

row_width: int - обязательный | количество столбцов кнопок (по умолчанию: 3)

Теперь делаем кнопку:

add = types.InlineKeyboardButton(text="Принять ✅", callback_data = str({'user_id': user_id, 'add': '1'}))

inline-кнопки бывают нескольких видов.

1) Отправляющие данные. В кнопке записаны какие-то данные в формате строки. При нажатии их можно отловить и среагировать на них.

2) Ссылки - просто открывают сайт в вашем браузере.

3) WebApp - открывают веб-приложение в отдельном окне, опять-таки у меня есть статья об этом.

Есть и другие виды. Можете посмотреть актуальные по ссылке.

Рассмотрим самый часто используемый - отправляющий данные.

Чтобы создать такую нам нужно указать просто текст и данные в виде строки. А чтобы отловить это действие и получить данные нужно сделать следующее:

@bot.callback_query_handler(func=lambda call: True) //вешаем обработчик событий на нажатие всех inline-кнопок
def callback_inline(call):
if call.data: //проверяем есть ли данные если да, далаем с ними что-то.

Вот и все, мы выяснили какие бывают основные кнопки и как ими пользоваться.

Нужен хостинг для сайта? Рекомендую timeweb. У них также есть облачные и выделенные сервера.

Успехов и всего доброго 🤟