Создание telegram бота на python пошаговое руководство

Как сделать telegram бота на python

Как сделать telegram бота на python

Telegram предоставляет официальный интерфейс Bot API, который позволяет управлять чатами, отправлять сообщения, обрабатывать команды и интегрировать внешние сервисы. Для работы с ним на Python чаще всего используют библиотеку python-telegram-bot, так как она обеспечивает удобные методы и поддержку асинхронного программирования.

Перед началом необходимо получить токен доступа у @BotFather. Этот токен – ключ к управлению ботом, его нельзя публиковать в открытых источниках. После получения токена стоит сразу организовать хранение секретных данных в переменных окружения или использовать файл конфигурации, исключённый из репозитория.

Разработка начинается с установки зависимостей через pip. Для большинства проектов достаточно подключить python-telegram-bot и библиотеку для работы с запросами, например requests. Такая подготовка позволяет быстро перейти к созданию минимального кода, который реагирует на команды и запускается локально.

В процессе важно учитывать структуру проекта: отдельные модули для логики, обработки команд и интеграции с API упрощают масштабирование. Это избавляет от проблем при расширении функциональности и делает код более читаемым.

Создание telegram бота на Python пошаговое руководство

Создание telegram бота на Python пошаговое руководство

Для разработки потребуется установленный Python версии не ниже 3.9 и библиотека python-telegram-bot. Установка выполняется командой:

pip install python-telegram-bot --upgrade

Далее необходимо получить токен. В Telegram откройте @BotFather, создайте нового бота и сохраните выданный ключ. Этот токен используется в коде для авторизации.

Минимальный рабочий пример бота:


from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
  await update.message.reply_text("Бот активен")

app = Application.builder().token("ВАШ_ТОКЕН").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

Компоненты, которые чаще всего применяются:

Элемент Назначение Пример
CommandHandler Реакция на команды вида /start CommandHandler("help", help_func)
MessageHandler Обработка текстовых сообщений MessageHandler(filters.TEXT, echo_func)
CallbackQueryHandler Кнопки с inline-разметкой CallbackQueryHandler(button_func)

Рекомендации: храните токен в переменных окружения, используйте отдельные модули для команд, применяйте логирование через модуль logging для отладки.

Регистрация и получение токена у BotFather

Регистрация и получение токена у BotFather

В Telegram найдите официального пользователя @BotFather через строку поиска и начните диалог кнопкой Start.

Для создания нового бота отправьте команду /newbot. Сначала введите отображаемое имя (может содержать пробелы и кириллицу), затем уникальное имя пользователя, которое обязательно должно заканчиваться на bot (например, my_test_bot).

После подтверждения BotFather выдаст сообщение с токеном доступа в формате 123456789:ABC-123xyz…. Этот ключ необходим для подключения библиотеки python-telegram-bot или других SDK.

Сохраните токен в безопасном месте. Не публикуйте его в открытых репозиториях и не передавайте третьим лицам. При утечке можно сгенерировать новый токен командой /revoke и получить замену через /token.

Установка необходимых библиотек Python для работы с API

Для взаимодействия с Telegram Bot API чаще всего применяют библиотеку pyTelegramBotAPI или aiogram. Первая проще для начала, вторая оптимальна для асинхронных задач.

Установка pyTelegramBotAPI выполняется командой:

pip install pyTelegramBotAPI

Для асинхронной разработки используйте:

pip install aiogram

Чтобы работать с HTTP-запросами и внешними API, установите:

pip install requests

Для хранения данных в формате JSON достаточно встроенного модуля, но для удобной сериализации и валидации стоит подключить:

pip install pydantic

Если бот будет работать с базами данных, используйте:

pip install SQLAlchemy

Рекомендуется фиксировать версии пакетов в requirements.txt, чтобы избежать конфликтов:

pip freeze > requirements.txt

Создание базовой структуры кода бота

Для начала потребуется минимальный набор файлов. Чаще всего достаточно одного файла bot.py, в котором размещается основной код. В дальнейшем можно разделять логику по модулям.

  1. Импортировать необходимые модули:
    • from telegram import Update
    • from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
  2. Определить точку входа async def main(), где создаётся объект Application с токеном.
  3. Добавить обработчики:
    • CommandHandler("start", start) для команды запуска;
    • MessageHandler(filters.TEXT & ~filters.COMMAND, echo) для ответа на текстовые сообщения.
  4. Запустить метод application.run_polling(), чтобы бот начал получать обновления.

