Как создать кнопку в Телеграмм боте python

Доброго времени дня и ночи, мой дорогой читатель. Пожалуй, мне бы стоило поздравить тебя с наступившим новым годом, но нет, прости, я не особо склонен ко всякого рода поздравлением. Не будем отходить от темы — полгода назад я написал статью о том, как создать своего самого первого робота в Telegram на Python3 и запустить его.

С тех пор прошло довольно много времени, несколько раз обновлялся Telegram Bot API, и сегодня я решил продолжить свой рассказ о создании своего робота.

Вступление

Для начала немного информации для общего развития — о том, что такое клавиатура в боте и для чего она нужна.

Когда мы впервые запускаем любого бота, мы используем кнопку Start (Запуск), затем можем продолжить общение с ботом посредством команд или любых других текстовых сообщений.

По правде гениальные разработчики Telegram решили пойти дальше и предложили создателям ботов использовать так называемые клавиатуры для роботов — эти клавиатуры заменяют обычные текстовые устройства ввода на телефонах и отображаются под полем для ввода сообщения.

Telegram Bot PYTHON [ 2 ] | Команды и кнопки (Inline, Reply)

Клавиатура в боте.

Что происходит, когда мы нажимаем кнопки под полем для ввода сообщения? Ничего сложного — лишь отправляется тот текст, который мы видим на кнопке. То есть нажатие на Настройки приведёт к отправке сообщения с текстом Настройки от твоего имени к боту и только.

Далее робот просто обрабатывает полученный им текст. Никакой магии. Знаю по своему опыту, что очень любят код (вру, не все) — поэтому сейчас мы приступим к его написанию.

Полагаю, прочитав мою предыдущую запись, ты сможешь установить и настроить Python3, а также создать самого простого бота, отвечающего на команду /start .

Пишем код

Создадим простого бота, который при запуске будет здороваться с пользователем. Кода, как на картинке ниже, будет вполне достаточно:

Простой бот.

Теперь определимся с тем, что будет делать наш робот.

Сделаем так: сразу после запуска бот должен отобразить пользователю клавиатуру с двумя кнопками — Шерлок Холмс и Доктор Ватсон .

Отправимся в функцию start нашего простого бота и изменим её следующим образом:

Помимо всего прочего нужно добавить from telebot import types в начало нашего файла с роботом.

Теперь объясню, что вообще здесь происходит ?

  1. С помощью types.ReplyKeyboardMarkup() мы создаём объект нашей будущей клавиатуры, в скобках прописываются нужные параметры. resize_keyboard=True позволяет клавиатуре растягиваться на необходимую высоту вместо того, чтобы занимать всё пространство.
  2. С помощью .add() мы добавляем кнопки в нашу клавиатуру. types.KeyboardButton() представляет собой объект самой кнопки, а в скобках указывается текст на ней. В коде выше я наполняю объект нашей клавиатуры объектами кнопок, заполняя их из списка [‘Шерлок Холмс’, ‘Доктор Ватсон’] (полагаю, меня крайне сложно понять сейчас, это нормально, советую прочитать статью про списки и for ).
  3. Последнее, что нужно сделать — привязать нашу клавиатуру к нужному сообщению, делается это при помощи параметра reply_markup в любом методе send_. .

Можно сохранить код и запустить робота.

Простая клавиатура.

Как видно, под полем для текста появились две заветные кнопки. Что дальше? Теперь нужно научить нашего робота обрабатывать сообщения, отправляемые ему после нажатия на кнопки.

Добавляем обработчики.

Рассмотрим мой код выше. В функции start мы используем метод register_next_step_handler для того, чтобы следующее сообщение от нашего пользователя сразу попало бы в обработчик name (который указан вторым параметром; первый — объект отправленного нами сообщения).

В функции name мы обработаем ответ пользователя — отправим сообщения о Шерлоке Холмсе и Докторе Ватсоне.

Функция “name”.

На картинке выше я добавил сообщения, которые будут отправляться пользователю после нажатия на любую из кнопок.

Сохраним файл с нашим роботом и запустим его, не забыв заново отправить команду /start (старые кнопки уже не сработают).

Ответ бота.

Вот так бот ответит нам на нажатие на кнопку. Но замечу, что повторное нажатие ни к чему не приведет, поскольку только после команды /start бот будет проверять текст сообщения на наличие Шерлока Холмса и Доктора Ватсона.

Подведём итог: клавиатуры позволяют отправлять целые сообщения по одному лишь нажатию пользователя. В кнопки можно записывать любые текстовые фразы, даже содержащие в себе Emoji. ?

После отправки бот должен обработать полученную фразу, причем неважно, как именно.

Отмечу, что у пользователя всегда есть остаётся возможность отправить сообщение при помощи обычной клавиатуры.

Ещё хочу добавить, что для объекта кнопки есть два интересных параметра, принимающих логические значения — request_contact и request_location . Первый запрашивает телефонный номер пользователя, а второй его местоположение. Узнать больше о параметрах и возможностях клавиатуры можно в официальной документации Telegram Bot API. Думаю, на этом часть с клавиатурами можно закончить.

Inline-режим

Так называемый Inline-режим появился у роботов в апреле прошлого года. Предлагаю для начала рассмотреть суть его работы. ?

Есть два варианта использования Inline: первый — в самом боте , в сообщениях, отправляемых ботом; второй — вне бота , где-нибудь в произвольном чате, начав набирать логин бота в поле для текстового сообщения.

Сегодня я хочу рассказать про первый вариант Inline-режима. С помощью него можно прикреплять Inline-кнопки к сообщениям, которые отправляются ботом.

То есть под каждым сообщением могут быть различные кнопки, выполняющие самую разнообразную работу. Например, в популярных каналах нередко используют лайки, реализованные как раз при помощи Inline-кнопок.

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

Внесем некоторые изменения в наш код. Теперь нашей целью будет отредактировать сообщение после нажатия на кнопку.

Да-да, Inline-кнопки способны редактировать уже отправленные нашим роботом сообщения. ?

Используем Inline-кнопки.

По порядку рассказываю, что здесь творится. ?

Сохраним наш код и запустим робота. Отправим команду /start и попробуем нажать на любую из кнопок.

Как видно, текст сообщения от бота изменился после нажатия на кнопку.

Редактируем сообщение в Inline-режиме.

Вместо callback_data можно также указать url — любой URL адрес; по нажатию на такую кнопку пользователь перейдёт в браузер.

На самом деле Inline-кнопки способны почти на всё — с помощью них можно даже отправлять обычные сообщения. Все функции и возможности описаны в Telegram Bot API. Пожалуй, это всё, что я хотел рассказать тебе о первых шагах в Inline.

А теперь небольшой подарок для всех читателей моего блога — ниже я оставлю код и описание простого бота, с помощью которого можно читать книгу в формате .txt в одном-единственном сообщении ?

Робот для чтения книги ?

По команде /start этот робот отправляет первую страницу — на каждой странице по 700 символов из книги.

Бот для чтения.

С помощью стрелок ⬅️ и ➡️ можно листать страницы — текст сообщения будет изменяться вырезками по 700 символов.

Страницы книги в одном сообщении.

Ниже я оставляю тебе код этого бота — чтобы запустить, достаточно положить рядом с ботом любую книгу в формате .txt

Источник: messagu.ru

Делаем кнопки в телеграмме на python

В этой главе мы познакомимся с такой замечательной фичей Telegram-ботов, как кнопки. Прежде всего, чтобы избежать путаницы, определимся с названиями. То, что цепляется к низу экрана вашего устройства, будем называть обычными кнопками, а то, что цепляется непосредственно к сообщениям, назовём инлайн-кнопками. Ещё раз картинкой:

Обычные кнопки
Кнопки как шаблоны
Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже).
Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.

Напишем хэндлер, который будет при нажатии на команду /start отправлять сообщение с двумя кнопками:

Обратите внимание, что т.к. обычные кнопки суть шаблоны сообщений, то их можно создавать не только как объекты KeyboardButton, но и как обычные строки.
Что ж, запустим бота и обалдеем от громадных кнопок:

Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный параметр resize_keyboard=True.
Но как заменить вертикальные кнопки на горизонтальные? С точки зрения Bot API, клавиатура — это массив массивов кнопок, а если говорить проще, массив строк.
Метод add() при каждом вызове создаёт новую строку (ряд) и принимает произвольное число аргументов по количеству желаемых кнопок в строке. Перепишем наш код, чтобы было красиво:

Обратите внимание на конструкцию *buttons. Здесь вам не C++ и звёздочка используется для распаковки списка. Подробнее об операторах * и ** можно прочитать здесь .

Смотрим — действительно красиво:

Осталось научить бота реагировать на нажатие таких кнопок.
Как уже было сказано выше, необходимо делать проверку на полное совпадение текста.
Сделаем это двумя способами: через специальный фильтр Text и обычной лямбдой:

Чтобы удалить кнопки, необходимо отправить новое сообщение со специальной «удаляющей» клавиатурой типа ReplyKeyboardRemove.
Например: await message.reply(«Отличный выбор!», reply_markup=types.ReplyKeyboardRemove())

