2025-09-01 04:10:55 +03:00
2025-08-16 02:27:32 +03:00
2025-09-01 03:52:56 +03:00
2025-08-12 01:05:39 +03:00
2025-08-26 17:01:38 +03:00
2025-08-31 17:40:08 +03:00
2025-08-31 05:52:00 +03:00
2025-08-23 11:41:20 +03:00
2025-08-21 06:06:27 +03:00
2025-09-01 04:10:55 +03:00
2025-08-30 18:46:10 +03:00
2025-08-04 16:41:11 +03:00
2025-08-31 04:03:37 +03:00
2025-09-01 00:11:27 +03:00
2025-08-30 14:35:38 +03:00

🚀 Remnawave Bedolaga Bot

Logo

🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API

Полнофункциональное решение с управлением пользователями, платежами и администрированием

Python PostgreSQL License GitHub Stars

🚀 Быстрый старт📖 Функционал🐳 Docker💬 Поддержка


🧪 (Тестирование бота)

💬 Bedolaga Chat - Для общения, вопросов, предложений

🌟 Почему Bedolagа?

Бот Бедолага не добрый и не милый. Он просто делает вашу работу вместо вас, принимает оплату, выдаёт подписки, интегрируется с Remnawave и тихо ненавидит всех, кто ещё не подключил его.

Вы хотите продавать VPN — Бедолага позволит это делать. Вы хотите спать — он позволит и это.

Полная автоматизация VPN бизнеса

  • 🎯 Готовое решение - разверни за 5 минут, начни продавать сегодня
  • 💰 Многоканальные платежи - Telegram Stars + Tribute + ЮKassa
  • 🔄 Автоматизация 99% - от регистрации до продления подписок
  • 📊 Детальная аналитика

🎛️ Гибкость конфигурации

  • 🌍 Выбор стран - пользователи сами выбирают нужные локации
  • 📱 Управление устройствами - от 1 до 10 шт
  • 📊 Гибкие тарифы - от 5GB до безлимита, от 14 дней до года
  • 🎁 Промо-система - коды на деньги, дни подписки, триал-периоды
  • 3 режима показа ссылки подписки: 1) С гайдом по подключению прямо в боте(тянущий данные приложений и ссылок на скачку из app-config.json) 2) Обычное открытие ссылки подписки в миниапе 3) Интеграция сабпейджа maposia - кастомно прописать ссылку можно
  • Возможность переключаться между пакетной продажей трафика и фиксированной(Пропуская шаг выбора пакета трафика при оформлении/настройки подписки юзера)
  • Возможность задать доступные дни для покупки первой подписки и при продлении

💪 Enterprise готовность

  • 🏗️ Современная архитектура - AsyncIO, PostgreSQL, Redis
  • 🔒 Безопасность - шифрование, валидация, rate limiting
  • 📈 Масштабируемость
  • 🔧 Мониторинг - Prometheus, Grafana, health checks
  • 🔧 Режим технических работ - Ручное включение + Мониторинг системы, который в случае падении панели Remnawave переведет бота в режим технических работ и обратно - отключит его, если панель поднимется.

🚀 Быстрый старт

🐳 Docker запуск

# 1. Скачай репозиторий
git clone https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot.git
cd remnawave-bedolaga-telegram-bot

# 2. Настрой конфиг
cp .env.example .env
nano .env  # Заполни токены и настройки

# 3. Создай необходимые директории
mkdir -p logs data

# 4. Запусти всё разом
docker compose up -d --build

# 5. Проверь статус
docker compose logs -f bot

⚙️ ENV параметры

Настройка Где взять Пример
🤖 BOT_TOKEN @BotFather 1234567890:AABBCCdd...
🔑 REMNAWAVE_API_KEY Твоя Remnawave панель eyJhbGciOiJIUzI1...
🌐 REMNAWAVE_API_URL URL твоей панели https://panel.example.com
👑 ADMIN_IDS Твой Telegram ID 123456789,987654321
🔧 ВСЕ ПАРАМЕТРЫ .env
# ===============================================
# 🤖 REMNAWAVE BEDOLAGA BOT CONFIGURATION
# ===============================================

# ===== TELEGRAM BOT =====
BOT_TOKEN=
ADMIN_IDS=
SUPPORT_USERNAME=@support

# ===== DATABASE =====
# Для Docker используйте PostgreSQL:
DATABASE_URL=postgresql+asyncpg://remnawave_user:secure_password_123@postgres:5432/remnawave_bot
# Для локального запуска без Docker используйте SQLite: sqlite+aiosqlite:///./bot.db 
# DATABASE_URL=postgresql+asyncpg://remnawave_user:secure_password_123@postgres:5432/remnawave_bot