Минимальный пример:

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Бот запущен.")
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(update.message.text)
async def main():
application = Application.builder().token("ВАШ_ТОКЕН").build()
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
await application.run_polling()
if __name__ == "__main__":
import asyncio
asyncio.run(main())

Такой каркас позволяет сразу проверить работу и в дальнейшем расширять функционал.

Реализация обработки команд и сообщений

Реализация обработки команд и сообщений

Для обработки команд и сообщений в Telegram боте на Python используется библиотека python-telegram-bot. Основной механизм – регистрация обработчиков через Dispatcher. Например, команды регистрируются с помощью CommandHandler, а текстовые сообщения – через MessageHandler с фильтрами.

Пример регистрации команды /start:

from telegram.ext import CommandHandler
def start(update, context):
update.message.reply_text("Привет! Я бот, готовый к работе.")
dispatcher.add_handler(CommandHandler("start", start))

Для обработки текстовых сообщений применяются фильтры из Filters. Например, чтобы реагировать на любое текстовое сообщение:

from telegram.ext import MessageHandler, Filters
def echo(update, context):
update.message.reply_text(update.message.text)
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

Важно использовать ~Filters.command, чтобы исключить команды из обработки общих сообщений. Это предотвращает конфликт с CommandHandler.

Для сложных сценариев, например выбора из меню или обработки последовательности шагов, применяются ConversationHandler. Он позволяет задавать состояния и переходы между ними, обеспечивая контролируемую логику диалога.

Пример базового ConversationHandler:

from telegram.ext import ConversationHandler, CommandHandler, MessageHandler, Filters
STATE_INPUT = 1
def start_conv(update, context):
update.message.reply_text("Введите данные:")
return STATE_INPUT
def process_input(update, context):
data = update.message.text
update.message.reply_text(f"Вы ввели: {data}")
return ConversationHandler.END
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start_conv)],
states={STATE_INPUT: [MessageHandler(Filters.text, process_input)]},
fallbacks=[]
)
dispatcher.add_handler(conv_handler)

Рекомендуется использовать отдельные функции для каждого обработчика и избегать вложенных условий внутри одного метода. Это повышает читаемость кода и упрощает отладку. Для логирования ошибок применяйте CallbackContext и метод error в Dispatcher.

Добавление кнопок и клавиатур для взаимодействия с пользователем

В Telegram боты могут использовать две основные формы интерактивных элементов: Inline-кнопки и Reply-клавиатуры. Inline-кнопки отображаются прямо под сообщением и поддерживают callback-запросы, что позволяет обрабатывать действия пользователя без отправки новых сообщений. Reply-клавиатуры заменяют стандартную клавиатуру пользователя и отправляют выбранное значение как текст.

Для создания Inline-кнопок используется класс InlineKeyboardButton и InlineKeyboardMarkup. Например, чтобы добавить кнопку с текстом «Подписаться» и callback_data=»subscribe»:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

keyboard = [[InlineKeyboardButton("Подписаться", callback_data="subscribe")]]

reply_markup = InlineKeyboardMarkup(keyboard)

bot.send_message(chat_id=chat_id, text="Выберите действие:", reply_markup=reply_markup)

Для обработки нажатий кнопок необходимо зарегистрировать callback-обработчик. В библиотеке python-telegram-bot это делается через CallbackQueryHandler. В обработчике можно получить callback_data через query.data и выполнить нужное действие без отправки нового сообщения.

Reply-клавиатуры создаются через KeyboardButton и ReplyKeyboardMarkup. Они полезны для быстрых ответов. Например, чтобы создать клавиатуру с кнопками «Да» и «Нет»:

from telegram import ReplyKeyboardMarkup, KeyboardButton

keyboard = [[KeyboardButton("Да"), KeyboardButton("Нет")]]

reply_markup = ReplyKeyboardMarkup(keyboard, resize_keyboard=True, one_time_keyboard=True)

bot.send_message(chat_id=chat_id, text="Выберите вариант:", reply_markup=reply_markup)

Рекомендуется использовать resize_keyboard=True для компактного отображения и one_time_keyboard=True, чтобы клавиатура скрывалась после выбора. Inline-кнопки предпочтительнее для действий, требующих мгновенного ответа, а Reply-клавиатуры – для упрощения ввода повторяющихся команд.

