Как создать Telegram бота с помощью библиотеки Aiogram 3

Создание Telegram бота стало довольно простым процессом благодаря мощным библиотекам, таким как aiogram. В данной статье мы подробно рассмотрим, как создать бота с использованием библиотеки aiogram 3.

Как создать Telegram бота с помощью библиотеки Aiogram 3
Краткое содержание

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

Установка необходимых зависимостей

Перед тем как начать, вам нужно убедиться, что у вас установлен Python версии 3.7 и выше. Установить библиотеку можно с помощью pip:

pip install aiogram==3.*

Эта команда установит последнюю версию aiogram 3.

Получение токена от BotFather

Прежде чем начать писать код, необходимо создать бота и получить его токен:

  1. Откройте Telegram и найдите BotFather.
  2. Используйте команду /newbot, чтобы создать нового бота.
  3. После создания вы получите токен, который необходим для взаимодействия с API Telegram.

Базовая структура проекта

Создадим файл bot.py, который будет содержать всю логику нашего бота. Также нужно будет создать виртуальное окружение для проекта и активировать его.

python -m venv venv
source venv/bin/activate   # для Linux/Mac
venv\Scripts\activate      # для Windows

Теперь приступим к написанию кода.

Импорт необходимых модулей

Для начала нам нужно импортировать необходимые компоненты из библиотеки aiogram 3.

from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
from aiogram import F
from aiogram.utils.keyboard import ReplyKeyboardBuilder
import asyncio
import logging
  • Bot — основной класс для взаимодействия с API Telegram.
  • Dispatcher — менеджер, который управляет событиями, поступающими от Telegram.
  • types — включает в себя типы данных, такие как сообщения, кнопки и т. д.
  • Command — фильтр для обработки команд от пользователя.

Логирование

Рекомендуется включить логирование для отслеживания действий бота:

logging.basicConfig(level=logging.INFO)

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

Затем создадим объект бота и диспетчера, используя токен, который мы получили от BotFather.

API_TOKEN = 'ваш токен'

# Инициализация бота
bot = Bot(token=API_TOKEN)

# Инициализация диспетчера
dp = Dispatcher()

Обработка команд

Бот должен уметь реагировать на команды от пользователя. Добавим обработчик для команды /start.

@dp.message(Command("start"))
async def cmd_start(message: Message):
    await message.answer("Привет! Я бот, созданный с помощью Aiogram 3.")

Здесь мы используем декоратор @dp.message, чтобы указать, что функция cmd_start должна срабатывать при получении команды /start. Внутри функции мы отправляем приветственное сообщение пользователю с помощью message.answer.

Обработка текстовых сообщений

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

@dp.message(F.text)
async def echo_message(message: Message):
    await message.answer(f"Ты сказал: {message.text}")

Этот код позволяет боту отправлять обратно то сообщение, которое отправил пользователь.

Добавление клавиатуры

Часто в чатах с ботом используются кнопки для удобного взаимодействия. Добавим простую клавиатуру с двумя кнопками.

@dp.message(Command("menu"))
async def show_menu(message: Message):
    builder = ReplyKeyboardBuilder()

    builder.button(text="Кнопка 1")
    builder.button(text="Кнопка 2")
    builder.adjust(2)  # Количество кнопок в одном ряду

    await message.answer("Выберите опцию:", reply_markup=builder.as_markup())

Мы создаем клавиатуру с двумя кнопками с помощью ReplyKeyboardBuilder. Важно отметить, что adjust(2) указывает, что кнопки будут расположены в один ряд по две.

Запуск бота

Теперь нужно запустить бота. Для этого используем метод start_polling. Этот метод позволяет боту постоянно получать обновления от Telegram и реагировать на них.

async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Функция main запускает бота с помощью start_polling, а asyncio.run управляет циклом событий асинхронного приложения.

Полный код бота

Итак, соберем всё вместе:

from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
from aiogram import F
from aiogram.utils.keyboard import ReplyKeyboardBuilder
import asyncio
import logging

# Логирование
logging.basicConfig(level=logging.INFO)

# Токен бота
API_TOKEN = 'ваш токен'

# Инициализация бота и диспетчера
bot = Bot(token=API_TOKEN)
dp = Dispatcher()

# Команда /start
@dp.message(Command("start"))
async def cmd_start(message: Message):
    await message.answer("Привет! Я бот, созданный с помощью Aiogram 3.")

# Команда /menu с клавиатурой
@dp.message(Command("menu"))
async def show_menu(message: Message):
    builder = ReplyKeyboardBuilder()

    builder.button(text="Кнопка 1")
    builder.button(text="Кнопка 2")
    builder.adjust(2)

    await message.answer("Выберите опцию:", reply_markup=builder.as_markup())

