Создание Telegram-бота на Aiogram: пошаговое руководство с фото

0
53

Памятка: ключевые шаги для запуска бота

  1. Установите Python версии 3.8 или выше.
  2. Создайте виртуальное окружение для проекта.
  3. Установите библиотеку aiogram через pip.
  4. Получите токен бота у BotFather.
  5. Создайте файл main.py и импортируйте aiogram.
  6. Напишите простейшего эхо-бота для проверки связи.
  7. Структурируйте проект на пакеты (handlers, keyboards, utils).
  8. Настройте логирование для отслеживания ошибок.
  9. Протестируйте бота локально с помощью polling.
  10. Разверните бота на сервере (VPS или Docker).

Первый этап: подготовка проекта и развертывание окружения

Телеграм - изображение номер один
Телеграм — изображение номер один

Найдем в поиске Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой иструкции это будут Elbrus Reminder и elbrus_reminder_bot соответственно.

Токен нужно хранить в безопасном месте — он дает контроль над ботом. и, как следствие, позволяет получить доступ к данным пользователей.

На время закроем Telegram и создадим на компьютере папку с именем проекта: например, reminder_bot. Откроем папку в среде разработки и создадим рабочий файл с понятным названием —.

Откроем терминал редактора кода и создадим для проекта новое окружение. В среде разработки с помощью команды python -m venv.venv создадим папку с окружением.venv.

Если окружение не активировалось автоматически, можно сделать это вручную, прописав путь к файлу активации в формате source.venv/bin/activate, где source — команда языка программирования Bash. Другой вариант — перезапустить среду разработки. Он работает для Visual Studio Code, но нужно предварительно принять предложение редактора привязать среду к папке проекта сразу после создания окружения.

Установка Python

Создаем - изображение номер два
Создаем — изображение номер два

Для написания Телеграм бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать пайтон можно с официального сайта. Версия важна. Нам подойдет Python не ниже версии 3.7. Если же у вас Linux или macOS, то, скорее всего, у вас стоит Python 3.6. Как обновиться, можете почитать здесь.

Установка pip

Чат-бот в - изображение номер три
Чат-бот в — изображение номер три

Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

Второй этап: подключаем библиотеки

Как создать - изображение номер четыре
Как создать — изображение номер четыре

Проект создан и окружение готово: пора переходить к написанию кода. По правилам хорошего тона в первую очередь через import добавляем несколько предустановленных библиотек Python. При создании бота нам пригодятся logging и time, которые отвечают за определение времени и логирование сообщений.

Затем добавим асинхронную библиотеку aiogram, на основе которой будет работать бот. Она, например, определяет, какое сообщение пришло, как его нужно обработать и какие порты нужны. Сначала устанавливаем ее через терминал командой pip install aiogram, а в редакторе кода пишем следующее:

Из этой библиотеки нам нужны только отдельные модули и классы — все ее возможности для создания базовой версии бота не пригодятся. Поэтому вместо одиночного import использована команда from {} import {}.

Когда библиотеки импортированы, создадим переменные с токеном бота и сообщением, которое он будет отправлять пользователю. Вы можете заменить это сообщение на любое другое, которое вам необходимо. Это статические переменные, поэтому их имена написаны капслоком:

Токены, ключи и прочие данные для настройки проекта лучше загружать более безопасным способом (например, создавать переменные окружения или файлы конфигурации). Но в данном случае сделаем все в одном файле для наглядности, а примеры более безопасной работы с такими переменными разберем в следующих постах.

Теперь создадим экземпляр класса Bot, передав ему в качестве аргумента наш токен, и экземпляр класса Dispatcher (dp), который в качестве аргумента получит bot. В результате получаем связку объекта класса bot с ключем, который привязан к боту, и диспетчера, который привязан к этому боту:

Функция приветствует пользователя и обрабатывает сообщение, которое он отправляет в ответ. Из сообщения можно получить информацию о пользователе, который его прислал, время отправки и его ID.

Для того, чтобы в логах отображалась информация о пользователе, передаем в виде текста ID и полное имя, а также используем возможности библиотеки time, чтобы определить время, когда писал пользователь:

Здесь отойдем в сторону и проверим корректность работы модуля time. Сделать это можно в терминале: для этого напишем import time, а затем —

Вернемся к коду. Поскольку функция, которую мы используем, асинхронна, вместо обычного для функций return используем await:

