Создаем телеграм-бота на Python: пошаговая инструкция для новичков

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Начинающие программисты, интересующиеся разработкой ботов на Python
  • Люди, желающие улучшить свои навыки программирования и получить практический опыт
  • Учащиеся, рассматривающие курсы по Python-разработке и созданию веб-приложений

    Создание телеграм-бота на Python — идеальный первый проект для программиста, желающего применить знания на практике и получить реальный результат. За несколько часов вы пройдете путь от идеи до функционирующего бота, который сможет отвечать на сообщения, отправлять контент и даже интегрироваться с внешними сервисами. Не важно, создаете ли вы бота для автоматизации рабочих процессов или для развлечения друзей — этот навык откроет вам двери в мир практического программирования. 🚀

Хотите создавать не только ботов, но и полноценные веб-приложения на Python? Курс Обучение Python-разработке от Skypro превратит вас из начинающего программиста в уверенного разработчика за 9 месяцев. Программа включает фреймворки Django и FastAPI, работу с базами данных и реальные проекты с наставниками из индустрии. Вы получите не только теоретические знания, но и создадите портфолио проектов для будущего трудоустройства.

Настройка окружения для создания телеграм-бота на Python

Перед погружением в код необходимо подготовить рабочее окружение. Правильная настройка среды разработки сэкономит время и избавит от потенциальных проблем в будущем. 🛠️

Для начала вам понадобится Python версии 3.6 или выше. Проверить текущую версию можно командой:

python --version

Если Python не установлен или версия устарела, скачайте последнюю версию с официального сайта python.org.

Александр Воронов, Python-разработчик и тренер

Когда я только начинал создавать ботов для автоматизации рассылок, я совершил классическую ошибку новичка — использовал глобальное окружение Python. В результате зависимости разных проектов конфликтовали между собой, и приходилось тратить часы на отладку. Научившись работать с виртуальными окружениями, я забыл о подобных проблемах. Теперь первое, что я делаю при старте нового проекта — создаю изолированную среду, где могу контролировать версии всех пакетов.

Для создания виртуального окружения используйте следующие команды:

# Для Windows
python -m venv venv

# Для macOS/Linux
python3 -m venv venv

Активация виртуального окружения:

# Для Windows
venv\Scripts\activate

# Для macOS/Linux
source venv/bin/activate

После активации установите необходимые библиотеки:

pip install pyTelegramBotAPI python-dotenv

Библиотека pyTelegramBotAPI (также известная как telebot) предоставляет удобный интерфейс для работы с Telegram Bot API, а python-dotenv поможет безопасно хранить токен бота в файле окружения.

Для организации кода рекомендую создать следующую структуру проекта:

  • bot/ — корневая директория проекта
  • bot/main.py — основной файл с кодом бота
  • bot/.env — файл для хранения конфиденциальной информации (токен)
  • bot/requirements.txt — список зависимостей

Создайте файл requirements.txt со следующим содержимым:

pyTelegramBotAPI==4.12.0
python-dotenv==1.0.0

Сравнение популярных библиотек для работы с Telegram Bot API:

Библиотека Простота использования Документация Сообщество Асинхронность
pyTelegramBotAPI Высокая Хорошая Активное Ограниченная поддержка
python-telegram-bot Средняя Отличная Очень активное Полная поддержка
aiogram Средняя Хорошая Растущее Только асинхронный
Telethon Низкая Средняя Активное Полная поддержка

Для новичков я рекомендую начать с pyTelegramBotAPI (telebot) из-за простоты использования и низкого порога вхождения.

Пошаговый план для смены профессии

Регистрация и получение токена для Telegram Bot API

Для взаимодействия с API Telegram каждому боту нужен уникальный токен — цифровой ключ, который служит идентификатором и паролем одновременно. Получить его можно у специального бота BotFather — официального "создателя ботов" в Telegram. 🤖

Шаги для регистрации нового бота и получения токена:

  1. Откройте Telegram и найдите BotFather (@BotFather)
  2. Отправьте команду /newbot
  3. Введите имя бота (может содержать любые символы)
  4. Введите username бота (должен заканчиваться на "bot" и быть уникальным)
  5. После успешной регистрации вы получите токен вида 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ

Важно: никогда не публикуйте и не делитесь своим токеном публично! Человек, получивший доступ к токену, сможет управлять вашим ботом.

Марина Сергеева, технический писатель

Разрабатывая корпоративного бота для команды, я столкнулась с ситуацией, когда токен случайно попал в репозиторий проекта и был опубликован на GitHub. Через несколько часов наш бот начал отправлять спам-сообщения всем пользователям. Пришлось срочно перевыпускать токен и чистить историю репозитория. С тех пор я всегда начинаю проект с настройки .gitignore и хранения токенов в переменных окружения, даже если это небольшой личный проект. Безопасность должна быть привычкой, а не реакцией на инцидент.