REDIS_URL=redis://redis:6379/0

# Пароли для Docker (PostgreSQL/Redis)
POSTGRES_DB=remnawave_bot
POSTGRES_USER=remnawave_user
POSTGRES_PASSWORD=secure_password_123

# ===== REMNAWAVE API =====
REMNAWAVE_API_URL=
REMNAWAVE_API_KEY=

# ===== ТРИАЛ ПОДПИСКА =====
TRIAL_DURATION_DAYS=3
TRIAL_TRAFFIC_LIMIT_GB=10
TRIAL_DEVICE_LIMIT=1
TRIAL_SQUAD_UUID=
DEFAULT_TRAFFIC_RESET_STRATEGY=MONTH
DEFAULT_TRAFFIC_LIMIT_GB=100
DEFAULT_DEVICE_LIMIT=1

# ===== НАСТРОЙКИ ТРАФИКА =====
# Режим выбора трафика:
# "selectable" - пользователи выбирают пакеты трафика (по умолчанию)
# "fixed" - фиксированный лимит трафика для всех подписок
TRAFFIC_SELECTION_MODE=selectable

# Фиксированный лимит трафика в ГБ (используется только в режиме "fixed")
# 0 = безлимит
FIXED_TRAFFIC_LIMIT_GB=100

# ===== ПЕРИОДЫ ПОДПИСКИ =====
# Доступные периоды подписки (через запятую)
# Возможные значения: 14,30,60,90,180,360
AVAILABLE_SUBSCRIPTION_PERIODS=30,90,180
AVAILABLE_RENEWAL_PERIODS=30,90,180

# ===== ЦЕНЫ (в копейках) =====
BASE_SUBSCRIPTION_PRICE=0

# Цены за периоды
PRICE_14_DAYS=7000
PRICE_30_DAYS=9900
PRICE_60_DAYS=25900
PRICE_90_DAYS=36900
PRICE_180_DAYS=69900
PRICE_360_DAYS=109900

# Цены за трафик
PRICE_TRAFFIC_5GB=1000
PRICE_TRAFFIC_10GB=2000
PRICE_TRAFFIC_25GB=3000
PRICE_TRAFFIC_50GB=4000
PRICE_TRAFFIC_100GB=6000
PRICE_TRAFFIC_250GB=10000
PRICE_TRAFFIC_UNLIMITED=15000

# Цена за дополнительное устройство
PRICE_PER_DEVICE=5000

# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
REFERRAL_REGISTRATION_REWARD=10000
REFERRED_USER_REWARD=10000
REFERRAL_COMMISSION_PERCENT=25

# ===== АВТОПРОДЛЕНИЕ =====
AUTOPAY_WARNING_DAYS=3,1
DEFAULT_AUTOPAY_DAYS_BEFORE=3
MIN_BALANCE_FOR_AUTOPAY_KOPEKS=10000

# ===== ПЛАТЕЖНЫЕ СИСТЕМЫ =====

# Telegram Stars (работает автоматически)
TELEGRAM_STARS_ENABLED=true

# Tribute (https://tribute.app)
TRIBUTE_ENABLED=false
TRIBUTE_API_KEY=
TRIBUTE_WEBHOOK_SECRET=your_webhook_secret
TRIBUTE_DONATE_LINK=
TRIBUTE_WEBHOOK_PATH=/tribute-webhook
TRIBUTE_WEBHOOK_PORT=8081

# YooKassa (https://yookassa.ru)
YOOKASSA_ENABLED=false
YOOKASSA_SHOP_ID=
YOOKASSA_SECRET_KEY=
YOOKASSA_RETURN_URL=
YOOKASSA_DEFAULT_RECEIPT_EMAIL=receipts@yourdomain.com

# Настройки чеков для налоговой
YOOKASSA_VAT_CODE=1
# Коды НДС:
# 1 - НДС не облагается
# 2 - НДС 0%
# 3 - НДС 10%
# 4 - НДС 20%
# 5 - НДС 10/110
# 6 - НДС 20/120

YOOKASSA_PAYMENT_MODE=full_payment
# Способы расчета:
# full_payment - полная оплата
# partial_payment - частичная оплата
# advance - аванс
# full_prepayment - полная предоплата
# partial_prepayment - частичная предоплата
# credit - передача в кредит
# credit_payment - оплата кредита

YOOKASSA_PAYMENT_SUBJECT=service
# Предметы расчета:
# commodity - товар
# excise - подакцизный товар
# job - работа
# service - услуга
# gambling_bet - ставка в азартной игре
# gambling_prize - выигрыш в азартной игре
# lottery - лотерейный билет
# lottery_prize - выигрыш в лотерее
# intellectual_activity - результат интеллектуальной деятельности
# payment - платеж
# agent_commission - агентское вознаграждение
# composite - составной предмет расчета
# another - другое

# Webhook настройки
YOOKASSA_WEBHOOK_PATH=/yookassa-webhook
YOOKASSA_WEBHOOK_PORT=8082
YOOKASSA_WEBHOOK_SECRET=your_webhook_secret

# ===== ИНТЕРФЕЙС И UX =====

# Режим работы кнопки "Подключиться"
# guide - открывает гайд подключения (режим 1)
# miniapp_subscription - открывает ссылку подписки в мини-приложении (режим 2)
# miniapp_custom - открывает заданную ссылку в мини-приложении (режим 3)
CONNECT_BUTTON_MODE=guide

# URL для режима miniapp_custom (обязателен при CONNECT_BUTTON_MODE=miniapp_custom)
MINIAPP_CUSTOM_URL=

# ===== МОНИТОРИНГ И УВЕДОМЛЕНИЯ =====
MONITORING_INTERVAL=60
INACTIVE_USER_DELETE_MONTHS=3

# Уведомления
TRIAL_WARNING_HOURS=2
ENABLE_NOTIFICATIONS=true
NOTIFICATION_RETRY_ATTEMPTS=3
MONITORING_LOGS_RETENTION_DAYS=30
NOTIFICATION_CACHE_HOURS=24

# ===== РЕЖИМ ТЕХНИЧЕСКИХ РАБОТ =====
MAINTENANCE_MODE=false
MAINTENANCE_CHECK_INTERVAL=30
MAINTENANCE_AUTO_ENABLE=true
MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен. Попробуйте позже.

# ===== ЛОКАЛИЗАЦИЯ =====
DEFAULT_LANGUAGE=ru
AVAILABLE_LANGUAGES=ru,en

# ===== ЛОГИРОВАНИЕ =====
LOG_LEVEL=INFO
LOG_FILE=logs/bot.log

# ===== РАЗРАБОТКА =====
DEBUG=false
WEBHOOK_URL=
WEBHOOK_PATH=/webhook

# ===== ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ =====
# Конфигурация приложений для гайда подключения
APP_CONFIG_PATH=app-config.json
ENABLE_DEEP_LINKS=true
APP_CONFIG_CACHE_TTL=3600

🐳 Docker развертывание

📄 docker-compose.yml

services:
  postgres:
    image: postgres:15-alpine
    container_name: remnawave_bot_db
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot}
      POSTGRES_USER: ${POSTGRES_USER:-remnawave_user}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123}
      POSTGRES_INITDB_ARGS: "--encoding=UTF8"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - bot_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s

  redis:
    image: redis:7-alpine
    container_name: remnawave_bot_redis
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    networks:
      - bot_network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3

  bot:
    image: fr1ngg/remnawave-bedolaga-telegram-bot:latest
    container_name: remnawave_bot
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    env_file:
      - .env
    environment:
      DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-remnawave_user}:${POSTGRES_PASSWORD:-secure_password_123}@postgres:5432/${POSTGRES_DB:-remnawave_bot}
      REDIS_URL: redis://redis:6379/0
    volumes:
      - ./logs:/app/logs
      - ./data:/app/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "${TRIBUTE_WEBHOOK_PORT:-8081}:8081"
      - "${YOOKASSA_WEBHOOK_PORT:-8082}:8082"
    networks:
      - bot_network
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8081/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

volumes:
  postgres_data:
  redis_data:

networks:
  bot_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

🔧 Настройка webhook'ов (для Tribute/YooKassa)

Через Nginx

