Telegram-бот для автоматической проверки подписки пользователей на канал с генерацией QR-кодов и UTM-метками для аналитики.
- ✅ Автоматическая проверка подписки на Telegram-канал через API
- 📱 Генерация QR-кодов с UTM-метками для аналитики
- 🎁 Автоматическая отправка сообщения со скидкой 50% после подтверждения подписки
- 📊 Поддержка UTM-меток для отслеживания эффективности QR-кодов
- Python 3.8+
- Telegram Bot Token (получить у @BotFather)
- Telegram-канал с правами администратора для бота
git clone <repository-url>
cd Botpip install -r requirements.txtСкопируйте файл .env.example в .env:
cp .env.example .envОтредактируйте .env файл и заполните необходимые данные:
# Telegram Bot Configuration
BOT_TOKEN=your_bot_token_here # Токен бота от @BotFather
BOT_USERNAME=your_bot_username # Username бота (без @)
CHANNEL_ID=@your_channel_username # ID или username канала (с @)
CHANNEL_URL=https://t.me/your_channel # URL вашего канала
# UTM параметры для аналитики
UTM_SOURCE=qr_code
UTM_MEDIUM=offline
UTM_CAMPAIGN=subscription_discountВАЖНО: Добавьте бота в ваш Telegram-канал как администратора с правами:
- ✅ Просмотр сообщений (чтобы бот мог проверять подписку)
Как добавить бота:
- Откройте ваш канал
- Перейдите в настройки → Администраторы
- Добавьте вашего бота через поиск
- Предоставьте минимальные права (достаточно просмотра)
python bot.pyБот запустится и будет ожидать команды от пользователей.
python generate_qr.pyQR-код будет сохранен в директории qr_codes/bot_subscription_qr.png
Проект поддерживает несколько способов деплоя на сервер.
Используйте скрипт автоматического деплоя:
# Деплой через Docker (рекомендуется)
./deploy.sh docker
# Деплой через systemd
sudo ./deploy.sh systemdПреимущества:
- Изолированная среда
- Простое обновление и откат
- Не требует настройки Python на сервере
- Автоматический перезапуск при падении
Требования:
- Установленный Docker
- Установленный Docker Compose
Шаги:
- Установите Docker и Docker Compose на сервере:
# Установка Docker (Ubuntu/Debian)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Установка Docker Compose
sudo apt install docker-compose-plugin- Склонируйте репозиторий на сервер:
git clone <repository-url>
cd Bot- Настройте
.envфайл:
cp .env.example .env
nano .env # Заполните необходимые данные- Запустите бота:
docker-compose up -dПолезные команды:
# Просмотр логов
docker-compose logs -f
# Остановка бота
docker-compose down
# Перезапуск бота
docker-compose restart
# Обновление бота
git pull
docker-compose down
docker-compose build
docker-compose up -d
# Проверка статуса
docker-compose psПреимущества:
- Нативная интеграция с системой
- Автозапуск при перезагрузке сервера
- Управление через systemctl
Требования:
- Linux сервер с systemd
- Python 3.8+
Шаги:
- Склонируйте репозиторий:
git clone <repository-url>
cd Bot- Создайте виртуальное окружение и установите зависимости:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt- Настройте
.envфайл:
cp .env.example .env
nano .env # Заполните необходимые данные- Установите systemd service:
# Отредактируйте telegram-bot.service, укажите правильные пути
# Замените /home/ubuntu на путь к вашей директории
# Замените User=ubuntu на вашего пользователя
sudo cp telegram-bot.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable telegram-bot.service
sudo systemctl start telegram-bot.serviceПолезные команды:
# Просмотр статуса
sudo systemctl status telegram-bot.service
# Просмотр логов
sudo journalctl -u telegram-bot.service -f
# Перезапуск бота
sudo systemctl restart telegram-bot.service
# Остановка бота
sudo systemctl stop telegram-bot.service
# Отключение автозапуска
sudo systemctl disable telegram-bot.service- Подключитесь к серверу:
ssh user@your-server-ip- Установите необходимые пакеты:
sudo apt update
sudo apt install python3 python3-pip python3-venv git- Склонируйте репозиторий:
git clone <repository-url>
cd Bot- Создайте виртуальное окружение:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt- Настройте
.env:
cp .env.example .env
nano .env- Запустите бота в фоновом режиме:
nohup python bot.py > bot.log 2>&1 &- Создайте аккаунт на Railway.app
- Подключите GitHub репозиторий
- Добавьте переменные окружения из
.env - Railway автоматически обнаружит Dockerfile и задеплоит бота
- Создайте
Procfile:
worker: python bot.py
- Деплой:
heroku create your-bot-name
heroku config:set BOT_TOKEN=your_token
heroku config:set CHANNEL_ID=@your_channel
heroku config:set CHANNEL_URL=https://t.me/your_channel
heroku config:set BOT_USERNAME=your_bot_username
git push heroku main- Подключите GitHub репозиторий
- Выберите Docker как метод деплоя
- Добавьте переменные окружения
- Запустите деплой
- ✅ Используйте
.envфайл для хранения секретов (никогда не коммитьте его) - ✅ Ограничьте доступ к серверу (firewall, SSH ключи)
- ✅ Регулярно обновляйте зависимости
- ✅ Мониторьте логи на наличие ошибок
- ✅ Настройте автоматические бэкапы
- ✅ Используйте HTTPS для всех внешних запросов
- Сканируйте QR-код или перейдите по ссылке в бот
- Нажмите кнопку "📢 Подписаться на канал"
- Подпишитесь на канал
- Вернитесь в бот и нажмите "✅ Проверить подписку"
- Получите сообщение со скидкой 50%
/start- Начать работу с ботом/help- Справка по использованию
Bot/
├── bot.py # Основной файл бота
├── generate_qr.py # Генератор QR-кодов
├── requirements.txt # Зависимости Python
├── .env.example # Пример конфигурации
├── .env # Конфигурация (не в git)
├── .gitignore # Игнорируемые файлы
├── Dockerfile # Docker образ для деплоя
├── docker-compose.yml # Docker Compose конфигурация
├── telegram-bot.service # systemd service файл
├── deploy.sh # Скрипт автоматического деплоя
├── qr_codes/ # Директория для QR-кодов
│ └── .gitkeep
└── README.md # Документация
Бот использует метод getChatMember из Telegram Bot API для проверки статуса пользователя в канале:
async def check_subscription(user_id: int) -> bool:
member = await bot.get_chat_member(chat_id=CHANNEL_ID, user_id=user_id)
return member.status in ['creator', 'administrator', 'member']Возможные статусы:
creator- создатель каналаadministrator- администраторmember- участник (подписан)left- покинул каналkicked- исключен
QR-код содержит параметр start, который позволяет отслеживать источник перехода:
https://t.me/your_bot?start=qr_code_offline
Вы можете изменить UTM-параметры в .env файле для различных кампаний.
⚠️ Никогда не публикуйте файл.envв репозитории⚠️ Храните BOT_TOKEN в секрете⚠️ Не делитесь токеном бота с третьими лицами
Ошибка: Can't get chat member
Решение:
- Убедитесь, что бот добавлен в канал как администратор
- Проверьте, что
CHANNEL_IDв.envуказан верно (должен начинаться с @ или быть числовым ID)
Ошибка: ModuleNotFoundError: No module named 'PIL'
Решение:
pip install --upgrade qrcode[pil]Решение:
- Проверьте, что бот запущен (
python bot.py) - Убедитесь, что
BOT_TOKENв.envкорректный - Проверьте логи на наличие ошибок
При возникновении проблем:
- Проверьте логи бота
- Убедитесь, что все переменные в
.envзаполнены корректно - Проверьте права бота в канале
MIT License
Создано с использованием: