Как создать Telegram бота на Python с нуля в 2026 году

Боты Python Telegram API

Что такое Telegram бот и зачем он нужен

Telegram бот — это приложение, которое работает в мессенджере Telegram и выполняет автоматические задачи. Боты могут отправлять сообщения, обрабатывать команды пользователей, отправлять уведомления, управлять группами и делать многое другое.

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

В этом гайде мы разберёмся как создать собственного бота с нуля, начиная от регистрации и заканчивая развёртыванием на собственном сервере. Этот гайд актуален для Python 3.10+ и использует современную библиотеку aiogram 3.

Регистрация бота в BotFather

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

Пошагово:

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

Пример команд в BotFather:

/newbot
MyAwesomeBot
@my_awesome_bot

Сохраните токен в безопасном месте! Не делитесь им с никем. Если токен скомпрометирован, можно создать новый через BotFather с помощью команды /token.

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

Для создания Telegram бота на Python мы используем библиотеку aiogram — это современный и удобный фреймворк для работы с Telegram API.

Установите необходимые зависимости:

pip install aiogram
pip install python-dotenv

Рекомендуется также установить python-dotenv для хранения конфиденциальных данных (токена бота) в файле .env.

Создайте файл .env в корне проекта:

BOT_TOKEN=YOUR_BOT_TOKEN_HERE

Замените YOUR_BOT_TOKEN_HERE на ваш реальный токен от BotFather.

Простой бот: первые шаги

Начнём с самого простого бота, который отвечает на команду /start:

import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters.command import Command
from aiogram.types import Message
import os
from dotenv import load_dotenv

# Загружаем переменные окружения
load_dotenv()
TOKEN = os.getenv('BOT_TOKEN')

# Создаём бота и диспетчер
bot = Bot(token=TOKEN)
dp = Dispatcher()

# Обработчик команды /start
@dp.message(Command("start"))
async def cmd_start(message: Message):
    await message.answer(
        "Привет! Я твой первый Telegram бот! 🤖\n"
        "Напиши /help для списка команд"
    )

# Запуск бота
async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Сохраните этот код в файл main.py и запустите:

python main.py

Теперь ваш бот должен работать! Откройте Telegram, найдите своего бота и напишите /start.

Добавление команд и обработчиков

Давайте сделаем бота более функциональным, добавив несколько команд:

@dp.message(Command("help"))
async def cmd_help(message: Message):
    help_text = """
📚 Доступные команды:
/start - Начало работы
/help - Этот список команд
/ping - Проверка статуса бота
/echo - Повтори за мной
    """
    await message.answer(help_text)

@dp.message(Command("ping"))
async def cmd_ping(message: Message):
    await message.answer("Pong! 🏓")

@dp.message(Command("echo"))
async def cmd_echo(message: Message):
    args = message.text.split(maxsplit=1)
    if len(args) == 1:
        await message.answer("Использование: /echo текст")
        return
    text = args[1]
    await message.answer(f"Вы написали: {text}")

# Обработчик всех остальных сообщений
@dp.message()
async def handle_message(message: Message):
    await message.answer(
        f"Я получил ваше сообщение: {message.text}\n"
        "Напиши /help для списка команд"
    )

Эти обработчики позволяют боту реагировать на разные команды и сообщения пользователей.

Работа с базой данных SQLite

Часто боту нужно сохранять информацию о пользователях. Давайте добавим работу с SQLite базой данных:

import sqlite3
from datetime import datetime

# Создание таблицы пользователей
def init_db():
    conn = sqlite3.connect('bot_users.db')
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            user_id INTEGER PRIMARY KEY,
            username TEXT,
            first_name TEXT,
            joined_date TEXT
        )
    ''')
    conn.commit()
    conn.close()

# Сохранение пользователя в БД
def save_user(user_id, username, first_name):
    conn = sqlite3.connect('bot_users.db')
    cursor = conn.cursor()
    cursor.execute('''
        INSERT OR REPLACE INTO users 
        (user_id, username, first_name, joined_date)
        VALUES (?, ?, ?, ?)
    ''', (user_id, username, first_name, datetime.now()))
    conn.commit()
    conn.close()

# Получение количества пользователей
def get_users_count():
    conn = sqlite3.connect('bot_users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT COUNT(*) FROM users')
    count = cursor.fetchone()[0]
    conn.close()
    return count

# Обновляем обработчик /start для сохранения пользователя
@dp.message(Command("start"))
async def cmd_start(message: Message):
    user_id = message.from_user.id
    username = message.from_user.username or "No username"
    first_name = message.from_user.first_name or "User"
    
    save_user(user_id, username, first_name)
    
    await message.answer(
        "Привет! Я твой первый Telegram бот! 🤖\n"
        "Напиши /help для списка команд"
    )

Инициализируйте БД в начале программы: init_db()

Деплой бота на сервер

После тестирования на локальной машине нужно развернуть бота на сервере. Рекомендуется использовать виртуальный сервер (VPS) с Linux.

Шаги деплоя:

  1. Арендуйте VPS (например, на Timeweb, Yandex Cloud или DigitalOcean)
  2. Подключитесь по SSH к серверу
  3. Установите Python 3.10+: sudo apt install python3.10
  4. Клонируйте ваш проект или загрузите файлы на сервер
  5. Установите зависимости: pip install -r requirements.txt
  6. Создайте файл systemd сервиса для автозапуска бота

Пример файла для systemd (/etc/systemd/system/telegram_bot.service):

[Unit]
Description=Telegram Bot
After=network.target

[Service]
Type=simple
User=nobody
WorkingDirectory=/home/user/telegram_bot
ExecStart=/usr/bin/python3 /home/user/telegram_bot/main.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Запустите сервис:

sudo systemctl start telegram_bot
sudo systemctl enable telegram_bot

Частые ошибки и как их избежать

Ошибка: "Telegram request failed with status code 401" — проверьте токен. Убедитесь, что он скопирован полностью и правильно.

Ошибка: "ConnectionError: Failed to connect" — проверьте интернет соединение и то, что Telegram API доступен.

Проблема: Бот не отвечает на команды — убедитесь что бот запущен и слушает. Используйте логирование для отладки.

Лучшие практики:

  • Никогда не публикуйте токен в GitHub
  • Используйте .env файл для секретных данных
  • Добавьте логирование для отладки проблем
  • Обрабатывайте исключения правильно
  • Тестируйте бота перед развёртыванием

Заключение

Вы узнали как создать Telegram бота на Python с нуля! Мы разобрали регистрацию, создание простого бота, добавление команд, работу с БД и развёртывание на сервере.

Это только начало. Дальше можно добавить:

  • Inline кнопки и клавиатуры
  • Интеграцию с внешними API
  • Более сложную логику и состояния
  • Веб-приложения (Web Apps)
  • Платежи через Telegram Payment API

Если вам нужна помощь с разработкой бота для вашего проекта, смело обращайтесь к нам!

Нужна помощь с разработкой?

Nexora создаёт Telegram боты любой сложности. От простых информационных ботов до целых экосистем с платежами и аналитикой.

Заказать бота

Поделитесь статьёй

👨‍💼

Андрей — Lead Developer

8+ лет опыта в разработке на Python и JavaScript. Специализируется на backend и создании ботов. Автор более 100 успешных проектов.