Что такое Telegram бот и зачем он нужен
Telegram бот — это приложение, которое работает в мессенджере Telegram и выполняет автоматические задачи. Боты могут отправлять сообщения, обрабатывать команды пользователей, отправлять уведомления, управлять группами и делать многое другое.
Telegram боты используются в самых разных целях: от простых информационных ботов до сложных систем управления, интеграции с внешними сервисами, онлайн-магазинов и автоматизации рабочих процессов. Популярность Telegram для разработчиков обусловлена простотой работы с API и большой возможности для творчества.
В этом гайде мы разберёмся как создать собственного бота с нуля, начиная от регистрации и заканчивая развёртыванием на собственном сервере. Этот гайд актуален для Python 3.10+ и использует современную библиотеку aiogram 3.
Регистрация бота в BotFather
Чтобы создать Telegram бота, нужно сначала зарегистрировать его в BotFather — специальном боте Telegram, который управляет всеми ботами на платформе.
Пошагово:
- Откройте Telegram и найдите бота @BotFather
- Напишите команду /newbot
- Введите имя вашего бота (например: "MyAwesomeBot")
- Введите username бота (должен быть уникален и заканчиваться на "bot", например: @my_awesome_bot)
- 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.
Шаги деплоя:
- Арендуйте VPS (например, на Timeweb, Yandex Cloud или DigitalOcean)
- Подключитесь по SSH к серверу
- Установите Python 3.10+: sudo apt install python3.10
- Клонируйте ваш проект или загрузите файлы на сервер
- Установите зависимости: pip install -r requirements.txt
- Создайте файл 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 боты любой сложности. От простых информационных ботов до целых экосистем с платежами и аналитикой.
Заказать бота