# Эхо-ответ на текстовые сообщения
@dp.message(F.text)
async def echo_message(message: Message):
    await message.answer(f"Ты сказал: {message.text}")

# Запуск бота
async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Почему стоит использовать aiogram?

1. Асинхронность

Одно из ключевых преимуществ Aiogram — это поддержка асинхронности. Благодаря использованию асинхронных функций и архитектуры на базе asyncio, библиотека позволяет:

  • Увеличить производительность: бот может обрабатывать множество запросов одновременно, не блокируя выполнение других операций.
  • Масштабируемость: асинхронные боты лучше подходят для больших проектов с высокой нагрузкой, где требуется обработка множества запросов за короткое время.

Другие библиотеки, такие как python-telegram-bot, по умолчанию используют синхронный код, что может ограничивать производительность и вызывать задержки при большом количестве пользователей.

2. Минимальные зависимости

Aiogram 3 не требует установки большого количества дополнительных библиотек. Это делает её легковесной и быстрой в установке. По сравнению с такими библиотеками, как Telethon, которая требует больше зависимостей для работы с API Telegram, Aiogram более минималистична.

3. Удобный и интуитивный API

Интерфейс Aiogram разработан таким образом, чтобы разработчики могли легко и быстро создавать ботов:

  • Простота работы с хэндлерами: фильтрация событий и команд выполняется через удобные декораторы, такие как @dp.message(Command('start')), что делает код более читаемым и управляемым.
  • Гибкость фильтров: библиотека предлагает мощную систему фильтров, таких как фильтрация по тексту, командам, медиа и другим параметрам сообщений, что позволяет легко адаптировать логику бота под различные сценарии.

4. Поддержка FSM (Finite State Machine)

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

Другие библиотеки, такие как pyTelegramBotAPI, не имеют такой встроенной поддержки FSM и требуют дополнительных инструментов для управления состояниями.

5. Поддержка Webhooks и Polling

Aiogram поддерживает оба способа получения обновлений от Telegram API:

  • Polling (опрос сервера) — простой и удобный для разработки.
  • Webhooks — более эффективный и производительный способ работы для продакшн-окружений, где бот может обрабатывать запросы, не создавая лишнюю нагрузку на сервер.

Эта гибкость позволяет использовать Aiogram в различных сценариях, от разработки маленьких ботов до крупных проектов.

6. Мидлвары

Aiogram 3 предоставляет возможность использования мидлваров (middleware) для обработки данных на разных этапах, что облегчает:

  • Авторизацию.
  • Логирование.
  • Кэширование.
  • Обработку исключений.

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

7. Сообщество и документация

  • Aiogram имеет активное сообщество разработчиков и поддерживается множеством примеров и обсуждений на форумах и в GitHub.
  • Документация библиотеки регулярно обновляется и предоставляет примеры кода, которые легко адаптировать под нужды пользователя.

В то время как другие библиотеки могут страдать от недостаточной документации или устаревших примеров, Aiogram активно развивается и поддерживается.

Лучше всего документация на русском описана тут https://mastergroosha.github.io/aiogram-3-guide/

8. Поддержка новых API Telegram

Aiogram 3 быстро адаптируется под обновления Telegram API, предоставляя разработчикам доступ к новым функциям платформы, таким как поддержка новых типов сообщений, улучшенные клавиатуры, интерактивные элементы и так далее. Это делает библиотеку актуальной и современной.

9. Расширяемость

Благодаря удобной структуре и архитектуре, Aiogram легко расширяется за счёт подключения дополнительных модулей или создания собственных компонентов. Библиотека позволяет легко интегрировать сторонние API, базы данных, системы управления кэшем и многое другое.

10. Лёгкость обучения и интеграции

За счёт хорошо продуманного API и обширных примеров Aiogram легче изучить и быстрее начать использовать даже начинающим разработчикам. Код на базе Aiogram 3 часто выглядит лаконично и логично, что делает библиотеку удобной для интеграции в существующие проекты.

Aiogram 3 — это мощная, асинхронная, гибкая и легко расширяемая библиотека для создания Telegram ботов. Её преимущества, такие как поддержка асинхронности, встроенная система конечных автоматов, мидлвары и поддержка новых API Telegram, делают её отличным выбором как для небольших, так и для масштабных проектов.

Если у вас есть дополнительные вопросы, задавайте в комментариях или в группе телеграмм: https://t.me/nerditru

Подписаться на новости Nerd IT

Не пропустите последние выпуски. Зарегистрируйтесь сейчас, чтобы получить полный доступ к статьям.
jamie@example.com
Подписаться