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

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

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

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

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

В этом руководстве пошагово разберём, как создать телеграм-бота с помощью Python и API Telegram.


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

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

📚 Что нужно сделать:

  1. Откройте Telegram и найдите пользователя @BotFather.

  2. Введите команду /start и затем /newbot.

  3. Укажите имя и уникальное username для вашего бота (например, MyFirstPythonBot).

  4. После регистрации BotFather предоставит вам токен API. Скопируйте его — он понадобится в коде.


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

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

Установка через pip:

bash
pip install python-telegram-bot --upgrade

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

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

python
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. Обработка пользовательских сообщений

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

python
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. Добавление кнопок и интерактивного меню

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

python
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. Как обрабатывать ошибки в боте

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

python
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.


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

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

Да! Добавьте его в группу и настройте соответствующие права.


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

  • polling — бот сам опрашивает сервер Telegram.

  • webhook — сервер Telegram отправляет данные вашему серверу напрямую (лучше для продакшена).


3. Как отправлять фото и файлы через бота?

python
await update.message.reply_photo(photo="https://example.com/image.jpg")

4. Где хранить токен безопасно?

Используйте переменные окружения или .env файлы. Никогда не коммитьте токен в репозиторий!


5. Можно ли сделать рассылку через бота?

Да, просто храните ID пользователей и отправляйте им сообщения в цикле.


Заключение

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

Надеюсь, это руководство поможет вам создать своего первого успешного бота!

Новости