Бот – это небольшая программа внутри Telegram, которая управляется за счет отправки текстовых команд в чате. Принцип функционирования осуществляется через модель «вопрос–ответ». Соответствующие технологии ранее встречались в ICQ. Тогда боты присылали анекдоты, гороскопы и различные статьи из «Википедии», а также переводили тексты.
Сейчас бот в Telegram – это удобный инструмент для разнообразных целей. Такое программное обеспечение используется интернет-магазинами, компаниями и «обычными» пользователями. Далее предстоит выяснить, как писать ботов на Python. Это не архисложная задача, особенно если разобраться с ней поэтапно.
Предложенная далее информация предназначается для широкого круга лиц. С помощью нее создавать ботов для Телеграмм смогут разработчики разного уровня.
Перед началом разработки
Телеграм позволяет писать ботов в свободной форме, начиная с 2015-го года. Боты – это небольшие скрипты, которые взаимодействуют с API для получения сообщений с пользовательской стороны. В ответ на них система передает информацию на каналы и разнообразные чаты.
Для того, чтобы создать bot Python, требуется:
- дать «скрипту» название;
- задать адрес расположения бота;
- получить токен – строку, которая используется для однозначной идентификации бота на Телеграм-серверах.
Далее происходит программирование скрипта и его запуск. Сделать бота можно как полностью самостоятельно, так и посредством специализированных библиотек. Далее будут представлены самые популярные из них.
Библиотеки для Python
Более быстрому созданию любого программного обеспечения способствуют фреймворки и библиотеки. Python предусматривает множество подобных элементов. Библиотеки соответствующего языка позволяют разрабатывать приложения и утилиты любой сложности с минимальными усилиями и знаниями в сфере программирования.
Для того, чтобы сделать простой бот для Телеграм, рекомендуется воспользоваться следующими библиотеками:
- Aiogram. Современная библиотека Питона для разработки ботов. Большинство рассматриваемых скриптов в Телеграмм написаны с ее помощью. В Aiogram реализована асинхронная работа кода. Она дает возможность не останавливать скрипт в процессе ожидания ответа со стороны пользователя. Упомянутая библиотека поддерживает подробную документацию и русскоязычное сообщество.
- TeleBot. Библиотека, используемая для создания простейших мини-программ для Телеграмма. Дает возможность выбора принципа их функционирования: синхронно или асинхронно. Отлично подойдет для формирования проектов небольшого масштаба.
- Python-telegram-bot. Одна из первых библиотек для создания bots в ТГ. От Aiogram отличается синхронным подходом к функционированию. Это значит, что в процессе работы скрипта и во время ожидания ответа от пользователя выполнение имеющегося кода останавливается.
Далее будут приведены примеры создания ботов на Aiogram и PythonTelegramBot. Предстоит изучить самые распространенные варианты скриптов.
Краткая инструкция по программированию
Написание бота на Питоне – не самая сложная задача, если грамотно подойти к соответствующему вопросу. Даже разработчик с минимальными знаниями упомянутого языка сможет создать первый проект для Телеграм.
Пошагово программирование можно представить так:
- Зарегистрировать бота в Телеграм.
- Установить Python-библиотеку для разработки ботов. Пример – Aiogram.
- Добавить библиотеку в программу и научить грамотно реагировать на сообщения в чате. Этот этап и есть непосредственное программирование.
- Добавить дополнительные элементы (пример – кнопки) по мере необходимости. Привязать к ним функциональность.
- Запустить бота для проверки.
Далее предстоит создать эхо-бота и другие распространенные типы скриптов для Telegram. Для некоторых приложений будет использоваться Aiogram.
Разработка ботов
Начать создание ботов для Телеграм-канала или чата необходимо с установки Python и его инструментов. В MacOS и Linux соответствующее программное обеспечение обычно уже имеется в системах. Для проверки используется консольная команда: python —version.
В Windows Python необходимо устанавливать. Рекомендуется загрузить инициализатор через официальный сайт разработчиков. Рекомендуется выбирать Python3 – более современную версию.
Как только Python установлен, необходимо сформировать и активировать виртуальное окружение. Для этого используется virtualenv. Виртуальным окружением называется инструмент, позволяющий изолировать друг от друга проекты, находящиеся в стадии разработки. В каждый из них необходимо устанавливать пакеты и инструменты обособленно. Виртуальное окружение особо удобно тогда, когда программист одновременно планирует работать с несколькими разными проектами.
Установить virtualenv поможет терминал и команда:
sudo pip3 install virtualenv.
Далее предстоит сформировать директорию для проекта. В ней будет запускаться и работать виртуальное окружение:
Здесь:
- mkdir – команда, которая создает папку telegram_bot;
- cd – переводит пользователя в заданную директорию.
В соответствующей директории будут храниться файлы проекта, которые связаны с ботом. Для развертки виртуального окружения используется команда:
Теперь остается активировать упомянутый элемент. Иначе окружение вовсе не будет функционировать:
Как только подобные операции завершены, можно перейти к непосредственному программированию бота. Далее будут приведены различные примеры Телеграм-ботов. Они используются на практике чаще всего.
Эхо-бот на Aiogram
Эхо-бот нужен для того, чтобы дублировать сообщения. Пользователь пишет этому скрипту, мини-приложение, копирует предложенный текст и передает его в качестве ответа (реакции).
Первый вариант – это программирование бота Python через Aoigram. Для этого сначала потребуется создать bot. Данный этап будет единым для всех рассматриваемых далее примеров.
Чтобы создать бота, потребуется:
- Открыть Телеграмм и отыскать там BotFather.
- Кликнуть на «Запустить» и ввести команду newbot.
- Дать имя боту. Путь им станет echo_otus_bot.
- В ответ пользователь получит токен. Он должен быть сохранен. Это идентификатор мини-приложения для Телеграма.
Теперь разработчик должен подключить Aiogram через pip install aiorgram в Питоне. Далее – запрограммировать бот на Python. Лучше всего писать код в IDE, а не в терминале. Ниже используется редактор Visual Studio Code.
После открытия IDE требуется создать документ main.py. Для рассматриваемого чат-бота достаточно соответствующего компонента. Из Aiogram необходимо импортировать некоторые классы и модули:
Здесь:
- Bot – помогает определить, какие команды от пользователя должны приниматься, а также как на них реагировать.
- Dispatcher – проверяет обновления.
- Executor – осуществляет запуск бота, а также выполняет функции, которые должны обрабатываться в процессе работы скрипта.
При помощи types можно будет использовать базовые классы для того, чтобы вводить аннотации. Они необходимы для упрощения восприятия сообщений и представляют собой своеобразные подсказки. Пример далее будет использовать types Message. С его помощью удается обрабатывать текст, который приходит от пользователя.
Теперь необходимо импортировать токен для взаимодействия с API Telegram:
Далее предстоит организовать инициализацию объектов Dispatcher и bot. Второму элементу передается токен. Если не инициализировать указанные компоненты, исходный код работать не будет:
Можно настроить приветственное окно для нового пользователя. Оно появляется при вводе команды start в чат-боте на Python Telegram. Необходимо написать message handler и задать ему функцию ответа:
Теперь, после того как пользователь нажмет на кнопку «Начать» или введет команду start, на экране появится приветственное сообщение (hello message).
Здесь:
- Message handler – декоратор. Он будет реагировать на входящие сообщения. Носит в себе функцию ответа.
- Commands =[start] – команда, связанная с декоратором. Будет запускать функцию, которую в нее вложили.
- Async def send welcome – создает функцию асинхронного типа. Она принимает сообщения от пользователя message, которые определяются через тип Message. Сама функция может быть названа как угодно. Send_welcome выбрано для того, чтобы было удобнее ориентироваться в коде.
- Await message.reply – отвечает за определение ответа пользователя. Await используется из-за асинхронности работы Aiogram.
Теперь нужно создать событие. Оно будет отвечать за обработку введенного пользователем сообщения:
Из-за того, что мини-приложение должно реагировать на любое текстовое message со стороны пользователя, скобки в dp message handler остаются пустыми. Параметр message не отличается от использованного ранее.
Метод message используется для того, чтобы указать – система вернет клиенту исходный текст, который ранее был принят message.
Последний этап – настройка получения сообщений от Телеграмм-сервера. Для этого может использоваться поллинг. Он функционирует легко – метод start_polling опрашивает сервер и проверяет обновления. Если они обнаружены, соответствующие новшества будут высланы в Телеграм. Для активации поллинга задаются две строки:
Теперь можно сохранить код, перейти в терминале в папку telegram_bot (командой python3 main.py), а затем отыскать bot через мессенджер. После этого – запустить его, нажав на кнопку «Начать». В ответ на это или сообщение (message) start придет приветственное сообщение.
Если написать что-либо в мессенджере и отправить – скрипт продублирует соответствующее message.
Классический эхо-бот
А вот – еще один вариант того, как можно написать бота для Telegram на Python. Для этого используется библиотека telebot:
Работает скрипт точно также, как и предыдущий – копирует message от пользователя и дублирует его.
Статьи из Wikipedia
Небольшой справочник в Телеграмме. По введенному слову система будет давать статью, обнаруженную на Википедии:
Здесь на помощь приходит модуль Wikipedia. Он подключается в самом начале разработки кода.
Две кнопки
Еще один распространенный вариант. Он предусматривает наличие виртуальных кнопок в скрипте. Отдельные message и команды для выполнения тех или иных операций вводить не придется.
Здесь представлены два документа: facts.txt и thinks.txt. Они включают в себя интересные факты и поговорки. Каждая строка в предложенных документах – это отдельное сообщение (message).
Скрипт будет выдавать текст из предложенных документов в зависимости от того, на какую кнопку нажмет клиент.
Интересует Python? Добро пожаловать на курс в Otus!