Урок 75 из 84 · Telegram-бот на aiogram
Введение: как устроен бот
Содержание урока
Telegram-бот — это обычная программа на Python, которая общается с пользователями через Telegram. Пользователь пишет боту сообщение, Telegram передаёт его вашей программе, программа решает, что ответить, и отправляет ответ обратно.
В этой теме мы с нуля напишем бота на aiogram 3 — самой популярной библиотеке для Telegram-ботов на Python. Она асинхронная, поэтому один бот спокойно обслуживает тысячи пользователей одновременно. Если слово «асинхронная» пугает — загляните в урок Асинхронный Python, но для старта достаточно запомнить два слова: async и await.
Как бот получает сообщения
Ваша программа не подключается к пользователю напрямую. Между ними всегда стоит сервер Telegram:
Пользователь → сервер Telegram → ваш бот (Python)
Пользователь ← сервер Telegram ← ваш бот (Python)
Узнавать о новых сообщениях бот может двумя способами:
- Polling (опрос) — бот сам раз за разом спрашивает у Telegram: «Есть что-нибудь новое?». Работает где угодно, даже на ноутбуке без белого IP. Идеально для разработки.
- Webhook — Telegram сам присылает каждое сообщение на ваш сервер по HTTPS. Быстрее и экономнее, но нужен сервер с доменом. Используется в продакшене — разберём в последнем уроке темы.
Каждое событие от Telegram (новое сообщение, нажатие кнопки, вступление в группу) называется update — «обновление».
Шаг 1. Создаём бота в BotFather
Ботов в Telegram создаёт другой бот — @BotFather.
- Откройте @BotFather и отправьте команду
/newbot. - Придумайте имя, которое увидят пользователи, например «Мой первый бот».
- Придумайте username — он должен заканчиваться на
bot, напримерmy_first_atlas_bot. - В ответ BotFather пришлёт токен — строку вида
7412345678:AAH....
Шаг 2. Готовим проект
Создадим папку проекта и виртуальное окружение — отдельную «коробку» для библиотек этого проекта, чтобы они не смешивались с другими:
mkdir my_bot && cd my_bot
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install aiogram python-dotenv
aiogram— сама библиотека для бота;python-dotenv— читает настройки (например, токен) из файла.env, чтобы не писать их прямо в коде.
Шаг 3. Прячем токен в .env
Создайте в папке проекта файл .env:
BOT_TOKEN=7412345678:AAH-ваш-токен
И сразу добавьте его в .gitignore, чтобы токен не попал в репозиторий (подробнее — в уроке .gitignore):
venv/
.env
__pycache__/
Теперь токен можно достать в коде так:
import os
from dotenv import load_dotenv
load_dotenv() # читает файл .env
TOKEN = os.getenv("BOT_TOKEN") # берёт из него значение BOT_TOKEN
Из чего состоит бот на aiogram
Запомните четыре главных понятия — на них построены все следующие уроки:
| Понятие | Что это | Аналогия |
|---|---|---|
Bot |
Объект, который умеет отправлять запросы в Telegram: сообщения, фото, кнопки | Телефон, с которого вы звоните |
Dispatcher |
Получает обновления и решает, какой функции их отдать | Диспетчер такси |
Router |
Группа обработчиков — например, все команды админа | Отдел в компании |
| Хэндлер | Ваша функция, которая обрабатывает конкретное событие | Сотрудник, который выполняет заявку |
В следующем уроке соберём всё вместе и запустим первого бота.