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

Размер шрифта:   13
Создаём телеграм-бота на 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. Обработка нескольких условий

Продолжить чтение