Статья Автор: Деникина Н.В., Деникин А.В.

Пишем первого Telegram-бота на Python

📌 Надеемся у вас уже есть:
  1. Любая среда программирования (VS Code, PyCharm и др.)
  2. Установленный Python (3.7 или новее)
  3. Установленная библиотека python-telegram-bot
  4. Токен бота (полученный от @BotFather)


Создание Telegram-бота — это написание набора функций, которые выполняются, когда:

  • пользователь отправляет команду (например, /start),

  • пишет обычное сообщение,

  • присылает фото/документ или другие типы данных.

Основная идея:

  1. Бот — это программа-сервер, которая постоянно ждёт сообщений от Telegram.

  2. Когда приходит сообщение, бот выбирает нужную функцию-обработчик и выполняет её.

  3. Каждая функция описывает реакцию бота на определённое действие пользователя.  




Ниже мы пошагово разберем и напишем первую программу для нашего бота.

 

🔹 1. Импорт библиотек

Сначала подключаем необходимые компоненты (подключайте только те, которые вы используете в своей программе):

from telegram import Update  # Объект с данными о сообщении
from telegram.ext import (
    Application,      # Ядро бота
    CommandHandler,   # Обработчик команд (/start, /help)
    MessageHandler,   # Обработчик обычных сообщений (об этом в следующих шагах)
    filters,         # Фильтры (текст, фото, голосовые) (об этом в следующих шагах)
    CallbackContext, # Контекст выполнения (для сложных сценариев) (об этом в следующих шагах)
)

Зачем это нужно?

  • Update — содержит всю информацию о сообщении от пользователя - это как "письмо" от пользователя, содержит: текст сообщения, информацию о пользователе, данные о чате

  • Application — управляет работой бота (как "дирижёр") - главный "мозг" бота. 

  • CommandHandler и MessageHandler — "слушают" команды и сообщения.

 

🔹 2. Функции-обработчики

Каждая функция описывает, как бот реагирует на конкретное действие.

Функция start() - сердце бота. Реакция на команду /start

async def start(update: Update, context: CallbackContext):
    await update.message.reply_text("Привет! Я бот-кинотеатр. Используй /film.")
  • async - значит функция может "ждать" (например, пока сообщение отправится)

  • update.message - это полученное сообщение

  • reply_text() - отправляет ответ

 

Правила для функций:

  1. Всегда используют параметры update и context.

  2. Начинаются с async def (так как работают асинхронно).

  3. Отвечают пользователю через await update.message.reply_text()


⚡ Зачем async и wait?

В Python есть два способа выполнять код:

  1. Обычный (синхронный) – команды выполняются по очереди, одна за другой.

    • Если программа ждёт что-то (например, загрузку данных из интернета), она замирает и не делает ничего другого.

  2. Асинхронный (async/await) – программа может временно переключаться между задачами, пока одна из них ждёт.

async/await не делает код действительно параллельным (как потоки), но позволяет эффективно переключаться между задачами, пока одна ждёт выполнения другой.

Это делает ботов быстрыми, даже если они делают много дел сразу.

 

🔹 3. Основная функция main()

Здесь происходит:

  1. Создание бота → настройка токена.

  2. Регистрация обработчиков → привязка функций к командам/сообщениям.

  3. Запуск бота → начало работы.

Код:

def main():
    # 1. Создаем приложение бота
    app = Application.builder().token("ВАШ_ТОКЕН").build()

    # 2. Регистрируем обработчики
    app.add_handler(CommandHandler("start", start))          # На /start

    # 3. Запускаем бота
    print("Бот запущен! Для остановки нажмите Ctrl+C")      # Выводится в консоль
    app.run_polling()


Разбор:

  • Application.builder().token("ТОКЕН").build() — создает "ядро" бота.

  • CommandHandler("start", start) - обработчик команд - это механизм внутри бота, который связывает команды с действиями, как пульт связывает кнопки с функциями телевизора. 

    Представьте, что CommandHandler — это кнопка на пульте

    • Название кнопки (первый параметр): "start" (как кнопка "Включить") - название команды без знака /
    • Что делает (второй параметр): вызывает функцию start() (как включение телевизора) - записывается без скобок.
  • app.add_handler() — это метод, который "регистрирует" обработчики команд и сообщений в вашем боте. Он говорит боту:
    «Когда придет сообщение такого-то типа — вызови вот эту функцию».

  • app.run_polling() — запускает бесконечный цикл опроса сервера Telegram.  

 

Как Application понимает команды?

  1. Получает Update
  2. Смотрит: "Ага, это команда /start!"
  3. Ищет: "У меня есть для этого обработчик?"
  4. Находит нашу функцию start() и запускает её
 

🔹 4. Запуск программы

Добавляем условие:

if __name__ == "__main__":
    main()

Почему это важно?

  • Код выполнится только при прямом запуске файла (python bot.py), а не при импорте.

 

🔹 5. Как это работает?

  1. Чтобы бот работал и реагировал на команды, необходимо написать программу и запустить ее. Бот реагирует на действия пользователя только при запущенной программе!
  2. Пользователь пишет /start → Telegram отправляет Update боту.
  3. Application находит обработчик CommandHandler("start") и вызывает start().
  4. Функция start() отправляет ответ - сообщение пользователю.
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать