Сегодняшний пост будет посвящён моей любимой 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!