Найти в Дзене
Код в кармане

Aiogram для начинающих: Создаем интерактивных Telegram-ботов

Оглавление

Aiogram — мощный и удобный фреймворк для создания Telegram-ботов на Python. Он предоставляет асинхронный подход, что делает ботов более отзывчивыми и способными обрабатывать большое количество запросов. Давай разберем, как создать простого бота с использованием Aiogram.

1. Подготовка окружения

  • Установка Python: Убедитесь, что у вас установлен Python (версии 3.7 и выше).
  • Создание виртуального окружения (рекомендуется):
python3 -m venv venv # Создание виртуального окружения
source venv/bin/activate # Активация (Linux/macOS)
venv\Scripts\activate # Активация (Windows)
  • Установка Aiogram:
pip install aiogram

2. Создание бота в Telegram через @BotFather

Вам нужно создать бота через @BotFather в Telegram:

  • Запустите @BotFather и отправьте команду /newbot.
  • Следуйте инструкциям, чтобы задать имя и username для вашего бота.
  • Получите токен доступа (API Token) и сохраните его.

3. Написание кода бота (пример эхо-бота)

Создадим файл main.py и напишем следующий код:

import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
# Замените на свой токен
BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"
# Включаем логирование, чтобы не пропустить важные сообщения
logging.basicConfig(level=logging.INFO)
# Создаем объекты бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
# Обработчик команды /start
@dp.message(CommandStart())
async def command_start_handler(message: types.Message) -> None:
"""
Этот обработчик реагирует на команду /start
"""
await message.answer(f"Привет, {message.from_user.full_name}!")
# Обработчик текстовых сообщений (эхо)
@dp.message()
async def echo_handler(message: types.Message) -> None:
"""
Этот обработчик повторяет все текстовые сообщения
"""
try:
await message.send_copy(chat_id=message.chat.id)
except TypeError:
await message.answer("Не могу скопировать это сообщение.")
async def main() -> None:
# Запускаем получение обновлений
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())

Разберем код:

  • Импортируются необходимые модули из aiogram.
  • BOT_TOKEN — ваш токен доступа. Обязательно замените YOUR_TELEGRAM_BOT_TOKEN на свой токен.
  • Настраивается логирование для отладки.
  • Создаются объекты Bot и Dispatcher.
  • @dp.message(CommandStart()) — декоратор, который регистрирует функцию command_start_handler как обработчик команды /start.
  • @dp.message() — декоратор, который регистрирует функцию echo_handler как обработчик всех текстовых сообщений.
  • async def — ключевое слово, обозначающее асинхронные функции.
  • await — ключевое слово, которое используется для ожидания выполнения асинхронной операции.
  • message.answer() — отправляет ответное сообщение пользователю.
  • message.send_copy() - отправляет копию сообщения пользователя.
  • asyncio.run(main()) — запускает асинхронный цикл событий.

4. Запуск бота

Запустите скрипт main.py:

python main.py

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

5. Преимущества Aiogram

  • Асинхронность: Aiogram использует асинхронный подход, что позволяет боту обрабатывать множество запросов одновременно, не блокируя основной поток.
  • Удобные обработчики: Декораторы @dp.message(), @dp.callback_query() и другие упрощают регистрацию обработчиков различных типов событий.
  • Фильтры: Aiogram предоставляет мощные фильтры для отбора сообщений по различным критериям (текст, команды, типы контента и т.д.).
  • FSM (Finite State Machine): Поддержка конечных автоматов для управления сложными диалогами с пользователем.
  • Inline-клавиатуры: Удобные инструменты для создания интерактивных кнопок прямо в сообщениях.

6. Расширение функциональности (пример с кнопками)

import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
from aiogram.utils.keyboard import InlineKeyboardBuilder
# ... (предыдущий код)
@dp.message(CommandStart())
async def command_start_handler(message: types.Message) -> None:
builder = InlineKeyboardBuilder()
builder.button(text="Кнопка 1", callback_data="button_1")
builder.button(text="Кнопка 2", callback_data="button_2")
await message.answer(
"Привет! Выберите кнопку:",
reply_markup=builder.as_markup()
)
@dp.callback_query()
async def button_callback_handler(query: types.CallbackQuery):
if query.data == "button_1":
await query.message.answer("Вы нажали кнопку 1!")
elif query.data == "button_2":
await query.message.answer("Вы нажали кнопку 2!")
await query.answer() # Обязательно нужно ответить на запрос, чтобы убрать "часики"
# ... (остальной код)

В этом примере добавляются inline-кнопки и обработчик нажатий на них.

7. Заключение

Aiogram — отличный выбор для разработки Telegram-ботов любой сложности. Он предоставляет все необходимые инструменты для создания отзывчивых, функциональных и масштабируемых ботов. Изучив основы, вы сможете создавать ботов, которые автоматизируют задачи, предоставляют информацию и развлекают пользователей. Не забывайте обращаться к официальной документации Aiogram для более подробной информации.