Урок 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.

  1. Откройте @BotFather и отправьте команду /newbot.
  2. Придумайте имя, которое увидят пользователи, например «Мой первый бот».
  3. Придумайте username — он должен заканчиваться на bot, например my_first_atlas_bot.
  4. В ответ 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 Группа обработчиков — например, все команды админа Отдел в компании
Хэндлер Ваша функция, которая обрабатывает конкретное событие Сотрудник, который выполняет заявку

В следующем уроке соберём всё вместе и запустим первого бота.

Отзыв