Ответить пользователю в боте можно несколькими способами — в данном случае используем reply.Выше в переменной MSG мы задали стандартное сообщение: «Программировал ли ты сегодня, {}?». Зададим частоту напоминаний: семь раз каждые семь суток (60х60х24 — количество секунд в одних сутках) с момента отправки команды /start боту от пользователя:

Затем настроим отправку сообщения с указанием имени пользователя в этом же цикле:

Подробнее об Aiogram

Обзор - изображение номер пять
Обзор — изображение номер пять

Это фреймворк для Telegram API. Он полностью асинхронный, написан на питоне с async/await.

В aiogram есть хендлеры — функции, обрабатывающие сообщения от пользователей, для каждой команды создаются свои хендлеры.

Команды передаются через декораторы без символа «/». Async указывает, что функция работает асинхронно, а await используется для приостановки выполнения до получения результата, без блокировки программы.

Aiogram также предлагает множество инструментов и полный доступ к Телеграм API для работы с сообщениями, клавиатурой, медиафайлами и другими функциями.

Настройка

Разметка сообщений - изображение номер шесть
Разметка сообщений — изображение номер шесть

Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:

Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.

Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ, например в GitHub-репозиторий.

Далее начните беседу. Введите в поисковой строке имя бота и нажмите /start. Отправьте любое сообщение: оно станет первым обновлением, которое получит Телеграм бот.

Создание Бота через BotFather

Как создать бота обратной связи в - изображение номер семь
Как создать бота обратной связи в — изображение номер семь

Для начала перейдем в BotFather (специальный телеграмм бот для генерации друих ботов) и создадим нашего бота:

  • Жмем на «Старт»
  • Вводим команду /newbot
  • Указываем имя бота (можно на русском, можно будет изменить)
  • Указываем логин бота (логин должен быть уникальным и содержать приписку BOT в любом регистре, после создания изменить будет нельзя)
  • Копируем токен бота

Как создать бота в - изображение номер восемь
Как создать бота в — изображение номер восемь

Структура Проекта

Как правильно организовать структуру проекта для вашего - изображение номер девять
Как правильно организовать структуру проекта для вашего — изображение номер девять

Предлагаю вашему вниманию свой проверенный временем формат «болванки бота» (стартового шаблона). Хотя он может быть не идеален, но он прошел проверку множеством проектов. Эта структура удобна в поддержке и легко расширяется. Вот как она выглядит:

Aiogram - изображение номер десять
Aiogram — изображение номер десять

ADMINS: Список телеграмм ID администраторов (можно хранить и в базе данных, но на старте так удобнее)

По поводу PostgreSQL. Я разработал собственный класс на основе asyncpg, который позволяет универсально работать как с Telegram-ботами, так и с любыми другими проектами, где требуется асинхронное взаимодействие с базой данных.

В сегодняшней статье я не буду рассматривать код моего класса, но если вам будет интересно, мы обязательно обсудим его в следующих публикациях. Если вы новичок в работе с PostgreSQL, рекомендую ознакомиться с моей статьей, в которой я подробно рассказал, как за 5 минут развернуть Docker-контейнер с PostgreSQL на своем VPS сервере. Надеюсь, что эта статья окажется для вас полезной и вы сможете вывести ее из кармической ямы.

Пакет db_handler

#02 - изображение номер одиннадцать
#02 — изображение номер одиннадцать

В этом пакете я всегда размещаю файл с универсальным хендлером для работы с PostgreSQL. Я использую его во всех своих проектах, будь то Telegram-боты или любые другие приложения, где требуется база данных.

ЧИТАТЬ ТАКЖЕ:  Перебор строк в Python: как сделать обход с помощью циклов и функций

Также здесь находятся отдельные файлы для специфического взаимодействия с базой данных, например, для сложных и многоуровневых SQL-запросов, которые основной класс не охватывает.

В будущем я планирую написать отдельную статью с подробным разбором этого класса и его интеграцией в Telegram-ботов вместе с FSM (машиной состояний).

Пакет handlers

Разработка телеграм ботов на - изображение номер двенадцать
Разработка телеграм ботов на — изображение номер двенадцать

Здесь я размещаю хендлеры для работы с ботом: админ-панель, пользовательскую часть, анкеты и т.д. В моём примере это отдельные файлы, но в крупных проектах они структурируются в отдельные пакеты под разные задачи.

