Keyboa: клавиатуры на максималках для ботов в Telegram

Введение

В начале апреля 2016 года вышло первое по-настоящему крупное обновление API для ботов. Изменений довольно много, поэтому материал я разобью на несколько частей. Сегодня поговорим об inline-кнопках и редактировании сообщений, а затем обсудим новые инлайн-режимы вместе со специальными кнопками для отправки геолокации и номера телефона.

Новые возможности

Начнём с двух важных изменений:

  1. Каждая кнопка, будь то обычная или инлайн, это теперь самостоятельный объект KeyboardButton или InlineKeyboardButton, не забудьте обновить своих ботов!
  2. В Inline-режиме все текстовые поля теперь представлены отдельными объектами InputMessageContent, которые, в свою очередь могут быть аж 4-х типов (подробности тут).

URL-кнопки

Итак, инлайн-кнопки. Что это такое? Это специальные объекты, которые “цепляются” к конкретным сообщениям и распространяют своё действие, в общем случае, только на них. Делятся такие кнопки на три типа: URL-кнопки, Callback-кнопки и Switch-кнопки. Самыми простыми являются кнопки-ссылки (URL). Как видно из названия, их цель – просто перекидывать пользователей по определенным веб-адресам. Давайте сразу напишем обработчик, который будет на любое сообщение отвечать каким-либо текстом и предложением перейти, например, на Яндекс.

@bot.message_handler(content_types=["text"]) def default_test(message):     keyboard = types.InlineKeyboardMarkup()     url_button = types.InlineKeyboardButton(text="Перейти на Яндекс", url="https://ya.ru")     keyboard.add(url_button)     bot.send_message(message.chat.id, "Привет! Нажми на кнопку и перейди в поисковик.", reply_markup=keyboard) 

Инлайн-клавиатура представляет собой объект InlineKeyboardMarkup, а каждая инлайн-кнопка – это объект InlineKeyboardButton. Чтобы получилась URL-кнопка, нужно указать значения параметров text (текст на кнопке) и url (валидный веб-адрес). В результате бот пришлет нам такое сообщение (см. рис.). В целях обеспечения безопасности, перед переходом по URL-кнопкам появляется всплывающее окно, в котором видна ссылка целиком.

l8_1.png

URL-кнопка

Callback-кнопки и редактирование сообщений

Прежде, чем мы перейдем к другим кнопкам, давайте познакомимся с функциями редактирования сообщений, коих тоже три: editMessageText (редактирование текста), editMessageCaption (редактирование подписи к медиа) и editMessageReplyMarkup (редактирование инлайн-клавиатуры). В рамках этого урока рассмотрим только первую функцию, остальные работают аналогично и предлагаются для самостоятельного изучения.Чтобы отредактировать сообщение, нам надо знать, про какое именно идёт речь. В случае, если оно было отправлено самим ботом, идентификаторами служит связка chat_id + message_id. Но если сообщение было отправлено в инлайн-режиме, то ориентироваться надо по параметру inline_message_id.

И вот теперь вернемся к нашим баранам кнопкам. На очереди – Callback. Это, на мой взгляд, самая крутая фича нового обновления. Колбэк-кнопки позволяют выполнять произвольные действия по их нажатию. Всё зависит от того, какие параметры каждая кнопка в себе несёт. Соответственно, все нажатия будут приводить к отправке боту объекта CallbackQuery, содержащему поле data, в котором написана некоторая строка, заложенная в кнопку, а также либо объект Message, если сообщение отправлено ботом в обычном режиме, либо поле inline_message_id, если сообщение отправлено в инлайн-режиме.

Приведу пример, после которого все вопросы должны отпасть: пусть, например, если сообщение отправлено ботом в обычном режиме, то нажатие на кнопку заменит текст сообщения на “Пыщь”, если в инлайн – то “Бдыщь”. При этом в обоих случаях значение callback_data будет равно test. Что для этого нужно сделать: во-первых, написать простейший хэндлер для всех входящих сообщений, во-вторых, написать простейший хэндлер для инлайн-сообщений, в-третьих, написать простейший хэндлер для колбэка, который определит, из какого режима пришло сообщение.

