Python

Как написать бота в Telegram на Python: первый бот на aiogram

Чтобы написать Telegram-бота на Python, нужно создать бота в BotFather, получить токен, установить библиотеку aiogram, написать обработчик команды /start и запустить бота в режиме polling. После этого бот сможет отвечать на сообщения прямо в Telegram

Для первого проекта лучше не начинать с базы данных, оплаты и сложных кнопок. Сначала нужно получить работающий минимум: пользователь пишет /start, бот отвечает, пользователь пишет текст, бот повторяет или обрабатывает сообщение

Что понадобится перед стартом

Подготовьте

  • установленный Python
  • редактор кода, например VS Code или PyCharm
  • аккаунт Telegram
  • бота, созданного через BotFather
  • отдельную папку проекта
  • виртуальное окружение

Создайте папку проекта

mkdir telegram-bot
cd telegram-bot

Создайте виртуальное окружение

python -m venv .venv

Активируйте его на macOS или Linux

source .venv/bin/activate
.venv\Scripts\Activate.ps1

Создайте бота в BotFather

В Telegram найдите @BotFather и выполните команду /newbot. BotFather попросит указать имя бота и username, который должен заканчиваться на bot

После создания BotFather выдаст токен. Он выглядит примерно так

1234567890:AAExampleSecretToken

Этот токен нельзя публиковать. Через него любой человек сможет управлять вашим ботом

Установите aiogram

В активированном виртуальном окружении выполните

python -m pip install aiogram

Проверьте установку

python -m pip show aiogram

Если пакет установлен, можно писать первый файл

Первый файл bot.py

Создайте файл bot.py

import asyncio
import os

from aiogram import Bot, Dispatcher
from aiogram.filters import Command
from aiogram.types import Message

BOT_TOKEN = os.getenv("BOT_TOKEN")

dp = Dispatcher()

@dp.message(Command("start"))
async def start_handler(message: Message):
    await message.answer("Привет! Я первый бот на Python")

@dp.message()
async def echo_handler(message: Message):
    await message.answer(f"Вы написали: {message.text}")

async def main():
    bot = Bot(token=BOT_TOKEN)
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Этот код делает две вещи: отвечает на команду /start и повторяет обычные сообщения пользователя

Как передать токен безопасно

Не вставляйте токен прямо в код. Для учебного запуска используйте переменную окружения

macOS или Linux

export BOT_TOKEN="ваш_токен_из_BotFather"
python bot.py
$env:BOT_TOKEN="ваш_токен_из_BotFather"
python bot.py

Если вы все-таки вставили токен в код и отправили файл кому-то, токен лучше перевыпустить в BotFather

Как понять, что бот работает

После запуска python bot.py программа не должна сразу завершаться. Она будет ждать обновления от Telegram

Откройте своего бота в Telegram и отправьте /start. Если все настроено правильно, бот ответит

Привет! Я первый бот на Python

После этого отправьте любой текст. Бот должен ответить

Вы написали: ваш текст

Если бот молчит, проверьте токен, интернет, установленную библиотеку и то, что файл действительно запущен

Что такое polling

В примере используется polling. Это режим, когда ваш Python-скрипт сам регулярно спрашивает Telegram: «Есть новые сообщения?»

Для учебного бота polling удобен, потому что не нужен сервер с HTTPS и webhook. Вы запускаете файл на компьютере, бот работает, закрываете терминал — бот перестает отвечать

Для рабочего бота на сервере часто используют webhook, но новичку лучше сначала освоить polling

Как добавить команду help

Добавим команду /help

@dp.message(Command("help"))
async def help_handler(message: Message):
    await message.answer("Доступные команды: /start, /help")

Разместите этот обработчик рядом с /start, до общего обработчика сообщений. Общий обработчик @dp.message() ловит все, что не поймали более конкретные обработчики

Как не запутаться в структуре

Для первого бота достаточно одного файла. Когда логики станет больше, проект можно разделить

telegram-bot/
  bot.py
  handlers.py
  config.py
  .venv/

Но не делите проект слишком рано. Сначала сделайте рабочую версию в одном файле, затем выносите обработчики и настройки в отдельные модули

Частые ошибки

Токен вставлен с пробелом или кавычками не там

Если переменная окружения задана неверно, BOT_TOKEN будет пустым или неправильным. Проверьте, что значение передается без лишних символов

Файл запускается не из активного окружения

Если aiogram установлен, но Python пишет ModuleNotFoundError, возможно, вы запускаете другой Python

Бот не отвечает после закрытия терминала

Это нормально. Пока бот работает локально через polling, процесс должен быть запущен

Общий обработчик стоит раньше команд

Если порядок и фильтры настроены плохо, общий обработчик может мешать более точным сценариям. В простом коде держите команды выше общего обработчика

Мини-практика

Добавьте команду /about, которая отвечает коротким текстом о боте

@dp.message(Command("about"))
async def about_handler(message: Message):
    await message.answer("Я учебный бот на Python и aiogram")

После этого измените echo-обработчик так, чтобы бот отвечал только на текстовые сообщения, а не на фото и стикеры. Так вы начнете понимать фильтры и типы сообщений

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x