С появлением роутинга в версии 3 стало ещё проще: теперь можно назначить каждому хендлеру свой роутер, не перемещая диспетчер. Сегодня я покажу, как это делать.

Пакет keyboards

Клавиатура в - изображение номер тринадцать
Клавиатура в — изображение номер тринадцать

В этом пакете я храню файлы с клавиатурами: отдельный файл для админских клавиатур, другой для пользовательских и т.д. В небольших ботах, где клавиатур немного, я размещаю их в одном файле, но это уже на ваше усмотрение. Сегодня клавиатуры рассматривать не будем.

Пакет work_time

СОЗДАНИЕ - изображение номер четырнадцать
СОЗДАНИЕ — изображение номер четырнадцать

Здесь я прописываю функции, которые должны работать по расписанию с использованием модуля APScheduler. Сегодня мы эту тему затрагивать не будем, но знайте, что такая возможность существует.

Пакет utils

Как сделать - изображение номер пятнадцать
Как сделать — изображение номер пятнадцать

В этот пакет я помещаю утилиты, полезные для работы бота. Например, сюда могут входить скрипты для вывода текущей даты и времени, конвертеры, калькуляторы и другие вспомогательные функции.

Пакет middlewares

Middleware в - изображение номер шестнадцать
Middleware в — изображение номер шестнадцать

Middleware в aiogram — это промежуточный слой, который вызывается автоматически после получения запроса и перед его обработкой сервером. Они могут быть полезны для выполнения различных задач, таких как:

  • Логгирование запросов
  • Добавление полезной нагрузки

Примером такого промежуточного слоя может быть скрипт, проверяющий, подписан ли пользователь на определённый канал, или скрипт, проверяющий выполнение определённых действий.

Пакет filters

#6 - изображение номер семнадцать
#6 — изображение номер семнадцать

Фильтры в aiogram позволяют ограничивать обработку определённых типов сообщений или команд, что помогает создать более точную и гибкую логику обработки запросов. Например, с помощью фильтров можно настроить бота так, чтобы он реагировал только на текстовые сообщения, команды от конкретных пользователей или проверял, является ли пользователь администратором.

На представленном выше скриншоте показан фильтр, который проверяет, является ли пользователь администратором.

В этом файле прописываю инструкции для systemd, чтобы быстро развернуть бота на сервере в режиме автозапуска. Этой теме планирую посвятить отдельную статью, сегодня касаться не будем.

Файл create_bot.py

Телеграмм бот на - изображение номер восемнадцать
Телеграмм бот на — изображение номер восемнадцать

Как сделать своего первого - изображение номер девятнадцать
Как сделать своего первого — изображение номер девятнадцать

  • Импортируем необходимые библиотеки и модули.
  • Создаем объект для работы с базой данных PostgreSQL (на основе моего класса, пока можно закомментировать).
  • Создаем планировщик задач.
  • Настраиваем список администраторов.
  • Настраиваем логирование.
  • Инициализируем бота и диспетчера.

Создаем объект для работы с базой данных PostgreSQL (на основе моего класса, пока можно закомментировать).

  1. import logging: Импортируем библиотеку для логирования, чтобы записывать события и ошибки в процессе работы бота.
  2. from aiogram import Bot, Dispatcher: Импортируем классы Bot и Dispatcher из библиотеки aiogram, которые необходимы для создания и управления ботом.
  3. from import MemoryStorage: Импортируем класс MemoryStorage для хранения состояний конечного автомата (FSM) в памяти.
  4. from decouple import config: Импортируем функцию config из библиотеки python-decouple для загрузки переменных окружения из файла.env.
  5. from import AsyncIOScheduler: Импортируем класс AsyncIOScheduler из библиотеки APScheduler для планирования задач (например, выполнение скриптов по времени).
  6. from db_handler.db_class import PostgresHandler: Импортируем твой кастомный класс PostgresHandler для работы с базой данных Postgres.

import logging: Импортируем библиотеку для логирования, чтобы записывать события и ошибки в процессе работы бота.

from aiogram import Bot, Dispatcher: Импортируем классы Bot и Dispatcher из библиотеки aiogram, которые необходимы для создания и управления ботом.

from import MemoryStorage: Импортируем класс MemoryStorage для хранения состояний конечного автомата (FSM) в памяти.