# Обычный режим @bot.message_handler(content_types=["text"]) def any_msg(message):     keyboard = types.InlineKeyboardMarkup()     callback_button = types.InlineKeyboardButton(text="Нажми меня", callback_data="test")     keyboard.add(callback_button)     bot.send_message(message.chat.id, "Я – сообщение из обычного режима", reply_markup=keyboard)   # Инлайн-режим с непустым запросом @bot.inline_handler(lambda query: len(query.query) > 0) def query_text(query):     kb = types.InlineKeyboardMarkup()     # Добавляем колбэк-кнопку с содержимым "test"     kb.add(types.InlineKeyboardButton(text="Нажми меня", callback_data="test"))     results = []     single_msg = types.InlineQueryResultArticle(         id="1", title="Press me",         input_message_content=types.InputTextMessageContent(message_text="Я – сообщение из инлайн-режима"),         reply_markup=kb     )     results.append(single_msg)     bot.answer_inline_query(query.id, results)   # В большинстве случаев целесообразно разбить этот хэндлер на несколько маленьких @bot.callback_query_handler(func=lambda call: True) def callback_inline(call):     # Если сообщение из чата с ботом     if call.message:         if call.data == "test":             bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Пыщь")     # Если сообщение из инлайн-режима     elif call.inline_message_id:         if call.data == "test":             bot.edit_message_text(inline_message_id=call.inline_message_id, text="Бдыщь")  if __name__ == '__main__':     bot.infinity_polling() 

Запускаем бота, отправляем инлайн-сообщение, которое, в свою очередь, вызовет обычное:

l8_2.png

Нажмем на обе кнопки, результат правильный:

l8_3.png

После проверки

Таким образом, callback-кнопки – это очень мощный инструмент для взаимодействия пользователей с ботом, а редактирование сообщений дополнительно помогает в этом. Более того, нажатие на колбэк-кнопку может дополнительно тригернуть либо уведомление в верхней части экрана, либо всплывающее окно. Покажу первый вариант. Пускай помимо изменения сообщения на “Пыщь”, аналогичное слово показывается уведомлением. Для этого перепишем первое if-условие в хендлере колбэков:

if call.message:     if call.data == "test":         bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Пыщь")         bot.answer_callback_query(callback_query_id=call.id, show_alert=False, text="Пыщь!") 

Результат – на скриншоте. Попробуйте, кстати, изменить аргумент show_alert на True и посмотрите, что получится.

l8_4.png

Всплывающее уведомление

Switch-кнопки

Наконец, остался последний тип кнопок – Switch (переключатель). Они нужны, чаще всего, для обучения пользователей работе с ботом в инлайн-режиме. Чтобы активировать сделать кнопку такого типа, нужно указать аргумент switch_inline_query либо пустой, либо с каким-либо текстом. В последнем случае этот текст будет сразу подставлен в поле ввода, например, для показа демонстрации инлайна. Как вообще работает такая кнопка? При нажатии на неё Telegram предложит выбрать чат, после чего подставит в поле ввода ник вашего бота и (если есть), текст, указанный вами в аргументе switch_inline_query. Давайте попробуем так сделать. Добавим кнопку, которая будет перенаправлять пользователя в какой-либо чат и предлагать в инлайн-режиме запрос “Telegram”. Код всего хендлера выглядит вот так:

@bot.message_handler(content_types=["text"]) def any_msg(message):     keyboard = types.InlineKeyboardMarkup()     switch_button = types.InlineKeyboardButton(text="Нажми меня", switch_inline_query="Telegram")     keyboard.add(switch_button)     bot.send_message(message.chat.id, "Я – сообщение из обычного режима", reply_markup=keyboard) 

Теперь, если мы нажмем на кнопку и выберем чат, вот что получится:

l8_5.png

