{}const=>[]async()letfn</>var
PythonПрактикаОсновы

Как сделать Telegram-бота на Python с нуля: BotFather, команды и запуск

Создадим бота через BotFather, безопасно передадим токен, добавим команды /start и /help, ответ на текст и запустим polling.

К

Кодик

Автор

6 мин чтения

Чтобы запустить Telegram-бота на Python, создайте его через @BotFather, сохраните токен в переменной окружения, установите python-telegram-bot и подключите обработчики команд к Application. Соберём бота с командами /start и /help, ответом на обычный текст и понятной диагностикой. Токен в исходный код вставлять не будем.

Telegram-бот состоит из двух частей. Telegram хранит аккаунт бота и пересылает события через Bot API. Ваша Python-программа получает эти события, выбирает обработчик и отправляет ответ. Если программа остановлена, логика тоже не работает, даже если сам бот по-прежнему виден в Telegram.

1Регистрируем бота

BotFather выдаёт username и секретный токен для Bot API.

2Пишем обработчики

Команды и сообщения попадают в отдельные async-функции Python.

3Запускаем polling

Программа регулярно получает новые updates и отвечает пользователю.

Как Telegram, Bot API и Python связаны между собой

Пользователь пишет не вашей программе напрямую. Сообщение сначала приходит на серверы Telegram и превращается в объект Update. Библиотека python-telegram-bot получает update, передаёт его подходящему handler и отправляет ответ обратно через Bot API.

ЧастьЗа что отвечаетЧто вы настраиваете
@BotFatherСоздание и параметры аккаунта ботаИмя, username, команды, новый токен
Bot APIОбмен updates и сообщениями по HTTPSТокен авторизации и вызываемые методы
Python-программаЛогика ответовHandlers, данные, проверки, запуск
PollingПолучение новых updates цикломРаботает, пока запущен процесс
Главная модель

BotFather не пишет код и не запускает его. Он только создаёт бот-аккаунт и выдаёт ключ, с которым ваша программа обращается к Telegram.

Схема работы Telegram-бота от сообщения пользователя через Bot API к Python-программе
Ответ появляется только после того, как запущенная программа обработает update.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Создаём бота через BotFather и сохраняем токен

Получите токен без риска
  1. Откройте в Telegram официальный аккаунт @BotFather с синей галочкой и отправьте команду /newbot.
  2. Введите отображаемое имя, затем уникальный username латиницей. Обычный username бота заканчивается на bot, например study_helper_bot.
  3. Скопируйте полученный токен в менеджер паролей. Не отправляйте его в чат, не показывайте на скриншоте и не добавляйте в Git.
  4. Если токен уже попал в публичное место, отзовите его через BotFather и выпустите новый. Удалить строку из последнего коммита недостаточно.

Создайте папку проекта и виртуальное окружение. На Windows команды удобно выполнять в PowerShell; на macOS и Linux отличается только команда активации.

mkdir telegram-bot
cd telegram-bot
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install python-telegram-bot
$env:TELEGRAM_BOT_TOKEN="ВСТАВЬТЕ_ТОКЕН_ТОЛЬКО_ЗДЕСЬ"

В macOS или Linux окружение включается командой source .venv/bin/activate, а переменная задаётся как export TELEGRAM_BOT_TOKEN="...". Значение существует только в текущем окне терминала, что удобно для первого безопасного запуска.

Сравнение хранения токена Telegram-бота в коде и в переменной окружения
Токен даёт полный контроль над ботом, поэтому его отделяют от файлов проекта.

Этап пройден. В терминале активна .venv, команда python -m pip show python-telegram-bot выводит пакет, а токен сохранён вне bot.py.

Пишем команды start, help и ответ на текст

Создайте файл bot.py. В актуальном интерфейсе библиотеки обработчики асинхронные: перед ними стоит async def, а отправка сообщения вызывается через await. CommandHandler ловит команды, MessageHandler отбирает обычный текст.

import os

from telegram import Update
from telegram.ext import (
    Application,
    CommandHandler,
    ContextTypes,
    MessageHandler,
    filters,
)


async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    user = update.effective_user
    name = user.first_name if user else "друг"
    await update.message.reply_text(
        f"Привет, {name}! Напишите сообщение, и я его повторю."
    )


async def help_command(
    update: Update, context: ContextTypes.DEFAULT_TYPE
) -> None:
    await update.message.reply_text("Команды: /start и /help")


async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text(f"Вы написали: {update.message.text}")


def main() -> None:
    token = os.environ.get("TELEGRAM_BOT_TOKEN")
    if not token:
        raise RuntimeError("Не задана переменная TELEGRAM_BOT_TOKEN")

    app = Application.builder().token(token).build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("help", help_command))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    print("Бот запущен. Для остановки нажмите Ctrl+C.")
    app.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()
  • Application.builder().token(token).build() создаёт приложение с вашим ботом.
  • Обработчики проверяются по порядку и получают объект Update с данными события.
  • Фильтр filters.TEXT & ~filters.COMMAND означает «текст, но не команда».
  • Проверка переменной окружения останавливает программу с понятной ошибкой вместо неясного сетевого сбоя.

Если импорты, функции и окружение пока непривычны, пройдите первые упражнения курса Python. Отдельный маршрут для команд и обработчиков есть в курсе по Telegram-ботам.

Запускаем бота и проверяем полный путь сообщения

Первый тест
  1. В том же терминале с заданным токеном выполните python bot.py.
  2. Откройте своего бота по username, нажмите Start или отправьте /start.
  3. Отправьте /help, затем обычный текст, например проверка.
  4. Убедитесь, что пришли три разных ответа. Остановите процесс сочетанием Ctrl+C.
Ожидаемый результат
  • Команда /start приветствует пользователя по имени.
  • Команда /help показывает две доступные команды.
  • Обычное сообщение возвращается с префиксом «Вы написали».
  • После Ctrl+C бот перестаёт отвечать, потому что локальный polling остановлен.

Путь Telegram Update через фильтр, обработчик и отправку ответа
Handler срабатывает только для того типа update, под который зарегистрирован.

Почему Telegram-бот не отвечает

Читайте первую ошибку в терминале и проверяйте цепочку сверху вниз: запущен ли процесс, есть ли токен, доступна ли сеть, зарегистрирован ли handler. Не меняйте одновременно код, токен и библиотеку: так невозможно понять, что именно помогло.

Не задана переменная TOKEN

Переменная создавалась в другом окне терминала или под другим именем. Задайте TELEGRAM_BOT_TOKEN и запустите Python в том же окне.

InvalidToken или Unauthorized

Токен скопирован не полностью, отозван или содержит лишний пробел. Выпустите новый через BotFather, если старый мог утечь.

Conflict: terminated by other getUpdates

Тот же токен уже использует второй запущенный polling-процесс. Остановите старую копию бота и оставьте одну.

Команда приходит как обычный текст

Проверьте порядок handlers и фильтр ~filters.COMMAND. Имя команды в CommandHandler пишется без символа /.

Перед следующим шагом. Токена нет в Git, у проекта есть requirements.txt, команды отвечают отдельно от текста, ошибки видны в терминале, а бот корректно завершается через Ctrl+C. Для работы круглосуточно следующим шагом нужен постоянно запущенный сервер или платформа размещения.
Короткие ответы
Как создать Telegram-бота на Python?

Создайте бот-аккаунт командой /newbot у @BotFather, установите библиотеку, передайте токен в Application, зарегистрируйте handlers и запустите run_polling().

Почему нельзя хранить токен в bot.py?

Любой, кто увидит токен, сможет управлять ботом через Bot API. Храните его в переменной окружения или секрет-хранилище и немедленно отзывайте после утечки.

Нужно ли держать компьютер включённым?

При локальном polling программа отвечает только пока компьютер, интернет и процесс Python работают. Для режима 24/7 код размещают на постоянно работающем сервере.

Чем polling отличается от webhook?

При polling программа сама запрашивает updates. При webhook Telegram отправляет их на ваш публичный HTTPS-адрес. Для первого локального проекта polling проще.

Может ли бот написать пользователю первым?

Обычный бот не начинает личный диалог сам. Пользователь сначала должен открыть чат и отправить сообщение или добавить бота в группу.

Что добавить в следующей версии

Если установка пакета не проходит, используйте разбор ошибки pip в Windows. Если Python не видит уже установленную библиотеку, проверьте окружение по статье No module named.

После echo-версии добавьте кнопки, состояние диалога и хранение данных. Для запросов к стороннему сервису пригодится материал про API в Python. В Кодике можно сначала отладить каждую функцию отдельно, а затем подключить её к Telegram handler.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты