Боты – это удобные инструменты в социальных сетях и мессенджерах. С помощью них получится без привлечения дополнительных специалистов предоставить пользователям доступ к тем или иным функциям/возможностям. Боты умеют обрабатывать запросы и даже вести элементарные диалоги. Они предоставляют доступ ко встроенным меню и их кнопкам.

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

Сегодня предстоит научиться делать бота на Python для Telegram. Далее упор будет сделан на формирование не робота-помощника, а его функционального меню и кнопок. Представленная ниже информация окажется полезной как IT-специалистам, так и обычным пользователям, заинтересованным в создании ботов у себя на каналах в мессенджерах.

Виды клавиатур

Далее предстоит работать с эхо-ботом, который пишется на основе библиотеки aiogram. Его функция заключается в одном – присылать тот же текст в ответ на пользовательское сообщение. Трудно представить, но у такого робота-помощника тоже есть функциональное меню и кнопки.

Теперь предстоит поработать над этими компонентами. В эхо-бота предстоит добавить клавиатуру с быстрыми ответами и inline кнопки. Они будут использоваться для непосредственного перехода на заданный сайт. Пусть им окажется страница OTUS.

Перед непосредственным созданием кнопок и inline-элементов необходимо выяснить, какими могут быть клавиатуры в Телеграмм у бота, созданного через aiogram. Они встречаются двух типов. Отличаются друг от друга только расположением кнопок:

  1. Reply-кнопки. Они выглядят как шаблонные (заранее заготовленные) ответы. Закрепляются вместо основной клавиатуры на экране устройства. Обычно используются в чат-ботах в качестве основного меню. Для их создания нужно задействовать метод ReplyKeyboardMarkup.
  2. Inline. Такие кнопки будут иметь связь с сообщениями в чате. Пользователь видит не только inline-кнопки, но и основную клавиатуру. В этом случае необходимо использовать метод InlineKeyboardMarkup.

Здесь можно посмотреть на первую часть эхо-бота. Она будет дополнена инлайн-кнопками и функциональным меню.

Формирование меню через reply-элементы

Изначально написанный бот может только отправлять текстовые сообщения и получать их обратно. Необходимо немного модернизировать его и добавить кнопки с готовыми сообщениями. Они позволят не вводить «с нуля» через клавиатуру тот или иной текст.

Чтобы сформировать такое меню, необходимо использовать reply-button. Они работают при помощи класса Perly Keyboard Markup. Начать необходимо с его импорта, а также с дополнительных нужных для дальнейшей работы классов.

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

from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton

Здесь:

  • ReplyKeyboardRemove и ReplyKeyboardMarkup – используются для создания и удаления клавиатуры;
  • KeyboardButton – применяется для непосредственного добавления кнопок.

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

@dp.message_handler(commands=['start'])

async def send_welcome(message: types.Message):

   kb = [

       [

           types.KeyboardButton(text="Сможешь повторить это?"),

           types.KeyboardButton(text="А это?")

       ],

   ]

   keyboard = types.ReplyKeyboardMarkup(keyboard=kb)

   await message.reply("Привет!\nЯ Эхобот от Otus!\nОтправь мне любое сообщение, а я тебе обязательно отвечу.", reply_markup=keyboard)

Этот код работает по такому принципу:

  1. Сначала в первом декораторе создается список kb. Он отвечает за хранение управляющего компонента (button).
  2. В aiogram buttons создаются при помощи types.KeyboardButton. Далее в круглых кавычках пишется text=””. В этом параметре необходимо передать название управляющего компонента. Иначе говоря, имя.
  3. Далее нужно сформировать клавиатуру и сообщить ей о наличии тех или иных buttons. Это делается при помощи types.ReplyKeyboardMarkup. Далее в круглых кавычках пишется keyboard-list. В ней вместо list указывается название списка с кнопками. В рассматриваемом случае это kb.
  4. Отобразить в Телеграмм клавиатуру. Для этого нужно добавить строку reply_markup=keyboard. Оно отобразит клавиатуру после обработки команды /start.

Все это приводит к тому, что при запуске эхо-робота в Телеграмм в чате появляются две кнопки после обработки /start: «Сможешь повторить?» и «А это?». При клике по любому из предложенных компонентов робот отправит соответствующий текст в качестве ответа.

При программировании ботов (не только эхо-типа) на Python можно создавать бесконечное количество разнообразных шаблонов. А еще – связывать управляющие компоненты с новыми манипуляциями. Далее соответствующая задача будет рассмотрена на примере inline-клавиатуры.

Inline-клавиатура в Telegram bot

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

Самым простым примером inline-кнопок является меню на канале @BotFather. С помощью него обычно создается робот-автоответчик в Телеграмме. А точнее – токен для доступа к API в мессенджере.

Можно создать на Python bot, который будет вести на OTUS и курсы по разработке программного обеспечения. Для этого потребуется вернуться к разделу с импортами в исходном коде. Туда добавляется еще одна строка. Она позволит задействовать необходимые для бота классы. Выглядит соответствующая строчка так:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

Здесь:

  • InlineKeyboadMarkup – инициализирует инлайн-кнопки;
  • InlineKeyboardButton – используется для непосредственного создания рассматриваемых компонентов.

Теперь можно сформировать сами элементы управления. Они будут выглядеть так:

urlkb = InlineKeyboardMarkup(row_width=1)

urlButton = InlineKeyboardButton(text='Перейти в журнал OTUS', url='https:// https://otus.ru/journal/')

urlButton2 = InlineKeyboardButton(text='Перейти к имеющимся у OTUS курсам', url='https:// https://otus.ru/catalog/courses')

urlkb.add(urlButton,urlButton2)

@dp.message_handler(commands='ссылки')

async def url_command(message: types.Message):

   await message.answer('Полезные ссылки:', reply_markup=urlkb)

Здесь:

  1. Сначала происходит инициализация клавиатуры через InlineKeyboardMarkup. Для этого нужно передать в качестве аргумента row_width число 1. Оно будет отвечать за то, сколько управляющих компонентов находится в одном ряду.
  2. Создается переменная и инициализируется класс Button. В его параметрах указывается: text – текст, который отображается на кнопке в Телеграмм, а также url – адрес страницы, на которую перенаправляется пользователь при клике.
  3. Через add-метод добавляются два компонента к уже сформированной клавиатуре.
  4. Пишется message_handler. Он вызывает в Телеграм соответствующие inline-кнопки. Операция выполняется точно так же, как и обычными buttons. Разница заключается в том, что в качестве команды вызова указываются ссылки, а в параметре reply_markup передается название клавиатуры – urlkb.

Все готово. Теперь остается только сохранить исходный код и посмотреть на результат. Bot на Питоне будет оснащен обычной клавиатурой, отображаемой при команде /start, а также inline menu, выводимым при команде /ссылки.

Интересует Python? Добро пожаловать на курс в Otus!