Боты – это удобные инструменты в социальных сетях и мессенджерах. С помощью них получится без привлечения дополнительных специалистов предоставить пользователям доступ к тем или иным функциям/возможностям. Боты умеют обрабатывать запросы и даже вести элементарные диалоги. Они предоставляют доступ ко встроенным меню и их кнопкам.
Большинство ботов для Telegram пишутся на Python. Данный язык разработки является одним из самых известных и распространенных. Он служит кроссплатформенным инструментом программирования, а также вспомогательным компонентом в крупных проектах. Предусматривает простой и понятный синтаксис, благодаря чему легко осваивается даже неопытными программистами.
Сегодня предстоит научиться делать бота на Python для Telegram. Далее упор будет сделан на формирование не робота-помощника, а его функционального меню и кнопок. Представленная ниже информация окажется полезной как IT-специалистам, так и обычным пользователям, заинтересованным в создании ботов у себя на каналах в мессенджерах.
Виды клавиатур
Далее предстоит работать с эхо-ботом, который пишется на основе библиотеки aiogram. Его функция заключается в одном – присылать тот же текст в ответ на пользовательское сообщение. Трудно представить, но у такого робота-помощника тоже есть функциональное меню и кнопки.
Теперь предстоит поработать над этими компонентами. В эхо-бота предстоит добавить клавиатуру с быстрыми ответами и inline кнопки. Они будут использоваться для непосредственного перехода на заданный сайт. Пусть им окажется страница OTUS.
Перед непосредственным созданием кнопок и inline-элементов необходимо выяснить, какими могут быть клавиатуры в Телеграмм у бота, созданного через aiogram. Они встречаются двух типов. Отличаются друг от друга только расположением кнопок:
- Reply-кнопки. Они выглядят как шаблонные (заранее заготовленные) ответы. Закрепляются вместо основной клавиатуры на экране устройства. Обычно используются в чат-ботах в качестве основного меню. Для их создания нужно задействовать метод ReplyKeyboardMarkup.
- 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)
Этот код работает по такому принципу:
- Сначала в первом декораторе создается список kb. Он отвечает за хранение управляющего компонента (button).
- В aiogram buttons создаются при помощи types.KeyboardButton. Далее в круглых кавычках пишется text=””. В этом параметре необходимо передать название управляющего компонента. Иначе говоря, имя.
- Далее нужно сформировать клавиатуру и сообщить ей о наличии тех или иных buttons. Это делается при помощи types.ReplyKeyboardMarkup. Далее в круглых кавычках пишется keyboard-list. В ней вместо list указывается название списка с кнопками. В рассматриваемом случае это kb.
- Отобразить в Телеграмм клавиатуру. Для этого нужно добавить строку 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)
Здесь:
- Сначала происходит инициализация клавиатуры через InlineKeyboardMarkup. Для этого нужно передать в качестве аргумента row_width число 1. Оно будет отвечать за то, сколько управляющих компонентов находится в одном ряду.
- Создается переменная и инициализируется класс Button. В его параметрах указывается: text – текст, который отображается на кнопке в Телеграмм, а также url – адрес страницы, на которую перенаправляется пользователь при клике.
- Через add-метод добавляются два компонента к уже сформированной клавиатуре.
- Пишется message_handler. Он вызывает в Телеграм соответствующие inline-кнопки. Операция выполняется точно так же, как и обычными buttons. Разница заключается в том, что в качестве команды вызова указываются ссылки, а в параметре reply_markup передается название клавиатуры – urlkb.
Все готово. Теперь остается только сохранить исходный код и посмотреть на результат. Bot на Питоне будет оснащен обычной клавиатурой, отображаемой при команде /start, а также inline menu, выводимым при команде /ссылки.
Интересует Python? Добро пожаловать на курс в Otus!