Телеграм используют больше миллиарда человек по всему миру. Компании с его помощью упрощают заказ товаров или услуг, дают консультации. Для этого используют ботов — автоматические программы. Их пишут на разных языках программирования. Рассмотрим, как создать бота на Python — самом популярном в 2025 году языке.
Установите интерпретатор Python
Python — динамически типизированный, интерпретируемый язык. Программы, написанные на нём, не компилируются в файлы, которые можно запустить сразу после клика по ним. Поэтому, чтобы Python-программы заработали, устанавливают интерпретатор языка.
На курсе Skypro «Python-разработчик» с этого начинается первый модуль. Вся программа построена от простого к сложному и подходит даже для тех, кто не имеет опыта в программировании и технических знаний. За 10 месяцев можно освоить профессию на уровне уверенного новичка.
Windows
- Перейдите на официальную страницу загрузки Python.
Выберите последнюю версию Python
- Пролистайте вниз и скачайте Windows Installer.
Выберите 64-bit
- Откройте установщик и поставьте галочку, нажмите Install Now.
Поставьте галочку перед установкой напротив Add python.exe to PATH
- Откройте командную строку сочетанием клавиш Win и R, введите «cmd.exe» и установите виртуальное окружение с помощью команды:
pip install virtualenv
Вызов интерпретатора в командной строке Windows отличается от вызова в других ОС. Используйте команду py вместо python3.
Linux
Если используете ОС Linux, то, скорее всего, Python уже установлен. Чтобы это проверить, откройте терминал с помощью команды:
python3 --version
Если видите что-то вроде Python 3.x.x, то Python есть. Если нет — используйте установленный менеджер пакетов. В основном это apt. Для этого введите команду:
sudo apt install python3
Установите виртуальное окружение с помощью команды:
sudo apt install python3-venv
macOS
На макбуках Python часто тоже уже есть. Откройте терминал и проверьте это с помощью команды:
python3 --version
Ответ Python 3.x.x подтверждает, что Python установлен. Если нет — используйте менеджер пакетов brew. Введите команду:
brew install python3
Установите пакет для создания виртуального окружения:
pip install virtualenv
Создайте папки проекта и виртуального окружения
Откройте терминал Linux или macOS. Перейдите в директорию, в которой хотите создать проект простого бота на Python для Telegram. Последовательно введите команды:
mkdir myBot cd myBot python3 -m venv env #
Если используете Windows, откройте командную строку и введите:
py -m venv env #
Эти команды создадут папку проекта myBot внутри текущей рабочей директории, а в ней — папку с виртуальным окружением.
Активируйте окружение, выберите и установите библиотеки
Чтобы активировать виртуальное окружение на macOS или Linux, используйте команду:
source ./env/bin/activate
Для Windows используйте команду:
source.\env\bin\activate.bat
Чтобы создавать ботов, используют разные библиотеки. Самые популярные: python-telegram-bot с синхронным подходом и aiogram с асинхронным подходом. Асинхронность позволяет отвлекаться от задач и не ждать ввода от пользователя, поэтому нужно использовать библиотеку aiogram. Документация по ней — на docs.aiogram.
Используйте менеджер Python-пакетов (pip). Чтобы установить библиотеку aiogram, введите команду:
pip install aiogram
Зарегистрируйте бота и получите API-ключ. Откройте телеграм и найдите бота @BotFather. Он нужен, чтобы создавать других ботов и управлять ими. Нажмите «Запустить».
Введите команду /newbot и отображаемое имя бота
Никому не сообщайте полученный токен
Теперь введите никнейм бота. Он должен быть уникальным, в конце обязательно слово bot. Когда юзернейм пройдет валидацию, вы получите сообщение с API-ключом.
Примеры ботов
Эхобот
Для начала в папке проекта создайте несколько файлов.
Handlers.py будет хранить функции — обработчики сообщений и команд, main.py нужен для запуска
Напишите в main.py код:
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' # создаем экземпляры бота и диспетчера bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # запускаем программу if __name__ == '__main__': # указание skip_updates=True # пропустит команды, # которые отправили # до старта бота executor.start_polling(dp, skip_updates=True)
Разберем построчно:
from aiogram import Bot, Dispatcher, executor import handlers
Сначала импортируйте из библиотеки aiogram классы:
- Bot — для работы с ботом.
- Dispatcher — он отвечает за регистрацию обработчиков: связывает команды и сообщения с нужными функциями.
- Executor — запускает бота и выполняет все зарегистрированные функции.
На второй строке импортируйте модуль handlers.py, в котором находятся обработчики команд и сообщений.
После этого:
- Объявите переменную с токеном, который вы получите от бота @BotFather.
- Создайте экземпляр класса Bot — передайте в него токен.
- Создайте экземпляр Dispatcher — передайте в него объект бота.
Далее откройте файл handlers.py и напишите в нём пару команд, которые будут обрабатывать запросы:
from aiogram import types # Функция, обрабатывающая команду /start async def start(message: types.Message): await message.answer("Привет!\nНапиши мне что-нибудь!") # Функция, которая отвечает на сообщение # с текстом async def echo(message: types.Message): await message.answer("Сам ты: " + message.text)
Здесь из модуля aiogram импортируйте типы, с помощью которых преобразуйте текст сообщения или файлы в структуру данных. Это может быть Message — сообщение, Audio — аудиозапись, Animation — анимация.
Далее определите асинхронные функции, чтобы обрабатывать команды /start и отвечать на сообщения.
Зарегистрируйте эти функции в диспетчере. Для этого в файле main.py добавьте перед запуском программы:
# регистрируем функции dp.register_message_handler(h.start, commands=["start"]) dp.register_message_handler(h.echo)
В итоге файл выглядит так:
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' # создаем бота и диспетчер bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # регистрируем функции dp.register_message_handler(handlers.start, commands=["start"]) dp.register_message_handler(handlers.echo) # запускаем программу if __name__ == '__main__': # указание skip_updates=True # пропустит команды, # которые отправили # до старта бота executor.start_polling(dp, skip_updates=True)
Чтобы проверить работу, введите в терминале python3 main.py или py main.py на Windows. Откройте бота в телеграме и запустите его
Криптобот
Используйте бесплатный API-сервис SoChain, чтобы написать криптобота, который будет сообщать текущую цену BTC, LTC и DASH. Еще потребуется дополнительная библиотека, чтобы создать асинхронные запросы aiohttp, но ее устанавливают вместе с aiogram.
Создайте новый модуль utils.py. Добавьте в него URL-адрес API-сервиса. Чтобы узнавать цену, используйте метод Get Prices. Он возвращает json-объект с данными о цене из нескольких источников. Поэтому напишите функцию, которая вычисляет среднее значение:
BASE_URL = "https://sochain.com/api/v2/" # API URL # функция, чтобы рассчитать цену def calculate_price(data): prices = [float(entity["price"]) for entity in data["data"]["prices"]] return f"{(sum(prices) / len(prices)):.2f} USD"
Потом откройте файл handlers.py и напишите код:
from aiogram import types # импортируем библиотеку aiohttp import aiohttp # импортируем из utils все данные from utils import * # обработчик команды /start async def start(message: types.Message): await message.answer("Привет!\nНапиши мне акроним криптовалюты, чтобы узнать текущую цену") # обработчик команды /help async def help(message: types.Message): await message.answer("Доступные сети:\n" + "\n".join(networks)) # обработчик запроса цены async def get_price(message: types.Message): session = aiohttp.ClientSession() # создаем GET-запрос по закрепленному за методом get_price url async with session.get(BASE_URL + f"get_price/{message.text}/USD") as resp: # получаем ответ в формате json data = await resp.json() # если статус запроса — успешно if data["status"] == "success": # рассчитываем цену и отправляем пользователю price = calculate_price(data) await message.answer(price) else: # сообщаем о том, что произошла ошибка await message.answer("Произошла ошибка")
Теперь измените файл main.py: зарегистрируйте функции. После этого протестируйте бота:
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.register_message_handler(handlers.start, commands=["start"]) dp.register_message_handler(handlers.help, commands=["help"]) dp.register_message_handler(handlers.get_price) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)
Когда пользователь укажет неподдерживаемую сеть ETH, бот вернет цену биткоина, потому что так устроен API-сервис. Если он не распознал сеть, то использует BTC
Чтобы исправить ошибку, нужно настроить клавиатуру так, чтобы она возвращала корректные значения. Есть два способа добавить проверку:
- Создать специальный класс — Middleware. В нём можно описать, какие проверки выполнять до и после обработки запроса.
- Или добавить проверку прямо внутри функции. Этот способ проще и подойдет для небольших задач.
Если пользователь отправит неподдерживаемый акроним криптосети, вы сообщите ему об этом. Для этого в файле utils.py определите список поддерживаемых сетей:
networks = ["BTC", "LTC", "DASH"] # <-- поддерживаемые сети BASE_URL = "https://sochain.com/api/v2/" # API URL def calculate_price(data): prices = [float(entity["price"]) for entity in data["data"]["prices"]] return f"{(sum(prices) / len(prices)):.2f} USD" Теперь отредактируйте функцию расчета цены криптовалюты в файле handlers.py. Для этого добавьте проверку вхождения сети в список поддерживаемых: async def get_price(message: types.Message): network = message.text.upper() # приводим сообщение к верхнему регистру # выполняем проверку вхождения if network not in networks: await message.answer("Вы указали неподдерживаемую криптовалюту") return session = aiohttp.ClientSession() async with session.get(BASE_URL + f"get_price/{message.text}/USD") as resp: data = await resp.json() if data["status"] == "success": price = calculate_price(data) await message.answer(price) else: await message.answer("Произошла ошибка")
Когда пользователь укажет неподдерживаемую сеть ETH, бот сообщит об этом
Код всех файлов
utils.py
networks = ["BTC", "LTC", "DASH"] # поддерживаемые сети BASE_URL = "https://sochain.com/api/v2/" # API URL def calculate_price(data): prices = [float(entity["price"]) for entity in data["data"]["prices"]] return f"{(sum(prices) / len(prices)):.2f} USD"
handlers.py
import aiohttp from aiogram import types from utils import * async def start(message: types.Message): await message.answer("Привет!\nНапиши мне акроним криптовалюты, чтобы узнать текущую цену.") async def help(message: types.Message): await message.answer("Доступные сети:\n" + "\n".join(networks)) async def get_price(message: types.Message): network = message.text.upper() if network not in networks: await message.answer("Вы указали неподдерживаемую криптовалюту") return session = aiohttp.ClientSession() async with session.get(BASE_URL + f"get_price/{message.text}/USD") as resp: data = await resp.json() if data["status"] == "success": price = calculate_price(data) await message.answer(price) else: await message.answer("Произошла ошибка")
main.py
from aiogram import Bot, Dispatcher, executor import handlers API_TOKEN = 'вставьте сюда ваш токен' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.register_message_handler(handlers.start, commands=["start"]) dp.register_message_handler(handlers.help, commands=["help"]) dp.register_message_handler(handlers.get_price) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)
Главное о телеграм-боте на Python
- 🟦 Телеграм-бот — это программа, которая автоматически отвечает на сообщения пользователей в телеграме.
- 🟦 Создание телеграм бота на Python начинается с установки интерпретатора языка. На Linux и macOS он часто уже есть.
- 🟦 Создайте папку для проекта с названием myBot. Внутри нее создайте виртуальное окружение, активируйте его и установите библиотеку aiogram. В этой библиотеке можно обрабатывать входящие запросы, в том числе в тех случаях, когда бот ждет ответа от пользователя — например, ввода текста или выбора кнопки.
- 🟦 Регистрируйте бота и управляйте его настройками с помощью @BotFather.
Добавить комментарий