Результат

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

← Урок №7Урок №9 →

2c1483a760ab3fbe772598e0866397d8.png

Боты – одна из особенностей Telegram, сделавших мессенджер столь популярным. А его встроенные клавиатуры дают разработчикам большую свободу взаимодействия с пользователями.

Keyboa помогает создавать встроенные клавиатуры любой сложности для ботов, разработанных на базе pyTelegramBotAPI.

В этой статье рассмотрим базовые возможности модуля – создание клавиатур из разных наборов данных, автоматическое и ручное распределение кнопок по рядам, объединение нескольких клавиатур в одну. Научимся создавать сложные, динамические callback, сохраняя в них информацию о выборе пользователя.

Статья рассчитана на тех, кто знает основы Telegram Bot API и хотя бы немного знаком с фреймворком pyTelegramBotAPI.

Модуль требует > Python 3.5 и ставится через pip:

pip install keyboa

В официальной документации Telegram объект inline_keyboard определен как массив, состоящий из массивов кнопок (Array of Array of InlineKeyboardButton). То есть основной массив (список) – это клавиатура в целом, а его элементы (вложенные списки) – это ряды кнопок. Не переживайте, если определение кажется сложным – позже мы разберём его на простом примере.

Предположим, что сам бот у нас уже настроен:

import os from telebot import TeleBot from keyboa import keyboa_maker  token = os.environ["TELEGRAM_BOT_TOKEN"] uid = os.environ["TELEGRAM_USER_ID"]  bot = TeleBot(token=token)

Создаём клавиатуру

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

fruits = [   "banana", "coconut", "orange",   "peach", "apricot", "apple",   "pineapple", "avocado", "melon" ]

Создадим самую простую клавиатуру, в которой каждый элемент встанет на отдельный ряд:

kb_fruits = keyboa_maker(items=fruits, copy_text_to_callback=True)

Всё, что потребовалось – передать список в items. Оставить пустой сallback_data (ответную часть кнопки) мы не можем, ведь иначе не узнаем, что нажал пользователь. Поэтому добавляем текст каждой кнопки в её callback_data, устанавливая параметр copy_text_to_callback.

Отправим сообщение пользователю:

bot.send_message(   chat_id=uid, reply_markup=kb_fruits,   text="Please select one of the fruit:")
696677f0981ad542e009e81201845dc4.png

Распределяем кнопки по рядам

Разместить несколько кнопок в ряд можно любым из трёх способов.

Указать количество кнопок в ряду

Определите параметр items_in_row, чтобы задать количество кнопок в ряду. Их число должно быть от одного до восьми. Больше кнопок нам не позволит добавить сам Telegram.

Создадим клавиатуру и отправим обновлённое сообщение:

kb_fruits = keyboa_maker(items=fruits, copy_text_to_callback=True, items_in_row=3)  bot.send_message(   chat_id=uid, reply_markup=kb_fruits,   text="Please select one of the fruit:")

Использовать автоподбор

Если клавиатура создается динамически, мы не всегда знаем, сколько в ней окажется кнопок. Чтобы автоматически равномерно распределить их по рядам, установите параметр auto_alignment. Если выставить True, Keyboa попробует подобрать делитель в диапазоне от трёх до пяти, а можно задать свой диапазон в виде списка чисел от одного до восьми, например, [2, 3, 7].

Параметр reverse_alignment_range определяет, будет ли Keyboa искать делитель с начала или с конца диапазона, указанного в auto_alignment.

Распределить кнопки вручную

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

fruitscomplex = [   "banana",   ["coconut", "orange"],   ["peach", "apricot", "apple"],   "pineapple",   ["avocado", "melon"], ]  kb_fruits_complex = keyboa_maker(items=fruits_complex, copy_text_to_callback=True)  bot.send_message(   chat_id=uid, reply_markup=kb_fruits_complex,   text="Please select one of the fruit:")

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

Управляем содержимым callback