from decouple import config: Импортируем функцию config из библиотеки python-decouple для загрузки переменных окружения из файла.env.

from db_handler.db_class import PostgresHandler: Импортируем твой кастомный класс PostgresHandler для работы с базой данных Postgres.

Инициализация объектов

C# и - изображение номер двадцать
C# и — изображение номер двадцать

Открываем pg - изображение номер двадцать один
Открываем pg — изображение номер двадцать один

pg_db = PostgresHandler(config(‘PG_LINK’)): Создаем объект класса PostgresHandler для работы с базой данных. Строка подключения к базе данных загружается из переменной окружения PG_LINK. Завязана инициализация на мой класс о котором поговорим в следующий раз.

Настройка администраторов

Как сделать меню для - изображение номер двадцать два
Как сделать меню для — изображение номер двадцать два

Как добавить бота в - изображение номер двадцать три
Как добавить бота в — изображение номер двадцать три

admins = [int(admin_id) for admin_id in config(‘ADMINS’).split(‘,’)]: Создаем список ID администраторов бота. Загружаем строку с ID администраторов из переменной окружения ADMINS, разделяем её по запятым и преобразуем каждый элемент в целое число.

Настройка логирования

Как настроить логирование в - изображение номер двадцать четыре
Как настроить логирование в — изображение номер двадцать четыре

Как писать телеграмм ботов на языке программирования python?Изучение библиотеки - изображение номер двадцать пять
Как писать телеграмм ботов на языке программирования python?Изучение библиотеки — изображение номер двадцать пять

(level=, format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’): Настраиваем базовое логирование с уровнем INFO, чтобы записывать важные сообщения. Устанавливаем формат логов, включающий время, имя логгера и уровень сообщения.

logger = (__name__): Создаем логгер с именем текущего модуля, чтобы записывать лог-сообщения.

Инициализация бота и диспетчера

Запуск - изображение номер двадцать шесть
Запуск — изображение номер двадцать шесть

Программирование ботов на языке - изображение номер двадцать семь
Программирование ботов на языке — изображение номер двадцать семь

bot = Bot(token=config(‘TOKEN’),default=DefaultBotProperties(parse_mode=)): Создаем объект Bot с токеном, загруженным из переменной окружения TOKEN. По умолчанию прописал, чтоб бот корректно вопринимал HTML теги для форматирования текста (заслуживает отдельного обсуждения).

Конструкция dp = Dispatcher(storage=MemoryStorage()) в данном контексте выполняет несколько ключевых задач в рамках создания Telegram-бота с использованием библиотеки aiogram:

Dispatcher — это основной объект, отвечающий за обработку входящих сообщений и других обновлений, поступающих от Telegram. Именно через диспетчер проходят все сообщения и команды, отправляемые пользователями бота.

  • storage=MemoryStorage() указывает, что для хранения состояния конечных автоматов (FSM) используется память (RAM). Это значит, что состояния пользователей будут храниться в оперативной памяти (тема большой отдельной статьи).
  • FSM (Finite State Machine) используется для управления состояниями диалога с пользователем. Это позволяет боту «помнить» текущий шаг разговора и реагировать на действия пользователя в соответствии с текущим состоянием.

storage=MemoryStorage() указывает, что для хранения состояния конечных автоматов (FSM) используется память (RAM). Это значит, что состояния пользователей будут храниться в оперативной памяти (тема большой отдельной статьи).

FSM (Finite State Machine) используется для управления состояниями диалога с пользователем. Это позволяет боту «помнить» текущий шаг разговора и реагировать на действия пользователя в соответствии с текущим состоянием.

Файл aiogram_run.py

Creating an - изображение номер двадцать восемь
Creating an — изображение номер двадцать восемь

Telegram бот на - изображение номер двадцать девять
Telegram бот на — изображение номер двадцать девять

  • Импортируем необходимые модули и функции.
  • Определяем основную асинхронную функцию main.
  • Настраиваем и запускаем бота в режиме опроса.

Так как мы с вами не писали work_time.time_func код данный импорт, как и использование в главной функции пока комментируем. К данному вопросу вернемся позже.

Основная асинхронная функция

#1 - изображение номер тридцать
#1 — изображение номер тридцать

Разработка - изображение номер тридцать один
Разработка — изображение номер тридцать один

