Полноценный реферальный бот с принудительной подпиской, личным кабинетом и интерактивным меню на aiogram-dialog.
Скопируйте и выполните на Linux-сервере (Ubuntu/Debian):
# 1. Системные зависимости
sudo apt update && sudo apt install -y python3 python3-pip python3-venv git
# 2. Клонировать репозиторий
git clone https://github.com/Riderus88/Referal.git
cd Referal
# 3. Виртуальное окружение и зависимости
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# 4. Настроить конфиг
cp .env.example .env
nano .env # укажите BOT_TOKEN и ADMIN_IDS
# 5. Запуск
python -m bot.mainПеред запуском создайте бота через @BotFather и узнайте свой Telegram ID через @userinfobot. Подробная инструкция — ниже.
- Реферальные ссылки
t.me/BotName?start=ref_XXXXX - Force Subscribe — проверка подписки на группы/каналы
- Мониторинг вступлений и выходов из группы (
ChatMemberUpdated) - Интерактивное inline-меню с FSM-навигацией
- Личный кабинет, статистика, топ кураторов
- Админ-панель: группы, рассылка, логи, пользователи
| Компонент | Версия |
|---|---|
| ОС | Ubuntu 20.04+ / Debian 11+ / любой Linux с systemd |
| Python | 3.10 или новее |
| RAM | от 512 MB |
| Диск | от 500 MB |
Дополнительно понадобится:
- VPS или выделенный сервер с доступом по SSH
- Аккаунт Telegram
- Бот, созданный через @BotFather
- Telegram-группа или канал для Force Subscribe
ssh user@your-server-ipЗамените user на имя пользователя, your-server-ip — на IP вашего VPS.
sudo apt update
sudo apt install -y python3 python3-pip python3-venv gitsudo dnf install -y python3 python3-pip gitПроверьте версию Python:
python3 --version
# Должно быть: Python 3.10.x или вышеЕсли версия ниже 3.10 (Ubuntu 20.04), установите Python из deadsnakes:
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3.11-devДалее вместо python3 используйте python3.11.
- Откройте @BotFather.
- Отправьте
/newbot, задайте имя и username (должен заканчиваться наbot). - Сохраните токен — он понадобится в
.env.
/mybots → ваш бот:
| Настройка | Значение | Зачем |
|---|---|---|
| Group Privacy | Turn off |
Бот видит сообщения в группе (нужно для /add_group_here) |
| Allow Groups? | Enable |
Бот работает в группах |
При добавлении бота в группу согласитесь на право «Просмотр списка участников» — без него Force Subscribe и отслеживание рефералов не работают.
Напишите @userinfobot или @getmyid_bot и скопируйте число из строки Id:.
Пример: 123456789 — это значение для ADMIN_IDS.
cd ~
git clone https://github.com/Riderus88/Referal.git
cd ReferalРепозиторий: github.com/Riderus88/Referal
cd ~/Referal
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txtПосле активации в начале строки появится (venv).
Устанавливаемые пакеты:
| Пакет | Назначение |
|---|---|
aiogram |
Telegram Bot API |
aiogram-dialog |
Интерактивные inline-меню |
sqlalchemy + aiosqlite |
База данных SQLite |
python-dotenv |
Загрузка .env |
apscheduler |
Ежедневная рассылка статистики |
cp .env.example .env
nano .envЗаполните файл:
# ОБЯЗАТЕЛЬНО — токен от @BotFather
BOT_TOKEN=7123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# ОБЯЗАТЕЛЬНО — Telegram ID администраторов через запятую
ADMIN_IDS=123456789
# База данных (можно не менять)
DATABASE_URL=sqlite+aiosqlite:///./referral_bot.db
# Часовой пояс сервера
TIMEZONE=Europe/Moscow
# Ежедневная статистика админам (true / false)
DAILY_STATS_ENABLED=false
# Час отправки сводки (0–23)
DAILY_STATS_HOUR=9
# Пароль для подтверждения «Сброс статистики» в админ-меню
RESET_STATS_PASSWORD=your_secure_password_hereСохраните: Ctrl+O → Enter → Ctrl+X.
| Переменная | Обязательная | Описание |
|---|---|---|
BOT_TOKEN |
✅ | Токен бота от @BotFather |
ADMIN_IDS |
✅ | ID администраторов. Несколько: 123456789,987654321 |
DATABASE_URL |
❌ | Подключение к БД. По умолчанию referral_bot.db в корне проекта |
TIMEZONE |
❌ | Часовой пояс. Пример: Europe/Moscow, Asia/Novosibirsk |
DAILY_STATS_ENABLED |
❌ | true — ежедневная сводка статистики админам |
DAILY_STATS_HOUR |
❌ | Час отправки (0–23) |
RESET_STATS_PASSWORD |
❌ | Пароль для подтверждения сброса статистики в админ-меню |
Не публикуйте
.env— файл содержит секретный токен. Он добавлен в.gitignore.
Защитите файл:
chmod 600 .envsource venv/bin/activate
python -m bot.mainПри успешном запуске:
INFO:__main__:Бот запущен
Откройте бота в Telegram и отправьте /start. Если всё работает — остановите бота: Ctrl+C.
При первом запуске создаётся файл referral_bot.db.
Создайте systemd-сервис:
sudo nano /etc/systemd/system/referral-bot.serviceВставьте (замените your_user и путь к проекту):
[Unit]
Description=Referral Telegram Bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root/Referal
ExecStart=/root/Referal/venv/bin/python -m bot.main
Restart=always
RestartSec=10
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
your_user— имя пользователя Linux, под которым запущен бот (whoami).
Активируйте и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl enable referral-bot
sudo systemctl start referral-bot
sudo systemctl status referral-botСтатус active (running) означает, что бот работает.
# Статус
sudo systemctl status referral-bot
# Остановить
sudo systemctl stop referral-bot
# Запустить
sudo systemctl start referral-bot
# Перезапустить (после изменений в коде или .env)
sudo systemctl restart referral-bot
# Логи в реальном времени
journalctl -u referral-bot -f
# Последние 100 строк логов
journalctl -u referral-bot -n 100 --no-pager- Откройте Telegram-группу → Управление группой → Участники → Добавить → найдите бота.
- Назначьте бота администратором с правом «Просмотр списка участников» (остальные права не обязательны).
В группе от имени администратора (ID из ADMIN_IDS) отправьте:
/add_group_here
Бот ответит:
✅ Группа Название вашей группы добавлена для Force Subscribe.
- Добавьте бота администратором в канал.
- Перешлите сообщение из канала боту в личку.
- Ответьте на пересланное сообщение:
/add_group.
- Откройте бота в Telegram →
/start— появится главное меню. - Без подписки на группу — кнопки «Подписаться» и «Проверить подписку».
- Подпишитесь → «✅ Проверить подписку» → меню откроется.
- «🔗 Моя ссылка» → реферальная ссылка
t.me/YourBot?start=ref_XXXXX. - Переход по ссылке с другого аккаунта → куратор получит уведомление.
cd ~/Referal
git pull
# Обновить зависимости
source venv/bin/activate
pip install -r requirements.txt --upgrade
# Перезапустить сервис
sudo systemctl restart referral-bot
# Проверить статус
sudo systemctl status referral-botБаза referral_bot.db сохраняется между перезапусками.
| Команда | Описание |
|---|---|
/start |
Регистрация + главное меню |
/menu |
Открыть главное меню |
/profile |
Личный кабинет |
| Команда | Описание |
|---|---|
/add_group_here |
Добавить текущую группу/канал для Force Subscribe |
/add_group |
Добавить группу через пересланное сообщение |
/remove_group <chat_id> |
Удалить группу из проверки подписки |
/users |
Количество зарегистрированных пользователей |
/admin |
Справка по админ-командам |
Полная админ-панель — через ⚙️ Настройки в главном меню (только для ID из
ADMIN_IDS).
Referal/
├── .env # Конфигурация (не в git)
├── .env.example # Шаблон конфигурации
├── requirements.txt # Python-зависимости
├── referral_bot.db # База данных (создаётся автоматически)
├── venv/ # Виртуальное окружение
└── bot/
├── main.py # Точка входа
├── config.py # Загрузка настроек из .env
├── database/
│ ├── models.py # Модели SQLAlchemy
│ └── db.py # Подключение к БД
├── dialogs/ # aiogram-dialog меню (FSM)
├── handlers/ # Обработчики команд и событий
├── middlewares/ # Force Subscribe middleware
├── services/ # Бизнес-логика
└── utils/ # Вспомогательные функции
| Состояние | Раздел |
|---|---|
MainMenu |
Главное меню |
ProfileMenu |
Личный кабинет |
ReferralMenu |
Список рефералов с пагинацией |
StatsMenu |
Общая статистика и топ кураторов |
SettingsMenu |
Админ-панель |
GroupManagement |
Управление группами Force Subscribe |
| Ошибка | Решение |
|---|---|
BOT_TOKEN не задан в .env |
Проверьте файл .env в WorkingDirectory сервиса |
ModuleNotFoundError |
source venv/bin/activate && pip install -r requirements.txt |
status=203/EXEC в systemd |
Проверьте пути в .service: ExecStart, WorkingDirectory, User |
Permission denied |
chmod +x venv/bin/python или проверьте владельца файлов: chown -R your_user:your_user ~/Referal |
Проверка путей:
# Файл .env существует?
ls -la ~/Referal/.env
# Python из venv работает?
~/Referal/venv/bin/python --version
# Запуск вручную от имени пользователя сервиса
sudo -u your_user bash -c 'cd ~/Referal && source venv/bin/activate && python -m bot.main'| Проблема | Решение |
|---|---|
| Бот не видит подписку | Бот — администратор группы с правом «Просмотр участников» |
| Группа не добавлена | /add_group_here в группе от имени админа |
| Кнопка «Подписаться» не работает | Создайте постоянную invite-ссылку в настройках группы |
| Проблема | Решение |
|---|---|
| Статус «⏳ ожидает» | Пользователь перешёл по ссылке, но не вступил в группу |
| Нет уведомлений куратору | Куратор должен нажать /start у бота (бот может писать в личку) |
| Вступление не фиксируется | Бот — админ группы; проверьте логи: journalctl -u referral-bot -f |
- Добавьте @getidsbot в группу.
- Или посмотрите ID в ответе бота на
/add_group_here(формат:-1001234567890).
sudo systemctl status referral-bot
sudo systemctl start referral-botЕсли сервис не стартует автоматически:
sudo systemctl enable referral-botБаза данных — один файл referral_bot.db в корне проекта.
cd ~/Referal
# Бэкап с датой в имени файла
cp referral_bot.db ~/referral_bot_backup_$(date +%Y%m%d).db
# Или в отдельную папку
mkdir -p ~/backups
cp referral_bot.db ~/backups/referral_bot_$(date +%Y%m%d_%H%M).dbАвтоматический бэкап через cron (ежедневно в 3:00):
mkdir -p ~/backups
crontab -eДобавить строку (замените your_user на имя пользователя Linux):
0 3 * * * cp /home/your_user/Referal/referral_bot.db /home/your_user/backups/referral_bot_$(date +\%Y\%m\%d).dbcd ~/Referal
# Остановить бота
sudo systemctl stop referral-bot
# Восстановить файл (укажите свой бэкап)
cp ~/backups/referral_bot_20260805.db referral_bot.db
# Запустить бота
sudo systemctl start referral-botУдаляет всех пользователей, рефералов, группы и логи. Файл .env не затрагивается.
cd ~/Referal
# Остановить бота
sudo systemctl stop referral-bot
# По желанию — сохранить бэкап перед удалением
cp referral_bot.db ~/referral_bot_before_reset.db
# Удалить базу
rm referral_bot.db
# Запустить бота (создастся новая пустая БД)
sudo systemctl start referral-botПосле сброса заново:
- Отправьте боту
/start - В группе выполните
/add_group_hereот администратора - Проверьте работу с чистой базой
В боте: ⚙️ Настройки → 🗑 Сброс статистики → введите пароль из RESET_STATS_PASSWORD в .env
Сбрасывает только членства в группах и логи активности. Пользователи и привязанные группы остаются. Без пароля в .env кнопка не сработает.
Свободное использование и модификация.