Как создать телеграм-бота на Python
Python — самый популярный язык программирования в феврале 2022 года.
Телеграм используют более пятисот миллионов людей по всему миру. Компании с его помощью упрощают заказ товаров или услуг, дают консультации. Для этого используют ботов — автоматические программы. Их пишут на разных языках программирования. Рассмотрим, как создать бот на самом популярном в феврале 2022 года языке — Python.
Установите интерпретатор Python
Python — динамически типизированный, интерпретируемый язык. Программы, написанные на нём, не компилируются в исполняемые файлы. Поэтому, чтобы запускать Python-программы, устанавливают его интерпретатор.
️ Windows
Выберите последнюю версию Python
Поставьте галочку перед установкой напротив Add Python to PATH
❗ Вызов интерпретатора в командной строке Windows отличается от других ОС. Используйте команду py вместо python3.
️ Linux
Если вы используете ОС Linux, вероятно, Python уже установлен. Чтобы проверить, откройте терминал с помощью команды:
Если вы видите что-то вроде Python 3.x.x, то Python есть. В противном случае используйте установленный менеджер пакетов. В основном это apt. Введите команду:
Установите виртуальное окружение с помощью команды:
️ MacOS
На макбуках Python часто тоже уже есть. Откройте терминал и проверьте с помощью команды:
Ответ Python 3.x.x, а не ошибка, тоже подтверждает, что Python установлен. Если нет — используйте менеджер пакетов brew. Введите команду:
Установите пакет для создания виртуального окружения:
Создайте папки проекта и виртуального окружения
Откройте терминал Linux или MacOS, командную строку Windows. Перейдите в директорию, в которой вы хотите создать проект бота. Последовательно
или, если вы используете Windows:
Эти команды создадут папку проекта myBot внутри текущей рабочей директории. А в ней — папку с виртуальным окружением.
Активируйте окружение, выберите и установите библиотеки
Чтобы активировать виртуальное окружение на MacOS или Linux, используйте команду
Чтобы создавать боты, используют разные библиотеки. Самые популярные: python-telegram-bot с синхронным подходом, aiogram с асинхронным.
Асинхронность позволяет отвлекаться от задач и не ждать ввода от пользователя, поэтому мы будем использовать библиотеку aiogram. Документация по ней — на docs.aiogram.
Используйте менеджер Python-пакетов (pip). Чтобы установить библиотеку aiogram, введите команду:
Зарегистрируйте бота и получите API-ключ
Откройте телеграм и найдите бота @BotFather. Он нужен, чтобы создавать другие боты и управлять ими.
Введите команду /newbot и отображаемое имя бота
Теперь введите никнейм бота. Он должен быть уникальным, в конце обязательно слово bot. Когда юзернейм пройдет валидацию, вы получите сообщение с API-ключом.
Никому не сообщайте полученный токен
Примеры ботов
Эхобот
Для начала в папке проекта создайте несколько файлов.
Handlers.py будет хранить функции — обработчики сообщений и команд, main.py нужен для запуска
Напишите в main.py код:
Здесь из библиотеки aiogram мы импортируем классы Bot, Dispatcher — класс, который регистрирует, на какие команды/сообщения и какой функцией отвечать. И executor — он запускает бота и выполняет функции, зарегистрированные в диспетчере. На второй строке мы импортируем модуль handlers.py — в нём хранят обработчики.
Затем объявите переменную, в которую нужно вставить токен от @BotFather. Создайте экземпляр класса бота, в него передайте токен. И экземпляр диспетчера, в него передайте только что созданный бот.
Далее откройте файл handlers.py и напишите в нём пару команд, которые будут обрабатывать запросы:
Здесь из модуля aiogram импортируем типы, с помощью которых преобразуем текст сообщения или файлы в структуру данных. Это может быть Message — сообщение, Audio — аудиозапись, Animation — анимация.
Далее определите асинхронные функции, чтобы обрабатывать команды /start и отвечать на сообщения.
Зарегистрируйте эти функции в диспетчере. Для этого в файле main.py добавьте перед запуском программы:
В итоге файл main.py выглядит так:
Чтобы проверить работу, введите в терминале python3 main.py или py main.py на Windows. Откройте бота в телеграме и запустите его
Криптобот
Чтобы написать криптобота, который будет сообщать текущую цену BTC, LTC и DASH, используйте бесплатный API-сервис SoChain. Еще потребуется дополнительная библиотека, чтобы создать асинхронные запросы aiohttp, но ее устанавливают вместе с aiogram.
Создайте новый модуль utils.py. Добавьте в него url-адрес API-сервиса. Чтобы узнавать цену, используйте метод Get Prices. Он возвращает json-объект с данными о цене из нескольких источников. Поэтому напишите функцию, которая вычисляет среднее значение:
Далее откройте файл handlers.py и напишите код:
Теперь измените main.py файл: зарегистрируйте функции. Затем протестируйте бота:
Когда пользователь укажет неподдерживаемую сеть ETH, бот вернет цену биткоина, потому что так устроен API-сервис. Если он не распознал сеть, то использует BTC
Чтобы исправить ошибку, создайте клавиатуру, которая возвращает нужные значения. Напишите специальный класс Middleware: в нём описываются проверки до и после обработки запроса. Либо проверьте вхождение внутри функции. Последний вариант проще и легче.
Если пользователь отправит неподдерживаемый акроним криптосети, вы сообщите ему об этом. Для этого в файле utils.py определите список поддерживаемых сетей:
Теперь отредактируйте функцию расчета цены криптовалюты в файле handlers.py. Для этого добавьте проверку вхождения сети в список поддерживаемых:
Когда пользователь укажет неподдерживаемую сеть ETH, бот сообщит об этом
Код всех файлов
Главное о телеграм-боте на Python
- Чтобы создать бота, установите интерпретатор Python. На Linux и MacOS он часто уже есть.
- Создайте папку с проектом myBot, в ней — папку с окружением, активируйте его, установите библиотеку aiogram. Она позволяет обрабатывать запросы, даже если вы ждете, пока пользователь введет информацию.
- Регистрируйте бота и управляйте его настройками с помощью @BotFather.
В онлайн-университете Skypro обучаем профессии Python-разработчика за 10 месяцев. Узнаете, как писать чистый код, серверы для магазина, приложения, сервиса или игры, разрабатывать сложную архитектуру сервисов. Выполните практические задания с реальными инструментами и сделаете четыре проекта для портфолио. Развиваем только нужные навыки, необходимые для старта в профессии.
Как создать Telegram-бота с помощью библиотеки python-telegram-bot
Делимся инструкцией, как написать бота с помощью библиотеки python-telegram-bot за считанные минуты. На примере гайда от программиста Давида Мастроматтео.
«Купи мне истребитель». Сбор средств для Воздушных Сил ВСУ
Установка python-telegram-bot
Для создания бота понадобится пакет python-telegram-bot — оболочка для API от Telegram. Написать бота с помощью этой библиотеки очень просто, так как она полностью совместима с Python 3.6+.
Первое, что нужно сделать — установить python-telegram-bot. Вот ссылка на официальную документацию библиотеки .
$ pip install python-telegram-bot –upgrade
Создание бота
Теперь можно взяться за создание бота. Для этого даже не нужно писать код. Перейдите в Telegram и найдите канал @BotFather, который отвечает за регистрацию новых ботов. Начните общаться с ботом и введите команду /newbot . Затем BotFather спросит у вас имя и юзернейм.
У BotFather можно запросить много других интересных вещей. Например, изменить изображение профиля бота.
Теперь нужно принять важное решение: определиться с главной задачей бота. В этой инструкции мы сделаем бота, который предоставляет информацию о биоритмах пользователей . Будьте осторожны: речь идет о псевдонаучных теориях, так что б от будет такой же полезный, как и гороскопы. Но если дойдете до конца — сможете создавать любых ботов.
Программирование бота
Пакет python-telegram-bot состоит из оболочки API Telegram. Этот инструмент доступен через telegram.Bot- классы. Помимо них, есть еще модуль telegram.ext , который значительно упростит работу.
Модуль telegram.ext содержит много классов, но самые важные — telegram.ext.Updater и telegram.ext.Dispatcher . Updater отвечает за выборку новых обновлений от Telegram. Также он передает их в Dispatcher , после чего они обрабатываются с помощью Handler .
Приступим к программированию:
В функции main создан класс Updater , который автоматически сгенерировал объект Dispatcher , доступный через .dispatcher- свойства класса Updater .
Добавьте несколько обработчиков:
- команда /start вызывает функцию start() , которая отвечает пользователю информативным сообщением;
- команда /help вызывает функцию help() , которая отвечает пользователю информативным сообщением;
Сейчас в коде прописаны функции обратного вызова, которые используют полученные данные для отправки сообщений пользователю.
Тестирование
Теперь можно протестировать бота. Запустите его.
Пошлите ему команду /start .
Ура, бот работает!
Но это не конец. Надо создать бота, который сообщает пользователю его ежедневный биоритм. Для этого следует применить команду /start . С ее помощью при запуске чата можно получить данные о дне рождения пользователя. Затем надо создать функцию для обработки новой команды /biorhythm , чтобы отправить ответ пользователю с его личным биоритмом.
Чтобы узнать день рождения пользователя, для начала нужно изменить функцию, обрабатывающую команду /start . Чтобы упростить задачу, попросите пользователя указать год, месяц и день рождения.
В параметре update можно найти полезную информацию о пользователе, например, его имя.
В самом начале скрипта определите новую переменную STATE , которая нужна, чтобы понять, на какой вопрос отвечает пользователь.
Теперь необходимо реализовать функцию start_getting:_birthday_info() , она вызывается с помощью команды start() . После запуска вы получите информацию о дне рождения от пользователя.
Для переменной STATE устанавливается значение BIRTH_YEAR , чтобы после ответа пользователя было понятно, что вопрос касался года рождения. Затем отправляется сообщение, чтобы узнать год рождения.
Теперь пользователь ответит обычным текстом, поэтому нужно изменить функцию text() .
В функции text() необходимо понять, на какой вопрос отвечает пользователь, используя переменную STATE . После чего остается вызвать функцию для обработки каждого ответа.
Эти функции можно записать так:
Когда получен год рождения пользователя, остается проверить, допустимое ли это значение. Если да, то оно сохраняется в словаре context.user_data[] . Продолжайте устанавливать значения для переменной STATE и задавать следующие вопросы.
Когда зададите последний вопрос и будете знать день рождения, создайте переменную даты и сохраните ее в context.user_data[] словаре.
Если пользователь вводит недопустимое значение, то получает ответ, что оно неверно. Значение переменной STATE не меняется, поэтому пользователь застревает на этом вопросе, пока не ответит правильно.
Создание команды
Теперь нужно обработать команду /biorhythm .
Добавьте новый обработчик команд в функцию main() .
Напишите функцию расчета биоритма:
В примере представлены две разные функции: одна для обработки команды, а другая для расчета биоритма. Таким образом удается разделить ответственность этих функций.
Полный код бота
Пришло время проверить его:
Поздравляем! Telegram-бот на Python полностью готов.
Бот, созданный для примера, был сохранен. Его можно протестировать по имени пользователя @mastro35_mastrobot.
Python Telegram Bot: How to Create and Deploy Telegram Bot with Python
(you may skip it if you already know what to do with your bot)
Bots are everywhere. It seems that only yesterday we did not even know about their existence; now we can barely imagine our life without them. They’ve become widely popular among numerous active users of messengers since they have various scopes of use – from entertaining content including step-by-step games and collecting bonus points in restaurants, to keeping a diet plan, tracking deliveries, and even making payments for different services.
No need to remember passwords or logins used. Adding bot to the site or app increases the number of the user audience as it makes communication with clients and providing them with the assistance much easier and user-friendly.
So, we described main advantages of the bots and now you must be willing to create your own bot. Let’s move on to the practice. But first, we’ll take a look at issues that must be addressed in the pre-development stage.
Get an experienced technical partner.
Nuances of Telegram Bot Development
Above, we’ve determined the reasons for creating the bot. In this part, we are planning how to build the application and what development tools to use. Further, we’ll show how to create a Telegram bot on Python and will teach it to turn our message backwards.
Since it’s a Telegram bot tutorial for beginners, we’ll run the server with a single endpoint that will receive our telegram messages and will make an answer.
For that, we will use the following tools:
-
– for our server; a simple and lightweight WSGI micro web-framework – for sending requests to telegram. request lib does not need to be overrepresented. It is universally used throughout the world in a variety of projects.
Note: you have to install these tools on your computer. We will need them later. For that, open your bash console and install it via pip
- ngrok – this is an app which provides us with public URLs for our interaction with Telegram WebHook throughout the development phase (look for info on WebHook below). It is useful, as Telegram will not be able to make a connection with our local server because we cannot specify our local address in the Telegram API configuration.
You should download ngrok from the official site and put the installed app in the folder with the project.
How About to Create Your First Bot?
If you are keen on this, explore this part where we will provide a detailed Telegram bot development tutorial and show useful Python development tools for it.
First things first. To create a Telegram bot, you need to register on Telegram (obviously). I recommend to use Telegram web client for testing the basic concepts.
Open Telegram app, search for @BotFather and start the chat. Send /newbot command and follow the instructions. After completing the initial steps, you’ll get —
- Your own TOKEN
- telegram api URL — api.telegram.org/<your token >
Wells, that’s actually it. At the moment the bot is 100% passive.
You need to initialize a conversation with your bot. Open search and type in the name of your bot. Start a conversation by clicking on /start button. Type in something like “Hello”. This message is important as it’s the first update your bot is going to receive.
If it’s your first experience with building APIs, you can easily get the idea using your web browser. Open a new tab in your browser and use the Telegram api URL –
api.telegram. org/bot<your token > /getUpdates
When you open this URL in your web browser, you make a request to Telegram server, that responds back with JSON. Response resembles Python dictionary. You should see something like this:
If you open bots documentation and check /sendMessage method section you’ll notice that this method requires 2 additional parameters chat_id and text. In a browser search bar you can chain parameters using ? for the first one and & for all the consequent. Send message would look like this –
Try to get the reply from your bot by substituting chat_id with one you get by calling /getUpdates. In my case it is 303262877. Text parameter is up to you. The request should look like this
api.telegram. org/ bot<your-token>/sendMessage?chat_id=&text=<your-text>
WebHook
(You can skip this part if you’re familiar with WebHook)
To put it short, a WebHook is an API concept that grows in popularity. The concept of a WebHook is simple. A WebHook is an HTTP callback: an HTTP POST that occurs when something happens; a simple event-notification via HTTP POST.
To explain a bit more, sometimes an interaction between apps online requires immediate response to the event, while solutions for constant and continuous connections are mostly cumbersome, exacting and hard to support. In this case, the best and the easiest solution is immediate callback via HTTP (most often POST).
In other words, this solution ensures response to any event inside the one app by means of sending HTTP POST request to other connected app in order to inform it or to make it respond.
This exact concept is called WebHook. It is widely used for:
- receiving data in real time
- receiving data and passing it on
- processing data and giving something in return
Seems that it is the best solution for interaction of the Telegram client (Telegram app) with our project.
Coding Part
At last, we start the most practical part where you will be able to develop a Telegram bot.
Main task: teach our bot to turn our message backwards
Firstly, create a folder for our bot project.
Secondly, create bot.py file to make a bottle server.
from bottle import run, post @post(‘/’) # our python function based endpoint def main(): return if __name__ == ‘__main__’: run(host=’localhost’, port=8080, debug=True)
Let’s try to start our server. For this, open bash in your bot folder.
In the result, you should see something like this:
Then, open a new tab. In the next tab, we will start ngrok
./ngrok http <our_server_port>
After, you’ll see something like this:
Let’s check if you succeeded in setting up WebHook. Follow this link using your token:
api. telegram. org/bot<your_token>/getWebhookInfo
If everything is right, you’ll see the same ngrok address value in front of URL key that you specified when configuring.
Congrats, it’s alive!
Now, we need to implement a message request/response mechanism.
Basically, our endpoint gets data in json format. So, normally, you’ll see data message.
It should be something like that in your console tab where the server is launched.
More detailed information on the parameters you may find in the official documentation of Telegram.
Now, we have to extract chat_id and text in order to turn our message backwards and send the answer.
Now, we’ve already prepared the answer. Let’s send it to Telegram bot.
After all preparations and coding, if everything works, let’s try to chat with our bot.
Now, let’s make our code more readable and implement OOP structure.
That’s pretty much it. Now you’ve made a working bot for Telegram using Python, and it can even spell “racecar” backwards. Congrats!