Как создать бота на Python с telegram-bot-api

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как создать бота на Python с telegram-bot-api? Полное руководство

Введение в телеграм-ботов

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

Шаг 1. Получение токена доступа у BotFather

Перед тем как писать код, необходимо зарегистрировать вашего бота в Telegram. Для этого:

  1. Откройте Telegram и найдите пользователя @BotFather.
  2. Введите команду /start и затем /newbot.
  3. Укажите имя и уникальное username для вашего бота (например, MyFirstPythonBot).
  4. После регистрации BotFather предоставит вам токен API. Скопируйте его — он понадобится в коде.

Шаг 2. Установка необходимых библиотек

Для взаимодействия с Telegram API мы будем использовать библиотеку python-telegram-bot. Установите ее через pip:

pip install python-telegram-bot --upgrade

Шаг 3. Базовый скелет бота

Теперь создадим простейшего бота, который будет отвечать на команду /start:

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

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Привет! Я твой первый бот на Python!")

if __name__ == '__main__':
    app = ApplicationBuilder().token("ВАШ_ТОКЕН_ЗДЕСЬ").build()
    app.add_handler(CommandHandler("start", start))
    app.run_polling()

Разберем пояснения:

  • ApplicationBuilder и CommandHandler — это базовые инструменты для обработки команд.
  • Функция start реагирует на команду /start и отправляет текстовое сообщение пользователю.
  • Метод run_polling() запускает бота и начинает проверять новые сообщения.

Шаг 4. Обработка пользовательских сообщений

Добавим обработку обычных текстовых сообщений:

from telegram.ext import MessageHandler, filters

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

if __name__ == '__main__':
    app = ApplicationBuilder().token("ВАШ_ТОКЕН_ЗДЕСЬ").build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
    app.run_polling()

Теперь бот будет отвечать на любое текстовое сообщение, повторяя ваш текст.

Шаг 5. Добавление кнопок и интерактивного меню

Боты становятся гораздо удобнее, если добавить в них кнопки:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

async def menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
    keyboard = [
        [InlineKeyboardButton("Кнопка 1", callback_data='button1')],
        [InlineKeyboardButton("Кнопка 2", callback_data='button2')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_text('Выберите опцию:', reply_markup=reply_markup)

async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    await query.edit_message_text(text=f"Вы нажали: {query.data}")

if __name__ == '__main__':
    from telegram.ext import CallbackQueryHandler
    app = ApplicationBuilder().token("ВАШ_ТОКЕН_ЗДЕСЬ").build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("menu", menu))
    app.add_handler(CallbackQueryHandler(button_handler))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
    app.run_polling()

Теперь, если отправить команду /menu, бот отобразит кнопки, а при нажатии — отправит соответствующее сообщение.

Шаг 6. Обработка ошибок в боте

Хорошая практика — добавить обработку ошибок, чтобы бот не падал при возникновении исключений:

async def error_handler(update: object, context: ContextTypes.DEFAULT_TYPE):
    print(f"Произошла ошибка: {context.error}")

app.add_error_handler(error_handler)

Шаг 7. Разворачивание бота на сервере

Если вы хотите, чтобы бот работал круглосуточно, его нужно развернуть на сервере. Вот несколько вариантов хостинга:

  • Бесплатные решения: Heroku, PythonAnywhere (для простых ботов).
  • Платные решения: AWS, DigitalOcean, VPS-сервисы.

Также можно настроить запуск бота как службы на сервере с помощью systemd или использовать Docker.

Часто задаваемые вопросы

  1. Можно ли использовать бота в группе? Да! Добавьте его в группу и настройте соответствующие права.

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

    • Polling — бот сам опрашивает сервер Telegram.
    • Webhook — сервер Telegram отправляет данные вашему серверу напрямую (лучше для продакшена).
  3. Как отправлять фото и файлы через бота?

    await update.message.reply_photo(photo="https://example.com/image.jpg")
    
  4. Где хранить токен безопасно? Используйте переменные окружения или .env файлы. Никогда не коммитьте токен в репозиторий!

  5. Можно ли сделать рассылку через бота? Да, просто храните ID пользователей и отправляйте им сообщения в цикле.

Заключение

Создание телеграм-бота на Python — это увлекательный и полезный опыт. С помощью библиотеки python-telegram-bot вы можете быстро разрабатывать интерактивных ботов, интегрировать их с различными сервисами и автоматизировать рутинные задачи. Надеюсь, это руководство поможет вам создать своего первого успешного бота!

Новости