Для безопасного хранения токена создайте файл .env в корневой директории проекта со следующим содержимым:

BOT_TOKEN=ваш_токен_от_BotFather

Также не забудьте добавить файл .env в .gitignore, если планируете выкладывать код в публичный репозиторий:

# .gitignore
.env
__pycache__/
venv/
*.pyc

BotFather также позволяет настроить дополнительные параметры вашего бота:

Команда Описание Когда использовать
/setname Изменить отображаемое имя бота Когда нужно обновить название
/setdescription Установить описание бота Для информирования пользователей о функциях
/setabouttext Установить текст "О боте" Для короткого описания в профиле
/setuserpic Установить аватар бота Для улучшения узнаваемости
/setcommands Настроить список команд с описаниями Для улучшения UX и подсказок пользователям
/deletebot Удалить бота Если бот больше не нужен

Особое внимание уделите команде /setcommands — она позволяет создать меню команд, которое будет отображаться при вводе "/" в чате с ботом. Формат команды:

start – Запустить бота
help – Получить справку
status – Проверить статус
settings – Настройки

Базовая структура Python-бота для Telegram: код и объяснения

После настройки окружения и получения токена можно приступить к написанию кода для бота. Начнем с простейшего эхо-бота, который будет отвечать на сообщения пользователя. 📝

Создайте файл main.py со следующим содержимым:

import os
import telebot
from dotenv import load_dotenv

# Загружаем переменные окружения из файла .env
load_dotenv()

# Получаем токен из переменных окружения
BOT_TOKEN = os.getenv('BOT_TOKEN')

# Инициализируем бота
bot = telebot.TeleBot(BOT_TOKEN)

# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Привет! Я эхо-бот. Отправь мне сообщение, и я отвечу тем же.")

# Обработчик для всех текстовых сообщений
@bot.message_handler(func=lambda message: True)
def echo_message(message):
bot.reply_to(message, message.text)

# Запускаем бота
if __name__ == '__main__':
print("Бот запущен...")
bot.polling(none_stop=True)

Разберем код по частям:

  • Импорт библиотек: Мы импортируем необходимые модули, включая telebot для работы с API Telegram и dotenv для работы с переменными окружения.
  • Инициализация бота: Создаем экземпляр класса TeleBot, передавая ему токен.
  • Обработчики сообщений: Декораторы @bot.message_handler позволяют определить функции, которые будут вызваны при получении определенных сообщений.
  • Запуск бота: Метод bot.polling() заставляет бота постоянно проверять наличие новых сообщений.

Основные компоненты архитектуры телеграм-бота:

  1. Декораторы (handlers): Определяют, какая функция будет вызвана в ответ на определенное сообщение.
  2. Обработчики событий: Функции, которые выполняются при срабатывании соответствующих декораторов.
  3. Методы отправки: API для отправки сообщений, фото, документов и других типов контента.
  4. Polling: Механизм для получения обновлений от серверов Telegram.

Важно понимать объект message, который передается в обработчики сообщений. Он содержит информацию о полученном сообщении, включая:

  • message.text — текст сообщения
  • message.chat.id — ID чата (используется для отправки ответов)
  • message.from_user.id — ID пользователя, отправившего сообщение
  • message.from_user.first_name — имя пользователя
  • message.message_id — ID сообщения

Для обработки различных типов сообщений можно использовать следующие декораторы:

# Обработка команд
@bot.message_handler(commands=['команда1', 'команда2'])

# Обработка сообщений определенного типа
@bot.message_handler(content_types=['text', 'photo', 'document'])

# Обработка на основе пользовательской функции фильтра
@bot.message_handler(func=lambda message: условие)

Типичная структура телеграм-бота может выглядеть так:

# Импорты
import telebot
import некоторые_другие_библиотеки

# Инициализация
bot = telebot.TeleBot(TOKEN)

# Обработчики команд
@bot.message_handler(commands=['start'])
def start_command(message):
pass

# Обработчики контента
@bot.message_handler(content_types=['text'])
def handle_text(message):
pass

# Обработчики колбэков (для инлайн-кнопок)
@bot.callback_query_handler(func=lambda call: True)
def handle_callback(call):
pass

# Запуск бота
if __name__ == '__main__':
bot.polling(none_stop=True)

Добавление интерактивных функций в вашего телеграм-бота

Эхо-бот — это лишь начало. Добавим в нашего бота интерактивные элементы, такие как кнопки, клавиатуры и обработку различных типов сообщений. Эти функции сделают взаимодействие с ботом более удобным и привлекательным для пользователей. 🎮