scheduler.add_job(send_time_msg, ‘interval’, seconds=10): Добавляем задачу в планировщик scheduler. Задача send_time_msg будет выполняться каждые 10 секунд.

(): Запускаем планировщик задач, чтобы он начал выполнять добавленные задачи по расписанию.

await dp.start_polling(bot): Запускаем бота в режиме опроса (polling). Бот начинает непрерывно запрашивать обновления с сервера Telegram и обрабатывать их (о том как писать aiogram 3 бота через технологию вебхуков в связке с FastApi я писал в одной из своих прошлых публикаций).

Файл handlers/

Aiogram 1 - изображение номер тридцать два
Aiogram 1 — изображение номер тридцать два

aiogram bot для вуза и куча всего остального / - изображение номер тридцать три
aiogram bot для вуза и куча всего остального / — изображение номер тридцать три

Из библиотеки aiogram мы импортировали Router и F, также известный как «магический фильтр».

Router используется для удобного масштабирования проекта. Благодаря ему, мы можем отказаться от необходимости импортировать Dispatcher в каждом хендлере. Вместо этого роутеры берут на себя эту роль, упрощая структуру кода и улучшая его читаемость.

F, или «магический фильтр», позволяет «на лету» фильтровать входящие события и выдавать нужные результаты. По сравнению со старой версией aiogram, использование F сокращает код в полтора-два раза в некоторых случаях. Это нововведение настолько мощное и обширное, что я планирую посвятить ему отдельную статью.

Доступ к данным осуществляется через точку. Пример: (получаем текст сообщения).

Рассмотрим каждую функцию в отдельности

Роутеры и структура бота - изображение номер тридцать четыре
Роутеры и структура бота — изображение номер тридцать четыре

Flask и декораторы - online presentation - изображение номер тридцать пять
Flask и декораторы — online presentation — изображение номер тридцать пять

Эта функция использует декоратор @start_router.message с фильтром CommandStart(). Такой подход избавляет нас от необходимости вручную регистрировать каждую функцию в файле запуска бота (например, в register_handler). Благодаря такой реализации, разработка становится проще и чище.

Мы передали в декоратор параметр message с аннотацией типа Message. Это позволяет выполнять await, что аналогично использованию await bot.send_message, но без необходимости передавать chat_id. Бот автоматически понимает, кому нужно отправить сообщение.

ЧИТАТЬ ТАКЖЕ:  Вывод списка без скобок в Python: в столбик и в строку

В данной функции бот отправляет заранее подготовленное сообщение при команде /start. Это стало возможным благодаря фильтру CommandStart().

Мощная функция - изображение номер тридцать шесть
Мощная функция — изображение номер тридцать шесть

Эта функция аналогична предыдущей, но использует фильтр Command(). В этом случае мы явно указываем команду, на которую должен реагировать бот (/start_2). Остальная логика остаётся такой же.

Коммутатор и маршрутизатор: основные различия - изображение номер тридцать семь
Коммутатор и маршрутизатор: основные различия — изображение номер тридцать семь

Интеграция роутера

Роутеры и структура - изображение номер тридцать восемь
Роутеры и структура — изображение номер тридцать восемь

🔮 - изображение номер тридцать девять
🔮 — изображение номер тридцать девять

Как вы поняли, мы можем включать неограниченное количество роутеров, что делает структуру бота гибкой и расширяемой.

Роутер aiogram - изображение номер сорок
Роутер aiogram — изображение номер сорок

Прекрасно, что бот успешно запущен и работает в режиме поллинга! Давайте подытожим, что мы сделали и какие результаты получили:

Бот запущен и сообщает о том, что он работает в режиме поллинга. Это значит, что бот периодически проверяет сервер Telegram на наличие новых сообщений.

  • Имя бота
  • Логин бота
  • ID бота

Telegram - изображение номер сорок один
Telegram — изображение номер сорок один

Конечно, пока внешний вид бота может показаться немного простым, но это легко исправить. Мы всегда можем улучшить его, добавив логотип, описание и приветственное фото.

КОММУТАТОР - изображение номер сорок два
КОММУТАТОР — изображение номер сорок два

Мы видим, что бот отреагировал на команду /start именно так, как мы это задумали. Теперь давайте попробуем выполнить команду /start_2 и /start_3:

Как установить и настроить - изображение номер сорок три
Как установить и настроить — изображение номер сорок три