Мы упоминали, что callback_data – это строка, которую Telegram отправляет вам после нажатия кнопки пользователем. По её содержимому вы можете понять, какая именно кнопка была нажата.

Порой необходимо записать в callback_data дополнительные данные, например, идентификатор или другие свойства элемента. Чтобы задать кнопкам уникальные callback_data с требуемой информацией воспользуемся списком словарей или списком кортежей.

fruits_with_ids = [   {"banana": "101"}, {"coconut": "102"}, {"orange": "103"},   {"peach": "104"}, {"apricot": "105"}, {"apple": "106"},   {"pineapple": "107"}, {"avocado": "108"}, {"melon": "109"}, ]  # or [ # ("banana", "101"), ("coconut", "102"), ("orange", "103"), # ("peach", "104"), ("apricot", "105"), ("apple", "106"), # ("pineapple", "107"), ("avocado", "108"), ("melon", "109"), ]

В этом случае ключ каждого словаря станет текстом кнопки, а его значение пойдет в callback_data. Для кортежей это будут нулевой и первый элементы соответственно. И поскольку мы явно указываем, что добавить в callback_data, параметр copy_text_to_callback больше не нужен.

kb_fruits = keyboa_maker(items=fruits_with_ids, items_in_row=3)  bot.send_message(   chat_id=uid, reply_markup=kb_fruits, text="Please select one of the fruit:")

Теперь, после нажатия пользователем одной из кнопок, мы получим в ответ не название фрукта, а его id номер, записанный в callback_data.

{"text": "banana", "callback_data": "101"}, ...

Этого достаточно, если мы используем числа только для обозначения фруктовых id. А если нужно принимать разные числовые параметры, например вес или цену? Как определить, к чему относится полученное число?

С Keyboa мы можем явно указать это при создании клавиатуры. Параметр front_markerдобавляет одинаковый текст в начало callback_data каждой кнопки, а back_marker, соответственно, в конец. Рассмотрим на примере:

kb_fruits = keyboa_maker(items=fruits_with_ids, front_marker="&fruit_id=")

Теперь callback_data кнопок будет состоять из текста формата front_marker + value, например: '&fruit_id=101', '&fruit_id=102' и т. д. Такой подход позволит нам легко расшифровать строку и понять, какие получены данные и с какими значениями.

Представим, что на следующем шаге пользователю предлагают выбрать желаемый вес выбранного фрукта:

# коллбек, полученный после нажатия на кнопку, например "&fruit_id=102" selected_fruit_id = call.data  available_weight = [1, 2, 5, 10, 100, ]  kb_available_weight = keyboa_maker( items=available_weight, copy_text_to_callback=True,  front_marker="&weight=", back_marker=selected_fruit_id)

Теперь callback_data каждой кнопки будет выглядеть так:

'&weight=1&fruit_id=102', '&weight=2&fruit_id=102', '&weight=5&fruit_id=102'

Здесь мы используем front_marker и back_marker, чтобы обернуть передаваемое значение, указав тип текущего значения и добавив в callback_data уже полученную информацию. Имейте в виду, что у Telegram есть ограничение на длину callback_data в 64 байта, поэтому, если передаваемых параметров будет много – придётся сокращать названия или использовать аббревиатуры.

Объединение нескольких клавиатур в одну

Иногда в одну клавиатуру могут входить статические и динамические элементы, например, навигационное меню и меняющийся набор элементов. Тогда возникает потребность собрать клавиатуру из нескольких частей. Специально для этого у нас есть функция keyboa_combiner().

У нее есть только один параметр – keyboards, представляющий собой набор уже созданных клавиатур. Вот, как это работает:

from keyboa import keyboa_maker, keyboa_combiner  controls = [["⏹️", "⏪️", "⏏️", "⏩️", "▶️"], ] tracks = list(range(1, 13))  keyboard_controls = keyboa_maker(items=controls, copy_text_to_callback=True) keyboard_tracks = keyboa_maker(items=tracks, items_in_row=4, copy_text_to_callback=True)  keyboard = keyboa_combiner(keyboards=(keyboard_tracks, keyboard_controls))  bot.send_message(   chat_id=uid, reply_markup=keyboard,    text="Please select the track number:")