server {
    listen 80;
    server_name your-domain.com;
    
    location /tribute-webhook {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    location /yookassa-webhook {
        proxy_pass http://127.0.0.1:8082;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    location /health {
        proxy_pass http://127.0.0.1:8081/health;
    }
}

Через Caddy

your-domain.com {
    handle /tribute-webhook* {
        reverse_proxy localhost:8081
    }
    
    handle /yookassa-webhook* {
        reverse_proxy localhost:8082
    }
    
    handle /health {
        reverse_proxy localhost:8081/health
    }
}

🚀 Команды управления

# Быстрый старт
docker compose up -d --build

# Статус сервисов
docker compose ps

# Логи
docker compose logs -f bot

# Перезапуск
docker compose restart bot

# Остановка
docker compose down

# Полная очистка
docker compose down -v --remove-orphans

Функционал

👤 Для пользователей

🛒 Умная покупка подписок

  • 📅 Выбор периода (14-360 дней)
  • 📊 Настройка трафика (5GB - безлимит)
  • 🌍 Выбор стран через сквады
  • 📱 Количество устройств (1-10)

💰 Удобные платежи

  • Telegram Stars
  • 💳 Tribute (автопополнение)
  • 💳 YooKassa
  • 🎁 Реферальные бонусы

📱 Управление подписками

  • 📈 Просмотр статистики использования
  • 🔄 Автопродление с баланса
  • 🔄 Сброс/увеличение трафика
  • 🌍 Смена стран на лету

🎁 Бонусная система

  • 🎫 Промокоды на деньги/дни
  • 👥 Реферальная программа
  • 🆓 Бесплатный триал
  • 🔔 Ежедневные уведомления

⚙️ Для администраторов

📊 Мощная аналитика

  • 👥 Детальная статистика пользователей
  • 💰 Анализ подписок и платежей
  • 🖥️ Мониторинг серверов Remnawave
  • 📈 Финансовые отчеты

👥 Управление пользователями

  • 🔍 Поиск и редактирование профилей
  • 💰 Управление балансами
  • 🚫 Блокировка/разблокировка
  • 📋 Массовые операции

🎫 Промо-система

  • 🎁 Создание промокодов (деньги/дни)
  • 📊 Статистика использования
  • 🔄 Массовая генерация
  • ⚙️ Гибкие условия активации

🖥️ Мониторинг системы

  • 💚 Состояние Remnawave панели
  • 🔄 Синхронизация данных
  • 🌐 Управление сквадами
  • 📋 Логи и диагностика

📨 Коммуникации

  • 📢 Рассылки по сегментам
  • 🔔 Автоуведомления о продлении
  • 💬 Система поддержки
  • 📝 Настройка правил сервиса

🔧 Первичная настройка в боте

После запуска необходимо:

  1. 📡 Синхронизация серверов (обязательно!)

    • Зайди в бот → Админ панельПодпискиУправление серверами
    • Нажми Синхронизация и дождись завершения
    • Без этого пользователи не смогут выбирать страны!
  2. 👥 Синхронизация пользователей (если есть база)

    • Админ панельRemnawaveСинхронизация
    • Синхронизировать всех → дождись импорта

💳 Настройка платежных систем

Telegram Stars

Работает автоматически после указания BOT_TOKEN.

Tribute

  1. Зарегистрируйся на https://tribute.app
  2. Создай донат-ссылку
  3. Получи API ключ
  4. Настрой webhook в Tribute: https://your-domain.com/tribute-webhook

YooKassa

  1. Зарегистрируйся в ЮKassa
  2. Получи Shop ID и Secret Key
  3. Настрой webhook в YooKassa: https://your-domain.com/yookassa-webhook

💡 Использование

👤 Для пользователей

  1. 🚀 Старт → Найди бота и нажми /start
  2. 📋 Правила → Прими правила сервиса
  3. 💰 Баланс → "💰 Баланс" → пополни через Stars/Tribute
  4. 🛒 Подписка → "🛒 Купить подписку" → выбор тарифа → оплата
  5. 📱 Управление → "📋 Мои подписки" → конфигурация → получение ссылки
  6. 👥 Рефералы → "👥 Рефералы" → поделись ссылкой

⚙️ Для администраторов

Доступ через "⚙️ Админ панель":

  • 📦 Подписки → настройка серверов, цен, синхронизация
  • 👥 Пользователи → поиск, редактирование, блокировка
  • 🎁 Промокоды → создание бонусов, статистика
  • 📨 Рассылки → уведомления по сегментам
  • 🖥 Remnawave → мониторинг панели, синхронизация
  • 📊 Статистика → детальная аналитика бизнеса

🚀 Производительность

Пользователей Память CPU Диск Описание
1,000 512MB 1 vCPU 10GB Стартап
10,000 2GB 2 vCPU 50GB Малый бизнес
50,000 4GB 4 vCPU 100GB Средний бизнес
100,000+ 8GB+ 8+ vCPU 200GB+ 🚀 Enterprise

🐛 Устранение неполадок

Health Checks

  • Основной: http://localhost:8081/health
  • YooKassa: http://localhost:8082/health

Полезные команды

# Просмотр логов
docker compose logs -f bot

# Статус контейнеров
docker compose ps

# Перезапуск бота
docker compose restart bot

# Проверка базы данных
docker compose exec postgres pg_isready -U remnawave_user

Частые проблемы

Проблема Решение
Бот не отвечает Проверь BOT_TOKEN и интернет
Ошибки БД Проверь статус PostgreSQL контейнера
Webhook не работает Проверь настройки прокси-сервера
API Remnawave недоступен Проверь REMNAWAVE_API_URL и ключ

🏗️ Архитектура

💪 Современный стек технологий

  • 🐍 Python 3.11+ с AsyncIO - максимальная производительность
  • 🗄️ PostgreSQL 15+ - надежное хранение данных
  • Redis - быстрое кеширование и сессии
  • 🐳 Docker - простое развертывание в любой среде
  • 🔗 SQLAlchemy ORM - безопасная работа с БД
  • 🚀 aiogram 3 - современная Telegram Bot API

📁 Структура проекта

bedolaga_bot/
├── 🎯 main.py                     # Точка входа
├── 📦 requirements.txt            # Зависимости
├── ⚙️ .env.example               # Конфиг
├── ⚙️ app-config.json            # Информация для гайда в боте по подключению
│
├── 📱 app/
│   ├── 🤖 bot.py                 # Инициализация бота
│   ├── ⚙️ config.py              # Настройки
│   ├── 🎛️ states.py              # FSM состояния
│   │
│   ├── 🎮 handlers/              # Обработчики событий
│   │   ├── 🏠 start.py           # Регистрация и старт
│   │   ├── 🛒 subscription.py    # Подписки
│   │   ├── 💰 balance.py         # Баланс и платежи
│   │   ├── 🎁 promocode.py       # Промокоды
│   │   ├── 👥 referral.py        # Реферальная система
│   │   ├── 💬 support.py         # Техподдержка
│   │   └── 👑 admin/             # Админ панель
│   │       ├── 📊 statistics.py  # Статистика
│   │       ├── 👥 users.py       # Управление юзерами
│   │       ├── 🎫 promocodes.py  # Управление промокодами
│   │       ├── 📨 messages.py    # Рассылки
│   │       ├── 🔍 monitoring.py  # Мониторинг
│   │       └── 🔗 remnawave.py   # Система RemnaWave
│   │
│   ├── 🗄️ database/             # База данных
│   │   ├── 📊 models.py          # Модели SQLAlchemy
│   │   ├── 🔗 database.py        # Подключение к БД
│   │   └── 📝 crud/              # CRUD операции
│   │
│   ├── 🔧 services/             # Бизнес-логика
│   │   ├── 👤 user_service.py             # Сервис пользователей
│   │   ├── 📋 subscription_service.py     # Сервис подписок
│   │   ├── 💰 payment_service.py          # Платежи
│   │   ├── 🎁 promocode_service.py        # Промокоды
│   │   ├── 👥 referral_service.py         # Рефералы
│   │   ├── 🔍 monitoring_service.py       # Мониторинг
│   │   └── 🌐 remnawave_service.py       # Интеграция с Remnawave
│   │
│   ├── 🛠️ utils/                # Утилиты
│   ├── 🛡️ middlewares/           # Middleware
│   ├── 🌐 localization/          # Локализация
│   └── 🔌 external/              # Внешние API
│
├── 🔄 migrations/                # Миграции БД
└── 📋 logs/                      # Логи системы

🤝 Как помочь проекту


💬 Поддержка и сообщество

📞 Контакты

  • 💬 Telegram: @fringg - вопросы по разработке (только по делу!)
  • 💬 Telegram Group: Bedolaga Chat - Для общения, вопросов, предложений, багов
  • 🐛 Issues: GitHub Issues - баги и предложения

📚 Полезные ресурсы


💝 Благодарности

🌟 Топ спонсоры проекта

🥇 Место 👤 Спонсор 💰 Сумма 💬 От себя благодарю
🥇 Илья (@ispanec_nn) $30 За веру в проект с самого начала
🥈 @pilot_737800 ₽2,250 За активное тестирование и фидбек
🥉 @Legacyyy777 ₽1,000 За ценные предложения по улучшению

🌟 Особая благодарность

  • Remnawave Team - за отличную панель и API

📄 Лицензия

Проект распространяется под лицензией MIT


Description
No description provided
Readme MIT 42 MiB
Languages
Python 89.5%
HTML 10.5%