И остальные команды отработали безупречно, что подтверждает функциональность наших фильтров и роутера. Теперь мы можем переходить к выводам.

Мы рассмотрели основные концепции и нововведения, которые делают работу с aiogram более удобной и эффективной.

Если вам интересна эта тема, мы можем продолжить изучение и углубиться в более сложные аспекты разработки ботов, включая работу с базами данных, планировщиками задач, клавиатурами, файлами и продвинутыми фильтрами.

P.S. Не забудьте принять участие в голосовании под этой статьей, ведь именно вы сможете выбрать тему будущей публикации. Также оставляйте комментарии поддержки и ставьте лайки, ведь на написание статей уходит значительно много времени и усилий, а ваш отклик действительно мотивирует.

🔮 - изображение номер сорок четыре
🔮 — изображение номер сорок четыре

Aiogram 3 - изображение номер сорок пять
Aiogram 3 — изображение номер сорок пять

Hello, bot!

Многоуровневое меню - изображение номер сорок шесть
Многоуровневое меню — изображение номер сорок шесть

Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеки и создать экземпляры Телеграм бота и диспетчера:

Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help:

Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:

Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.

Третий этап: финал

ОСНОВА - изображение номер сорок семь
ОСНОВА — изображение номер сорок семь

Переходим к финальной части: в конце скрипта напишем несколько строк. Они могут показаться странными для новичка, но это общепринятая практика, к которой многие программисты прибегают при разработке. В этой строке мы проверяем, равна ли переменная __name__ строке «__main__». Это условие всегда будет True, если мы запускаем этот файл как python-скрипт через терминал:

Docker

КАК - изображение номер сорок восемь
КАК — изображение номер сорок восемь

Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:

  • ;
  • Dockerfile.

Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:

my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.

-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.

Деплой на AWS

Размещение телеграмм бота (Aiogram3) на - изображение номер сорок девять
Размещение телеграмм бота (Aiogram3) на — изображение номер сорок девять

Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:

  1. Локально или с помощью пайплайнов собрали контейнер.
  2. Загрузили его на докер хаб.
  3. В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
  4. Запустили.

Пройдёмся по этим шагам. Везде, где указано <docker_hub_username>, надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.

Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:

Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.

Telegram‑бот для (само)дисциплины на - изображение номер пятьдесят
Telegram‑бот для (само)дисциплины на — изображение номер пятьдесят

Самый простой способ удаленного запуска бота

Пишем простого телеграм-бота конвертирующего аудио в текст на - изображение номер пятьдесят один
Пишем простого телеграм-бота конвертирующего аудио в текст на — изображение номер пятьдесят один

В заключение статьи я хотел бы продемонстрировать, как легко и быстро можно развернуть бота удаленно буквально в пару команд. Вместо использования VPS сервера с Linux и многочисленными командами, мы воспользуемся отечественным аналогом Heroku — Amvera Cloud.

Я решил рассказать о нем, потому что, на мой взгляд, работа с терминалом Linux может отпугнуть новичков: настройка, ввод команд, SSH и прочее. К тому же, для первых проектов нет смысла платить за VPS 600 рублей в месяц или больше.

Amvera Cloud берет на себя все хлопоты с настройкой. Он автоматически создаст простой конфигурационный файл, который нужно будет разместить в корне проекта, а после, для деплоя, вам достаточно будет выполнить несколько простых команд в терминале или вовсе, закинуть файлы на сервис прямо через панель управления.

К тому же, для тестирования сервиса вам выдадут подарочный баланс в размере 111 рублей, чтобы вы могли понять, подходит ли вам работа с этим сервисом. Этого хватит вам на пару недель плотного тестирования.

Подготовка

12 - изображение номер пятьдесят два
12 — изображение номер пятьдесят два

Если вы используете дополнительные библиотеки, обязательно укажите их в этом файле, чтобы необходимые модули автоматически установились в проект.

Если у вас еще не установлен GIT на компьютере, установите его. Он понадобится для выполнения двух простых команд. Не волнуйтесь, это несложно.

Когда файлы бота готовы, приступим к работе с сервисом, выполняя следующие шаги:

  1. Регистрируемся на сайте Amvera Cloud.
  2. Переходим в раздел проектов
  3. Создаем первый проект, заполняя следующие поля:На стартовом экране указываем имя проекта, выбираем «приложение» и подбираем тарифный план. Средства с баланса снимаются постепенно, так что в бесплатной версии можно выбрать даже самый мощный тариф, но для примера я возьму самый первый (его будет достаточно для простых ботов).