Для сложных сценариев можно комбинировать оба типа: основное меню с Reply-клавиатурой и действия внутри диалогов через Inline-кнопки. Это улучшает навигацию и снижает количество вводимого текста пользователем.

Важно тестировать клавиатуры на разных устройствах: iOS и Android по-разному отображают размеры кнопок и поведение callback-запросов. Также стоит ограничивать количество кнопок на одной строке до 3-4, чтобы интерфейс оставался удобным.

Запуск и тестирование бота в локальной среде

Запуск и тестирование бота в локальной среде

Для запуска Telegram-бота локально потребуется установленный Python версии 3.10 или выше и пакетный менеджер pip. Рекомендуется использовать виртуальное окружение для изоляции зависимостей:

  1. Создайте виртуальное окружение в каталоге проекта:
    python -m venv venv
  2. Активируйте окружение:
    # Windows
    venv\Scripts\activate
    # macOS/Linux
    source venv/bin/activate
    
  3. Установите необходимые библиотеки:
    pip install python-telegram-bot==20.5

После настройки окружения подготовьте основной скрипт бота, например bot.py, с корректно указанным токеном Telegram API. Для безопасного хранения токена рекомендуется использовать переменные окружения:

import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Бот запущен и готов к работе!")
app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

Тестирование бота проводится через локальный запуск:

  1. В терминале перейдите в каталог проекта и выполните:
    python bot.py
  2. Проверьте реакцию бота в Telegram, отправив команду /start.
  3. Для отладки используйте print() или логирование через модуль logging:
    import logging
    logging.basicConfig(level=logging.INFO)
  4. При внесении изменений скрипт необходимо перезапускать. Для автоматического перезапуска удобно использовать watchdog или python -m uvicorn bot:app --reload при интеграции с асинхронными фреймворками.

Рекомендуется проверять работу обработчиков команд и inline-кнопок отдельно, создавая тестовые сообщения. Для сложных сценариев полезно использовать модуль pytest-asyncio для эмуляции Update и Context объектов.

Локальное тестирование позволяет убедиться в стабильности бота до его деплоя на сервер, минимизируя вероятность ошибок из-за неправильной конфигурации токена или зависимостей.

Вопрос-ответ:

Какие библиотеки Python нужны для создания Telegram-бота?

Для работы с Telegram-ботами обычно используют библиотеку `python-telegram-bot`, которая предоставляет удобный интерфейс для взаимодействия с API Telegram. Дополнительно могут понадобиться `requests` для отправки HTTP-запросов и `logging` для ведения журналов работы бота. В некоторых случаях используют `dotenv` для хранения токена бота в отдельном файле окружения.

Как получить токен для бота и зачем он нужен?

Токен создаётся через официальный бот Telegram @BotFather. Он нужен для идентификации вашего бота при обращении к API Telegram. Без токена бот не сможет отправлять сообщения и реагировать на действия пользователей. После получения токена его обычно хранят в защищённом месте и используют в коде для инициализации объекта бота.

Каким образом можно обрабатывать команды пользователей в боте?

Команды пользователей обрабатываются с помощью специальных обработчиков (handlers). В библиотеке `python-telegram-bot` есть `CommandHandler` для команд типа /start или /help. При поступлении команды бот вызывает функцию-обработчик, в которой можно задать любую логику: отправку текста, изображения, кнопок или взаимодействие с базой данных. Также можно использовать `MessageHandler` для реакции на произвольные сообщения.

Можно ли сделать так, чтобы бот отвечал на определённые слова в сообщениях?

Да, это реализуется через фильтры. Например, `MessageHandler` с фильтром `Filters.text` позволяет проверять текст сообщений и сравнивать его с нужными ключевыми словами. После обнаружения нужного слова бот может отправить ответное сообщение, картинку или выполнить другое действие. Такой подход помогает создавать интерактивные диалоги и автоматизированные ответы без использования сложного машинного обучения.

Как поддерживать бота в рабочем состоянии 24/7?

Для непрерывной работы бота его можно разместить на сервере или в облачном сервисе, например, Heroku, AWS или Vercel. Скрипт бота запускается и работает в фоновом режиме. Для автоматического перезапуска при сбое можно использовать менеджеры процессов типа `systemd` или `pm2`. Также стоит настроить логирование и уведомления об ошибках, чтобы быстро реагировать на проблемы.

Ссылка на основную публикацию