Можно объединить сразу много клавиатур – главное, чтобы общее количество кнопок было не больше ста. Это ограничение Telegram.

Итог

В этой статье мы кратко рассмотрели создание клавиатур для ботов в Telegram с помощью Keyboa. Больше информации и описание остальных параметров можно найти на странице проекта в Github.

Буду рад вашим отзывам, идеям и конструктивной критике по развитию проекта.

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

Типы встроенных кнопок в Telegram

Клавиатура Telegram, расположенная в ряд в строке под сообщением, подвязывается к каждой конкретной новости и позволяет ее динамически видоизменять. Чтобы их добавлять, используется специальный бот. На сегодняшний день существует 3 типа кнопок. Рассмотрим подробно каждый из них.

URL-кнопки

URL-кнопки в Телеграм.

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

У них есть соответствующий ярлык, расположенный справа экрана в углу.

Switch-кнопки

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

Для создания переключателя указывается «switch_inline_query». Аргумент может оставаться пустым или же иметь какой-то текст.

Callback-кнопки

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

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

Работа с ControllerBot и BotFather

Эти боты позволяют создавать управление собственной записью и ее форматирование.

Юзеры, которые решат их поставить, смогут:

  • добавлять всевозможные реакции к посту (лайки и т.д.);
  • работать с отложенными записями – редактировать их, планировать время размещения;
  • проводить форматирование текста и выставлять анкорные ссылки;
  • изучать статистику по количеству просмотров или новых читателей группы;
  • размещать активные  клавиши, при нажатии на которые происходит подписка, обсуждение с друзьями, предложение поделиться информацией или открытие сторонних ресурсов.

Те, кто знаком с языком программирования питон, могут создать любой bot самостоятельно.

Подключение к каналу и настройка

Рассмотрим порядок работы с ботом на примере Controllerbot. Для начала его нужно создать. Зайдя в @BotFather, необходимо кликнуть на Старт и написать команду /newbot.

Далее алгоритм следующий:

  1. Придумать имя и ввести его.
  2. Скопировать робота, так как он пригодится для подключения или добавления на канал в качестве администратора.
  3. Для настроек в поиске следует отыскать «КонтролерБота».
  4. Прописать  /add и кликнуть по иконке «Подключить».
  5. Осталось только скопировать токен, отправив его роботу. Дополнительно нужно указать @username канала и город, что позволит корректно отражать настройки постинга.

Добавление реакций

Кнопки реакций в Телеграме.

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

Чтобы сделать такую кнопку в телеграм-канале, нужно:

  1. Открыть пункт «Добавить реакции». Допускается присоединять до 6 различных смайликов к одному посту. Впоследствии пользователь сможет отслеживать, сколько человек кликнуло по иконке.
  2. Чтобы они автоматически прикреплялись к каждой записи, используется «Реакции по умолчанию», а список доступных эмоций отправляется роботу.

Добавление URL-кнопки

Это специальные клавиши, в которые прячут ссылки, позволяющие переходить к опросу, голосованию, другому каналу или сайту. Чтобы их разместить, после написания сообщения, выбирается пункт «Добавить урл» и вводится имя по формату «название-ссылка».

Виджет обратной связи с Telegram

Существует несколько вариантов:

  1. Использование сервиса Telegram.im. Для этого надо выбрать пункт «Сделать кнопку в Телеграме», а на открытой вкладке прописать имя канала. По желанию здесь можно произвести и другие настройки (определить фон, поэкспериментировать с размером текста). По завершению кликнуть по «Получить код», скопировать его и поставить на нужное место.
  2. Tgwidget.com. Тут представлено два варианта иконок и один виджет с трансляцией новостей ресурса, которые отображаются у владельцев подписки. На сайте необходимо зарегистрироваться и получить код для личного кабинета, который добавляется непосредственно в мессенджер.