Расширим наш базовый код, добавив следующие возможности:

  1. Обычные кнопки (reply keyboard)
  2. Инлайн-кнопки (inline keyboard)
  3. Обработка различных типов сообщений
  4. Создание простого меню

Обновите файл main.py:

import os
import telebot
from telebot import types
from dotenv import load_dotenv

load_dotenv()
BOT_TOKEN = os.getenv('BOT_TOKEN')
bot = telebot.TeleBot(BOT_TOKEN)

# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
# Создаем клавиатуру
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('Привет 👋')
btn2 = types.KeyboardButton('Помощь ❓')
btn3 = types.KeyboardButton('Информация ℹ️')
markup.add(btn1, btn2, btn3)

bot.send_message(message.chat.id, 
f"Привет, {message.from_user.first_name}! Я твой первый телеграм-бот.", 
reply_markup=markup)

# Обработчик команды /help
@bot.message_handler(commands=['help'])
def send_help(message):
bot.reply_to(message, "Вот список доступных команд:\n"
"/start – начать взаимодействие\n"
"/help – показать справку\n"
"/info – информация о боте\n"
"/button – показать инлайн-кнопки")

# Обработчик команды /button
@bot.message_handler(commands=['button'])
def show_buttons(message):
# Создаем инлайн-клавиатуру
markup = types.InlineKeyboardMarkup(row_width=2)
btn1 = types.InlineKeyboardButton('Посетить GitHub', url='https://github.com/')
btn2 = types.InlineKeyboardButton('Показать картинку', callback_data='show_image')
btn3 = types.InlineKeyboardButton('Случайное число', callback_data='random_number')
markup.add(btn1)
markup.add(btn2, btn3)

bot.send_message(message.chat.id, "Выберите действие:", reply_markup=markup)

# Обработчик колбэков от инлайн-кнопок
@bot.callback_query_handler(func=lambda call: True)
def handle_callback(call):
if call.data == "show_image":
# Отправка фото
bot.send_photo(call.message.chat.id, 
'https://i.imgur.com/CBVZ5hI.jpeg',
caption="Вот ваша картинка!")
elif call.data == "random_number":
import random
bot.send_message(call.message.chat.id, f"Случайное число: {random.randint(1, 100)}")

# Убираем часики с кнопки
bot.answer_callback_query(call.id)

# Обработчик текстовых сообщений
@bot.message_handler(content_types=['text'])
def handle_text(message):
if message.text == 'Привет 👋':
bot.send_message(message.chat.id, "И тебе привет! Как дела?")
elif message.text == 'Помощь ❓':
send_help(message) # Переиспользуем функцию
elif message.text == 'Информация ℹ️':
bot.send_message(message.chat.id, "Я демонстрационный бот, созданный для обучения.")
else:
# Обрабатываем другие текстовые сообщения
bot.send_message(message.chat.id, f"Вы написали: {message.text}")

# Обработчик фото
@bot.message_handler(content_types=['photo'])
def handle_photo(message):
# Получаем информацию о фото
file_id = message.photo[-1].file_id
file_info = bot.get_file(file_id)

bot.reply_to(message, f"Вы отправили фото! ID файла: {file_id}\n"
f"Размер: {file_info.file_size} байт")

# Запускаем бота
if __name__ == '__main__':
print("Бот запущен...")
bot.polling(none_stop=True)

Рассмотрим основные типы интерактивных элементов:

Тип клавиатуры Описание Преимущества Недостатки
ReplyKeyboardMarkup Обычные кнопки под полем ввода Удобны для частых действий Занимают место в интерфейсе
InlineKeyboardMarkup Кнопки внутри сообщения Компактны, могут содержать ссылки Ограничены сообщением
ReplyKeyboardRemove Удаляет клавиатуру Освобождает место в интерфейсе Требует дополнительного действия
ForceReply Принудительный ответ на сообщение Удобно для форм и опросов Может быть навязчивым

Советы по улучшению UX вашего бота:

  • Обрабатывайте ошибки: Предусмотрите обработку некорректного ввода
  • Используйте эмодзи: Они делают интерфейс дружелюбнее
  • Сохраняйте состояние: Для сложных ботов используйте FSM (Finite State Machine)
  • Добавьте задержки: Небольшие задержки между сообщениями улучшают восприятие
  • Персонализируйте сообщения: Обращайтесь к пользователям по имени

Для создания более сложных ботов рекомендую использовать Finite State Machine (FSM) для управления состоянием диалога. В библиотеке pyTelegramBotAPI есть специальные средства для этого, например:

Python
Скопировать код
from telebot.handler_backends import State, StatesGroup
from telebot.storage import StateMemoryStorage

# Инициализируем хранилище состояний
state_storage = StateMemoryStorage()
bot = telebot.TeleBot(BOT_TOKEN, state_storage=state_storage)

