Первый шаг к aiogram 3

· nikoontelegram's blog


Сегодняшний пост будет посвящён моей любимой python-либе для написания telegram-ботов. Библиотека aiogram отличается поддержкой асинхронных вызовов, как видно из её названия, поэтому если вы не знакомы с asyncio - дока вас ждёт.

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

Статья предполагает знание читателем основ питона, понимание того, что такое виртуальное окружение и как получить токен для телеграм-бота от BotFather-а.

Установка #

Пока что (на момент 11.04.23) по-умолчанию из pip ставится версия 2, так что указание версии обязательно:

1pip install aiogram==3.0.0b7

Минимальный бот #

 1from aiogram import Bot, Dispatcher
 2from aiogram.filters import CommandStart
 3
 4TOKEN = "<HERE GOES YOUR TOKEN>"
 5
 6dp = Dispatcher()
 7bot = Bot(TOKEN)
 8
 9
10@dp.message(CommandStart())
11async def command_start_handler(message):
12    await message.answer(f"Hello, {message.from_user.full_name}!")
13
14
15@dp.message()
16async def echo_handler(message):
17    await message.answer(message.text)
18
19dp.run_polling(bot)

Здесь мы создаём класс бота, через который будут происходит обращения к серверам телеграма, и класс диспетчера через который мы связываем события поступающие из бота и функции которые будут их обрабатывать. Так, на команду /start, с которой начинается взаимодействие с любым ботом мы будем отправлять имя пользователя, отправившего команду. А на любое другое сообщение будем пытаться отправлять обратно текст, с которым оно пришло.

Задание со свёздочкой: отправьте боту такое сообщение, чтобы он выдал ошибку.

После всех подготовительных процессов строчкой dp.run_polling(bot) мы запускаем цикл получения событий от серверов телеграма.

Итоги #

Сегодня мы разобрали как с помощью библиотеки aiogram 3 создать примитивного бота который умеет обрабатывать команду старт и любые сообщения. Несмотря на свою простоту, это хороший пример для начала, который мы сможем использовать как основу для освоения более продвинутой функциональности. Stay tuned!


Мой канал про разработку под телеграм: @NikoOnTelegram