Выводы

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

Детальная инструкция видна на видео:

?Эта клавиатура Телеграмма специально создана для таких модных людей как ты!?Эта клавиатура совместима со ВСЕМИ смартфонами Android. И она совершенно БЕСПЛАТНА!?Начни получать ни с чем не сравнимое удовольствие от ввода текста с этой классной клавиатурой Телеграмма!Почему мы?Она делает твой телефон классным и модным?С отличным дизайном в стиле телеграмма и посыльный, клавиатура Телеграмма предлагает эксклюзивные фоновые обои, кнопки с темой Телеграмма, персонализированные шрифты и анимацию при вводе текста. Кроме того, обалденные эффекты посыльный отвечают твоему стилю ввода текста и жестам. Они включают в себя 3D-эффекты при нажатии, эффекты динамических частиц, анимацию при вводе жестами и звуки при касании посыльный.Установи эту клавиатуру Телеграмма и ощути мир посыльный и телеграмма Телеграмма. Как здорово сделать телефон классным и модным и похвастаться им перед друзьями!Она помогает тебе легко и эффективно вводить текст?Если ты ищешь умную и без проблем работающую клавиатуру, скачай эту клавиатуру Телеграмма. Благодаря ей ты получишь еще больше удовольствия от ввода текста.Умный ответ?Клавиатура Телеграмма – это клавиатура с искусственным интеллектом. Она предлагает ответы на основе содержания твоих разговоров.Популярные эмодзи и GIF?Клавиатура Телеграмма включает в себя более 1000 наиболее популярных эмодзи и стильных GIF. Ты можешь либо выбирать эмодзи из списка клавиатуры, либо просто начать вводить слово: наша умная клавиатура сама предложит тебе эмодзи. Наш ассортимент эмодзи постоянно обновляется!Центр тем✨Предлагается более 4000 БЕСПЛАТНЫХ тем клавиатуры, включающих различные категории, такие как техника, животные, блестящее, природа, симпатичное, мультфильмы, цветы, любовь, роскошь, крутой стиль, бизнес, простое, спортивное, специально для девочек и т. д. Посети наш центр тем и найди свою любимую!Темы «сделай сам»✏️В нашем магазине тем ты можешь индивидуально настроить свою клавиатуру. Выбери фон среди множества обоев или даже из своих фотографий, скины кнопок, шрифты и звуки при касании! Повеселись с клавиатурой «сделай сам».Умный ввод текста?Утрой скорость ввода текста прямо сейчас! Клавиатура Телеграмма имеет следующие классные функции для обеспечения умного ввода текста:Личный словарьОблачное предсказаниеВвод жестамиГолосовой вводУмный поиск?Нажми на функцию “Поиск”, и тебя перенаправят к тому, что ты ищешь. Тебе даже не надо переходить в браузер.Поддерживаемые языки?Тема клавиатуры телеграмма поддерживает 85 языков из 138 стран.Новые функции?Инструмент выбора и кнопки со стрелками: проще редактируй длинные тексты!Удаление выученных слов: нажми и удерживай кнопку, чтобы избавиться от нежелательных выученных слова в панели предсказаний!ПримечаниеЧтобы применить эту клавиатуру Телеграмма, сначала нужно установить наш клавиатурный движок. Просто нажми на кнопку “ПРИМЕНИТЬ”, чтобы БЕСПЛАТНО выполнить установку.Оцени клавиатуру ТелеграммаЕсли тебе нравится эта клавиатура, не забудь поставить 5 звезд и оставить комментарии, чтобы помочь другим найти эту чудесную клавиатуру.Используемые источники:

  • https://mastergroosha.github.io/telegram-tutorial/docs/lesson_08/
  • https://habr.com/ru/post/522720/
  • https://stelegram.ru/chaty-i-kanaly/knopki-v-telegram
  • https://m.apkpure.com/ru/telegram-messenger-keyboard/keyboard.theme.k820009993

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий