📌 Надеемся у вас уже есть:
- Любая среда программирования (VS Code, PyCharm и др.)
- Установленный Python (3.7 или новее)
- Установленная библиотека
python-telegram-bot
- Токен бота (полученный от
@BotFather
)
Создание Telegram-бота — это написание набора функций, которые выполняются, когда:
-
пользователь отправляет команду (например, /start
),
-
пишет обычное сообщение,
-
присылает фото/документ или другие типы данных.
Основная идея:
-
Бот — это программа-сервер, которая постоянно ждёт сообщений от Telegram.
-
Когда приходит сообщение, бот выбирает нужную функцию-обработчик и выполняет её.
-
Каждая функция описывает реакцию бота на определённое действие пользователя.
Ниже мы пошагово разберем и напишем первую программу для нашего бота.
🔹 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()
- отправляет ответ
Правила для функций:
-
Всегда используют параметры update
и context
.
-
Начинаются с async def
(так как работают асинхронно).
-
Отвечают пользователю через await update.message.reply_text()
.
⚡ Зачем async и wait?
В Python есть два способа выполнять код:
-
Обычный (синхронный) – команды выполняются по очереди, одна за другой.
-
Асинхронный (async/await) – программа может временно переключаться между задачами, пока одна из них ждёт.
async/await
не делает код действительно параллельным (как потоки), но позволяет эффективно
переключаться между задачами, пока одна ждёт выполнения другой.
Это делает ботов быстрыми, даже если они делают много дел сразу.
🔹 3. Основная функция main()
Здесь происходит:
-
Создание бота → настройка токена.
-
Регистрация обработчиков → привязка функций к командам/сообщениям.
-
Запуск бота → начало работы.
Код:
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 понимает команды?
- Получает
Update
- Смотрит: "Ага, это команда
/start
!"
- Ищет: "У меня есть для этого обработчик?"
- Находит нашу функцию
start()
и запускает её
🔹 4. Запуск программы
Добавляем условие:
if __name__ == "__main__":
main()
Почему это важно?
🔹 5. Как это работает?
- Чтобы бот работал и реагировал на команды, необходимо написать программу и запустить ее. Бот реагирует на действия пользователя только при запущенной программе!
- Пользователь пишет
/start
→ Telegram отправляет Update
боту.
Application
находит обработчик CommandHandler("start")
и вызывает start()
.
- Функция
start()
отправляет ответ - сообщение пользователю.