У объекта обычной клавиатуры есть ещё две полезных опции: one_time_keyboard для скрытия кнопок после нажатия и selective для показа клавиатуры лишь некоторым участникам группы.
Их использование остаётся для самостоятельного изучения.

Помимо стандартных опций, описанных выше, aiogram немного расширяет функциональность клавиатур параметром row_width.
При его использовании, фреймворк автоматически разобьёт массив кнопок на строки по N элементов в каждой, где N — значение row_width, например, row_width=2. Попробуйте!

Специальные обычные кнопки
По состоянию на конец ужасного 2020 года в Telegram существует три специальных вида обычных кнопок, не являющихся шаблонами: для отправки текущей геолокации, для отправки своего номера телефона и ярлык для создания опроса/викторины. Для первых двух типов достаточно установить булевый флаг, а для опросов и викторин нужно передать специальный тип KeyboardButtonPollType и, по желанию, указать тип создаваемого объекта.

Впрочем, проще один раз увидеть код:

URL-кнопки и колбэки мы рассмотрим в другом посте если Вам зайдет такие статьи

Источник: teletype.in

Встроенные кнопки в Telegram Bot API

Встроенные кнопки в Telegram Bot API

2017-08-18 в 7:10, admin , рубрики: python, telegram, telegram api, telegram bots, Системы обмена сообщениями

Добрый день уважаемые читатели, давайте рассмотрим, какие основные типы встроенных кнопок предлагают чат-боты telegram и в чем их особенности. Статья будет полезна всем, кто хочет разобраться в возможностях взаимодействия с пользователями telegram в версии bot API 2.0.

Для обзора возможностей нам понадобится установить 3 целых 2 десятых Python`a и пару ложек pyTelegramBotAPI. Особенности настройки и регистрации чат-бота мы рассматривать не будем, т.к. есть множество статей на эту тему.

И так, что же такое встроенные кнопки(клавиатура) в мессенджере Telegram? Это кнопки которые выводятся во внутренней области чата и привязываются к конкретному сообщению. Они жестко связаны с сообщением(если удалить сообщение, внутренние кнопки так же удаляются вместе с ним.), и дают возможность динамически видоизменять его.

  • URL-кнопки
  • Callback-кнопки
  • Switch-кнопки

URL-кнопки

Встроенные кнопки в Telegram Bot API - 1

Для создания кнопки используется тип InlineKeyboardMarkup, давайте создадим кнопку «Наш сайт»:

markup = types.InlineKeyboardMarkup() btn_my_site= types.InlineKeyboardButton(text=’Наш сайт’, url=’https://habrahabr.ru’) markup.add(btn_my_site) bot.send_message(chat_id, «Нажми на кнопку и перейди на наш сайт.», reply_markup = markup)

Тут название говорит само за себя, это тип кнопок предназначен для перенаправления пользователя по ссылке, с соответствующим предупреждением. Кнопка имеет соответствующий ярлычок в правом верхнем углу, чтобы дать понять пользователю, что это ссылка.

Switch-кнопки

Встроенные кнопки в Telegram Bot API - 2

Шаг 1:

Нажимаем на кнопку.

Встроенные кнопки в Telegram Bot API - 3

Шаг 2:

Выбираем чат.

Встроенные кнопки в Telegram Bot API - 4

Шаг 3:

Активировался встроенные режим, можем по смайлику подобрать стикер.

Callback-кнопки

Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне.

Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки:

Встроенные кнопки в Telegram Bot API - 5

Так же можно добавить уведомление по нажатию на дату, для этого достаточно указать сообщение в ответе:

bot.answer_callback_query(call.id, text=»Дата выбрана»)

Встроенные кнопки в Telegram Bot API - 6

(Пример в десктопной версии)

Встроенные кнопки в Telegram Bot API - 7

(Пример в мобильной версии)

Если изменить show_alert на True, то мы получим модальное окно:

bot.answer_callback_query(call.id, show_alert=True, text=»Дата выбрана»)

Встроенные кнопки в Telegram Bot API - 8

Заключение

По последним данным, в нашумевшем мессенджере Telegram регистрируются больше 600к пользователей ежедневно. Именно поэтому важно подхватить тренд и разобраться с его основными особенностями, т.к. различные методы взаимодействия с ботами существенно облегчает жизнь разработчиков и пользователей.

Встроенные кнопки в Telegram Bot API - 9

Cпасибо за Ваш интерес к данной теме.

Источник: www.pvsm.ru

Оцените статью
Добавить комментарий