Создаём телеграм-бота на python

Об авторе
Меня зовут Никита Войтов. Я – backend-разработчик с трёхлетним опытом коммерческой работы. За это время я участвовал в создании и поддержке различных веб-сервисов, REST API и, конечно, Telegram-ботов для бизнеса и развлечений.
Мой основной стек – Python, FastAPI, PostgreSQL, Docker, а также современные инструменты для асинхронного программирования. Я активно использую aiogram для разработки ботов, потому что считаю его лучшим выбором для быстрого и удобного создания сложных Telegram-ботов.
В этой книге я делюсь своим опытом, практическими советами и примерами кода, чтобы помочь вам быстро освоить aiogram и начать создавать собственных ботов. Если у вас возникнут вопросы или предложения, вы всегда можете связаться со мной через Telegram: @voitov23 или по почте: [email protected].
Глава 1. Введение
Что такое aiogram?
aiogram – это современный асинхронный Python-фреймворк для создания Telegram-ботов. Он построен на основе asyncio и позволяет эффективно обрабатывать множество одновременных запросов, что особенно важно для популярных и быстрорастущих ботов.
Почему стоит выбрать aiogram?
Асинхронность: aiogram использует возможности asyncio, что делает бота быстрым и отзывчивым даже при большом количестве пользователей.
Простота: Чистый и лаконичный синтаксис, который легко читать и поддерживать.
Гибкость: aiogram поддерживает все возможности Telegram Bot API, включая работу с медиа, inline-кнопками, платежами и многим другим.
Активное сообщество: aiogram постоянно развивается, а сообщество предоставляет множество примеров и готовых решений.
Для кого эта книга?
Эта книга предназначена для начинающих и продолжающих разработчиков, которые хотят быстро и эффективно научиться создавать Telegram-ботов на Python. Предполагается, что у читателя есть базовые знания Python и желание изучать новые технологии.
Глава 2. Установка и настройка
2.1. Установка Python
Перед началом убедитесь, что у вас установлен Python версии 3.8 или выше. Скачать актуальную версию можно с официального сайта Python.
Проверьте версию Python в терминале:
bash
python –version
или
bash
python3 –version
2.2. Установка aiogram
Установить aiogram очень просто с помощью pip:
bash
pip install aiogram
Рекомендуется использовать виртуальное окружение для каждого проекта. Например:
bash
python -m venv venv
source venv/bin/activate # Для Linux/Mac
venv\Scripts\activate # Для Windows
pip install aiogram
2.3. Получение токена у BotFather
Откройте Telegram и найдите пользователя @BotFather.
Отправьте команду /newbot и следуйте инструкциям: придумайте имя и username для бота.
После создания BotFather пришлёт вам токен – длинную строку символов. Сохраните его, он понадобится для запуска бота.
Глава 3. Первая программа: Эхо-бот
3.1. Создание проекта
Создайте новую папку для своего проекта, например, my_aiogram_bot.
Перейдите в неё и (по желанию) создайте виртуальное окружение:
bash
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
Установите aiogram (если ещё не установлен):
bash
pip install aiogram
3.2. Создание файла бота
Создайте файл, например, bot.py и откройте его в любимом редакторе кода.
3.3. Минимальный эхо-бот на aiogram
Вставьте следующий код в файл bot.py. Не забудьте заменить 'ВАШ_ТОКЕН_ЗДЕСЬ' на токен, полученный от BotFather.
python
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
API_TOKEN = 'ВАШ_ТОКЕН_ЗДЕСЬ'
# Создаём объекты бота и диспетчера
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
# Хэндлер для всех входящих сообщений
@dp.message_handler()
async def echo_message(message: types.Message):
await message.answer(message.text)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
3.4. Запуск бота
В терминале bash запустите файл:
python bot.py
Если всё сделано правильно, бот начнёт работать. Теперь напишите ему любое сообщение в Telegram – он должен ответить вам тем же текстом.
3.5. Как это работает?
Bot – объект для общения с Telegram API.
Dispatcher – объект, который получает и распределяет входящие сообщения по хэндлерам.
@dp.message_handler() – декоратор, который регистрирует функцию для обработки всех сообщений.
executor.start_polling() – запускает цикл обработки новых сообщений (polling).
Поздравляю!
Вы только что создали своего первого Telegram-бота на aiogram. В следующих главах мы разберём, как обрабатывать команды, использовать кнопки, хранить данные и многое другое.
Глава 4. Обработка сообщений и команд
4.1. Обработка команд
В Telegram-ботах команды – это специальные сообщения, которые начинаются с символа / (например, /start, /help). Aiogram позволяет легко обрабатывать такие команды с помощью фильтров.
Пример: обработка команды /start
Добавьте в ваш bot.py следующий код:
python
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
API_TOKEN = 'ВАШ_ТОКЕН_ЗДЕСЬ'
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply("Привет! Я твой первый бот на aiogram.")
@dp.message_handler(commands=['help'])
async def send_help(message: types.Message):
await message.reply("Вот что я умею:\n/start – начать\n/help – помощь\nНапиши мне что-нибудь, и я повторю это!")
@dp.message_handler()
async def echo_message(message: types.Message):
await message.answer(message.text)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Теперь бот будет отвечать на команды /start и /help специальными сообщениями, а на всё остальное – повторять текст.
4.2. Фильтры сообщений
Aiogram позволяет задавать фильтры для хэндлеров – это условия, при которых хэндлер будет срабатывать.
Пример: фильтр по типу сообщения
python
@dp.message_handler(content_types=['photo'])
async def handle_photo(message: types.Message):
await message.reply("Спасибо за фото!")
@dp.message_handler(lambda message: 'привет' in message.text.lower())
async def handle_hello(message: types.Message):
await message.reply("И тебе привет!")
Первый хэндлер сработает, если пользователь отправит фото.
Второй – если в тексте сообщения есть слово "привет".
4.3. Обработка нескольких условий