# Определяем группу состояний
class UserStates(StatesGroup):
name = State()
age = State()
confirmation = State()

# Используем в обработчиках
@bot.message_handler(commands=['register'])
def start_registration(message):
bot.set_state(message.from_user.id, UserStates.name, message.chat.id)
bot.send_message(message.chat.id, "Как вас зовут?")

Размещение и запуск Python-бота для Telegram в сети

Создать бота — это только половина дела. Чтобы он был доступен пользователям 24/7, его необходимо разместить на сервере. Разберем различные способы хостинга телеграм-ботов — от бесплатных вариантов для новичков до профессиональных решений для проектов любого масштаба. 🌐

Существует несколько способов запустить бота на сервере:

  1. Локальный запуск — подходит для тестирования и разработки
  2. VPS/VDS хостинг — классическое решение для размещения ботов
  3. Облачные платформы — современный подход с возможностью масштабирования
  4. Бесплатные хостинги — экономичное решение для небольших проектов

Для начала рассмотрим, как подготовить бота к размещению. Создайте файл Procfile (без расширения) со следующим содержимым:

worker: python main.py

Также необходимо создать файл runtime.txt, указав версию Python:

python-3.11.0

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

Сравнение популярных платформ для хостинга телеграм-ботов:

Платформа Стоимость Сложность настройки Производительность Особенности
Heroku Бесплатно/от $5 Низкая Средняя Удобная интеграция с GitHub
PythonAnywhere Бесплатно/от $5 Низкая Средняя Специализирован для Python
DigitalOcean От $5 Средняя Высокая Полный контроль над сервером
AWS Lambda Оплата по использованию Высокая Высокая Serverless архитектура
Vercel Бесплатно/от $20 Низкая Высокая Быстрое развертывание

Рассмотрим пошаговую инструкцию для размещения бота на PythonAnywhere:

  1. Зарегистрируйтесь на PythonAnywhere (есть бесплатный план)
  2. В разделе "Files" загрузите все файлы вашего проекта (main.py, requirements.txt и др.)
  3. В разделе "Consoles" откройте новую Bash-консоль
  4. Установите зависимости: pip install -r requirements.txt
  5. Создайте файл .env с вашим токеном
  6. В разделе "Tasks" создайте новую задачу, которая будет запускать вашего бота
  7. Укажите команду: python main.py и настройте расписание (например, запуск каждый час)

Для профессионального использования рекомендуется размещение на VPS с использованием Docker. Создайте файл Dockerfile:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "main.py"]

И docker-compose.yml:

version: '3'

services:
bot:
build: .
restart: always
env_file:
- .env
volumes:
- ./data:/app/data

Затем на сервере можно запустить контейнер командой:

docker-compose up -d

Дополнительные рекомендации по размещению бота:

  • Логирование: Настройте сохранение логов для отслеживания ошибок
  • Мониторинг: Используйте инструменты мониторинга (Prometheus, Grafana) для отслеживания состояния бота
  • Автоперезапуск: Настройте автоматический перезапуск бота в случае сбоя (например, через systemd или supervisor)
  • Резервное копирование: Регулярно делайте бэкапы данных бота
  • Websockets вместо polling: Для продакшн-использования лучше настроить webhooks вместо polling

Пример настройки webhooks вместо polling:

import os
import flask
import telebot
from flask import Flask, request

BOT_TOKEN = os.getenv('BOT_TOKEN')
WEBHOOK_URL = os.getenv('WEBHOOK_URL') # URL вашего сервера

bot = telebot.TeleBot(BOT_TOKEN)
app = Flask(__name__)

# Настройка маршрута для вебхуков
@app.route('/' + BOT_TOKEN, methods=['POST'])
def webhook():
update = telebot.types.Update.de_json(request.stream.read().decode('utf-8'))
bot.process_new_updates([update])
return 'OK'

# Настройка вебхуков при запуске
@app.route('/set_webhook', methods=['GET', 'POST'])
def set_webhook():
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL + '/' + BOT_TOKEN)
return f"Webhook установлен на {WEBHOOK_URL}"

# Здесь размещаются обработчики сообщений бота
# ...

if __name__ == "__main__":
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))

Создание телеграм-бота — это не просто технический навык, а ключ к автоматизации повседневных задач и созданию полезных инструментов. Начав с простого эхо-бота, вы можете постепенно расширять его функциональность, добавляя интерактивные элементы и интеграции с внешними сервисами. Помните, что самые успешные боты решают конкретные проблемы пользователей: будь то отслеживание курсов валют, напоминания о событиях или автоматизация рутинных задач. Экспериментируйте, изучайте документацию и не бойтесь пробовать новое — каждая строчка кода приближает вас к созданию по-настоящему полезного инструмента.

Загрузка...