На стартовом экране указываем имя проекта, выбираем «приложение» и подбираем тарифный план. Средства с баланса снимаются постепенно, так что в бесплатной версии можно выбрать даже самый мощный тариф, но для примера я возьму самый первый (его будет достаточно для простых ботов).

Как скопировать ссылку и отправить? - изображение номер пятьдесят три
Как скопировать ссылку и отправить? — изображение номер пятьдесят три

Как скопировать ссылку - изображение номер пятьдесят четыре
Как скопировать ссылку — изображение номер пятьдесят четыре

Копируем ссылку, указанную стрелкой (позже станет понятно, зачем она нужна).

Сделать - изображение номер пятьдесят пять
Сделать — изображение номер пятьдесят пять

Telegram бот на python - курс по созданию бота по документации aiogram и - изображение номер пятьдесят шесть
Telegram бот на python — курс по созданию бота по документации aiogram и — изображение номер пятьдесят шесть

Telegram бот на python с aiogram 3 2 часть - изображение номер пятьдесят семь
Telegram бот на python с aiogram 3 2 часть — изображение номер пятьдесят семь

Voice - изображение номер пятьдесят восемь
Voice — изображение номер пятьдесят восемь

Курс - изображение номер пятьдесят девять
Курс — изображение номер пятьдесят девять

Простой - изображение номер шестьдесят
Простой — изображение номер шестьдесят

ПЕРЕВОДЧИК бот в - изображение номер шестьдесят один
ПЕРЕВОДЧИК бот в — изображение номер шестьдесят один

Как написать бота в - изображение номер шестьдесят два
Как написать бота в — изображение номер шестьдесят два

Вы будете удивлены, но этого достаточно. Теперь остается подождать пару мгновений, и ваш бот станет активным!

User-боты в - изображение номер шестьдесят три
User-боты в — изображение номер шестьдесят три

Обратите внимание: на сервисе может долго висеть плашка «Выполняется запуск», но ваш бот будет доступен. Просто проверяйте работает ли ваш бот.

Создаём телеграм-бота генерирующего факты на - изображение номер шестьдесят четыре
Создаём телеграм-бота генерирующего факты на — изображение номер шестьдесят четыре

Часто задаваемые вопросы по созданию бота на Aiogram

Вопрос: Какую библиотеку выбрать для Telegram-бота на Python?
Ответ: Для создания ботов на Python рекомендуется использовать aiogram, так как это современная, асинхронная и хорошо документированная библиотека.

Вопрос: Как получить токен для Telegram-бота?
Ответ: Токен выдается бесплатно при создании нового бота через официального бота BotFather в Telegram.

Вопрос: Где лучше разместить Telegram-бота?
Ответ: Для постоянной работы бота лучше всего использовать облачные серверы (VPS) или сервисы вроде AWS, Heroku или собственный выделенный сервер.

Вопрос: Чем polling отличается от webhook в aiogram?
Ответ: Polling — это когда бот сам периодически опрашивает сервер Telegram о новых сообщениях. Webhook — это когда сервер Telegram сам отправляет данные на ваш сервер при появлении нового сообщения.

Вопрос: Какой минимальный набор пакетов нужен для старта?
Ответ: Для старта достаточно установить сам aiogram и, при необходимости, aiohttp для работы с вебхуками.

Вопрос: Нужно ли знать асинхронное программирование для работы с aiogram?
Ответ: Да, aiogram построен на асинхронности (asyncio), поэтому базовое понимание async/await обязательно.

Вопрос: Как обрабатывать команды в aiogram?
Ответ: Команды обрабатываются с помощью декораторов (например, @dp.message_handler(commands=[‘start’])) или через роутеры и хендлеры.

Вопрос: Можно ли использовать aiogram для создания игр?
Ответ: Да, aiogram поддерживает все возможности Telegram Bot API, включая HTML5-игры и инлайн-режимы.

Вопрос: Как обновить aiogram до последней версии?
Ответ: Используйте команду pip install —upgrade aiogram в вашем виртуальном окружении.

Вопрос: Что делать, если бот не отвечает на команды?
Ответ: Проверьте, запущен ли ваш скрипт, активен ли токен, и нет ли ошибок в коде (например, в логах консоли).