Создание кнопок для телеграмм бота с использованием библиотеки pyTelegramBotAPI
Доброго времени суток. Телеграмм — божественный месседж скаченный у каждого на телефонах/компьютерах и не только. После прочтение этой статьи вы научитесь создавать кнопки для вашего телеграмм бота. Желаю удачи, в прочтении!)
Предупреждение
Забыл предупредить, в этой статье не будет сказано о создание бота, получение токена через BotFather. Для этого прочитайте документацию библиотеки или посмотрите ролики на эту тему в ютубе(Для удобство ссылку на документацию на русском языке библиотеки pyTelegramBotAPI оставлю в описании). И так, вернемся к теме.
Создание url кнопки
Url кнопки используются, когда хотим создать кнопку при клике которой, пользователь переходил на сайт. Пример:
нажима на «перейти», телеграмм перекинет его на сайт, который вы оставили при создание url кнопки, но как же собственно создать? Легко!
import telebot from telebot import types # для указание типов import config bot = telebot.TeleBot(config.token) # токен лежит в файле config.py @bot.message_handler(commands=['start']) #создаем команду def start(message): markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("Сайт Хабр", url='https://habr.com/ru/all/') markup.add(button1) bot.send_message(message.chat.id, "Привет, ! Нажми на кнопку и перейди на сайт)".format(message.from_user), reply_markup=markup)kup) bot.polling(none_stop=True)
при создание url-кнопки используется тип InlineKeyboardMarkup, в который мы добавляем кнопку и с помощью reply_markup=markup выводим это в чат(обязательно не забудьте указать это, иначе ваша кнопка просто не будете отображаться).
Создание Reply кнопки
Я не знаю как корректно называются кнопки использующие тип ReplyKeyboardMarkup, но я много практиковался в их создание и покажу вам, как это делается. Вот пример Reply кнопок:
import telebot from telebot import types # для указание типов import config bot = telebot.TeleBot(config.token) @bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("👋 Поздороваться") btn2 = types.KeyboardButton("❓ Задать вопрос") markup.add(btn1, btn2) bot.send_message(message.chat.id, text="Привет, ! Я тестовый бот для твоей статьи для habr.com".format(message.from_user), reply_markup=markup) @bot.message_handler(content_types=['text']) def func(message): if(message.text == "👋 Поздороваться"): bot.send_message(message.chat.id, text="Привеет.. Спасибо что читаешь статью!)") elif(message.text == "❓ Задать вопрос"): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("Как меня зовут?") btn2 = types.KeyboardButton("Что я могу?") back = types.KeyboardButton("Вернуться в главное меню") markup.add(btn1, btn2, back) bot.send_message(message.chat.id, text="Задай мне вопрос", reply_markup=markup) elif(message.text == "Как меня зовут?"): bot.send_message(message.chat.id, "У меня нет имени..") elif message.text == "Что я могу?": bot.send_message(message.chat.id, text="Поздороваться с читателями") elif (message.text == "Вернуться в главное меню"): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) button1 = types.KeyboardButton("👋 Поздороваться") button2 = types.KeyboardButton("❓ Задать вопрос") markup.add(button1, button2) bot.send_message(message.chat.id, text="Вы вернулись в главное меню", reply_markup=markup) else: bot.send_message(message.chat.id, text="На такую комманду я не запрограммировал..") bot.polling(none_stop=True)
И так. Что бы создать Replay кнопку, нужно создать переменную, я назвал ее markup(9 строчка кода) в нее помещаем types.ReplyKeyboardMarkup(resize_keyboard=True). Resize_keybord=True выполняет функцию адаптации(я всегда указываю и вам советую тоже).После этого мы создаем переменную уже с самими кнопками и их текстом(10, 11 строчка) и затем добавляем эти переменные коммандой markup.add(__имя ваших переменных__). Коммандой bot.send_message(message.chat.id, text=»Привет, ! Я тестовый бот для твоей статьи для habr.com».format(message.from_user), reply_markup=markup) и обязательно не забывайте добавлять reply_markup=markup, иначе просто кнопки не будут отображаться.
Заключение
Большое спасибо вам за прочтение. Не судите строго, это моя первая статья, рассказал я скорее всего не очень, и только поверхностно. Если хотите углубиться в эту тему, почитайте документацию, кстати, вот документация по pyTelegramBotAPI на русском:
- https://github-com.translate.goog/eternnoir/pyTelegramBotAPI?_x_tr_sl=auto&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=nui при переходе вниз скролите и вы увидите документацию. пишите комменты с отзывами, буду рад их прочитать.
- Мой телеграмм канал: https://t.me/it_diaryy
Встроенные кнопки в Telegram Bot API — pyTelegramBotAPI
Добрый день уважаемые читатели, давайте рассмотрим, какие основные типы встроенных кнопок предлагают чат-боты telegram и в чем их особенности. Статья будет полезна всем, кто хочет разобраться в возможностях взаимодействия с пользователями telegram в версии bot API 2.0.
Для обзора возможностей нам понадобится установить 3 целых 2 десятых Python`a и пару ложек pyTelegramBotAPI. Особенности настройки и регистрации чат-бота мы рассматривать не будем, т.к. есть множество статей на эту тему.
И так, что же такое встроенные кнопки(клавиатура) в мессенджере Telegram? Это кнопки которые выводятся во внутренней области чата и привязываются к конкретному сообщению. Они жестко связаны с сообщением(если удалить сообщение, внутренние кнопки так же удаляются вместе с ним.). Они дают возможность динамически видоизменять его.
В данный момент есть три типа встроенных кнопок:
URL-кнопки
Для создания кнопки используется тип InlineKeyboardMarkup, давайте создадим кнопку «Наш сайт»:
@bot.message_handler(commands = ['url']) def url(message): markup = types.InlineKeyboardMarkup() btn_my_site= types.InlineKeyboardButton(text='Наш сайт', url='https://habrahabr.ru') markup.add(btn_my_site) bot.send_message(message.chat.id, "Нажми на кнопку и перейди на наш сайт.", reply_markup = markup)
Тут название говорит само за себя, это тип кнопок предназначен для перенаправления пользователя по ссылке, с соответствующим предупреждением. Кнопка имеет соответствующий ярлычок в правом верхнем углу, чтобы дать понять пользователю, что это ссылка.
Switch-кнопки
Этот тип кнопок предназначен для перенаправления пользователя в какой либо чат, с последующей активацией (встроенного) inline-режима общения с ботом. Данный режим можно активировать вручную: в чате, вводим: «@название бота», но switch-кнопки позволяют это сделать автоматически (помогая знакомиться с inline-режимом новичкам).
Для того что-бы создать подобный переключатель, необходимо указать аргумент switch_inline_query либо пустой, либо с каким-либо текстом.
@bot.message_handler(commands = ['switch']) def switch(message): markup = types.InlineKeyboardMarkup() switch_button = types.InlineKeyboardButton(text='Try', switch_inline_query="Telegram") markup.add(switch_button) bot.send_message(message.chat.id, "Выбрать чат", reply_markup = markup)
Теперь, если мы нажмем на кнопку и выберем чат, вот что получится:
Шаг 1:
Нажимаем на кнопку.
Шаг 2:
Выбираем чат.
Шаг 3:
Активировался встроенный inline-режим.
Callback-кнопки
Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне.
Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки:
@bot.message_handler(commands=['calendar']) def get_calendar(message): now = datetime.datetime.now() #Текущая дата chat_id = message.chat.id date = (now.year,now.month) current_shown_dates[chat_id] = date #Сохраним текущую дату в словарь markup = create_calendar(now.year,now.month) bot.send_message(message.chat.id, "Пожалйста, выберите дату", reply_markup=markup)
Так же можно добавить уведомление по нажатию на дату, для этого достаточно указать сообщение в ответе:
bot.answer_callback_query(call.id, text="Дата выбрана")
(Пример в десктопной версии)
(Пример в мобильной версии)
Если изменить show_alert на True, то мы получим модальное окно:
bot.answer_callback_query(call.id, show_alert=True, text="Дата выбрана")
Заключение
По последним данным, в нашумевшем мессенджере Telegram регистрируются больше 600к пользователей ежедневно. Именно поэтому важно подхватить тренд и разобраться с его основными особенностями, т.к. различные методы взаимодействия с ботами существенно облегчает жизнь разработчиков и пользователей.
Cпасибо за Ваш интерес к данной теме.