🚀 Remnawave Bedolaga Bot
🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API
Полнофункциональное решение с управлением пользователями, платежами и администрированием
🚀 Быстрый старт • 📖 Функционал • 🐳 Docker • 💻 Локальная разработка • 💬 Поддержка
🧪 Тестирование бота
💬 Bedolaga Chat - Для общения, вопросов, предложений
🌟 Почему Bedolaga?
Бот Бедолага не добрый и не милый. Он просто делает вашу работу вместо вас, принимает оплату, выдаёт подписки, интегрируется с Remnawave и тихо ненавидит всех, кто ещё не подключил его.
Вы хотите продавать VPN — Бедолага позволит это делать. Вы хотите спать — он позволит и это.
⚡ Полная автоматизация VPN бизнеса
- 🎯 Готовое решение - разверни за 5 минут, начни продавать сегодня
- 💰 Многоканальные платежи - Telegram Stars + Tribute + CryptoBot + ЮKassa + MulenPay + PayPalych + P2P
- 🔄 Автоматизация 99% - от регистрации до продления подписок
- 📊 Детальная аналитика - полная картина вашего бизнеса
- 💬 Уведомления в топики об: Активация триала 💎 Покупка подписки 🔄 Конверсия из триала в платную ⏰ Продление подписки 💰 Пополнение баланса 🚧 Включении тех работ ♻️ Появлении новой версии бота
🎛️ Гибкость конфигурации
- 🌍 Умный выбор серверов - автоматический пропуск при одном сервере, мультивыбор при нескольких
- 📱 Управление устройствами - от 1 до неограниченного количества
- 📊 Режимы продажи трафика - фиксированный лимит или выбор пакетов
- 🎁 Промо-система - коды на деньги, дни подписки, триал-периоды
- 🔧 Гибкие тарифы - от 5GB до безлимита, от 14 дней до года
💪 Enterprise готовность
- 🏗️ Современная архитектура - AsyncIO, PostgreSQL, Redis
- 🔒 Безопасность - интеграция с системой защиты панели через куки-аутентификацию
- 📈 Масштабируемость - от стартапа до крупного бизнеса
- 🔧 Мониторинг - автоматическое управление режимом тех. работ
- 🛡️ Защита панели - поддержка remnawave-reverse-proxy
- 🗄️ Бекапы/Восстановление - автобекапы и восстановление бд прямо в боте с уведомления в топики
- ✍️ Проверка на подписку - проверяет подписку на канал
📚 Поддерживаемые методы авторизации
| Метод | Заголовок | Описание |
|---|---|---|
| API Key | X-Api-Key: your_api_key | Стандартный API ключ |
| Bearer Token | Authorization: Bearer token | Классический Bearer token |
| Basic Auth | X-Api-Key: Basic base64(user:pass) | Basic Authentication |
| eGames Cookies | Cookies в формате key:value | Для панелей eGames |
🚀 Быстрый старт
🐳 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 ./data/backups ./data/referral_qr
chmod -R 755 ./logs ./data
sudo chown -R 1000:1000 ./logs ./data
# 4. Запусти всё разом
docker compose up -d
# 5. Проверь статус
docker compose logs
⚙️ Конфигурация
🔧 Основные параметры
| Настройка | Где взять | Пример |
|---|---|---|
| 🤖 BOT_TOKEN | @BotFather | 1234567890:AABBCCdd... |
| 🔑 REMNAWAVE_API_KEY | Твоя Remnawave панель | eyJhbGciOiJIUzI1... |
| 🌐 REMNAWAVE_API_URL | URL твоей панели | https://panel.example.com |
| 🛡️ REMNAWAVE_SECRET_KEY | Ключ защиты панели | secret_name:secret_value |
| 👑 ADMIN_IDS | Твой Telegram ID | 123456789,987654321 |
📊 Статус серверов в главном меню
| Переменная | Описание | Пример |
|---|---|---|
SERVER_STATUS_MODE |
Режим работы кнопки: disabled, external_link (открывает ссылку в браузере), external_link_miniapp (открывает ссылку во встроенном мини-приложении Telegram) или xray (интеграция с XrayChecker). |
xray |
SERVER_STATUS_EXTERNAL_URL |
Прямая ссылка на внешний мониторинг (используется в режимах external_link и external_link_miniapp). |
https://status.example.com |
SERVER_STATUS_METRICS_URL |
URL страницы метрик XrayChecker (Prometheus формат). | https://sub.example.com/metrics |
SERVER_STATUS_METRICS_USERNAME / SERVER_STATUS_METRICS_PASSWORD |
Данные Basic Auth, если страница метрик защищена паролем. | status / secret |
SERVER_STATUS_ITEMS_PER_PAGE |
Количество серверов, показываемых на одной странице в режиме интеграции. | 10 |
🛡️ Защита панели Remnawave
Для панелей, защищенных через remnawave-reverse-proxy:
# Для панелей установленных скриптом eGames
REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD
# Или если ключ и значение одинаковые
REMNAWAVE_SECRET_KEY=secret_key_name
📊 Режимы продажи трафика
Выбираемые пакеты (по умолчанию)
TRAFFIC_SELECTION_MODE=selectable
TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,100:15000:true,250:17000:false,500:19000:false,1000:19500:true,0:20000:true"
Фиксированный лимит
TRAFFIC_SELECTION_MODE=fixed
FIXED_TRAFFIC_LIMIT_GB=100 # 0 = безлимит
TRAFFIC_PACKAGES_CONFIG="100:15000:true" # Указать цену обязательно для FIXED_TRAFFIC_LIMIT_GB
💰 Система ценообразования
Цена подписки рассчитывается по формуле: Базовая цена + Стоимость трафика + Доп. устройства + Доп. серверы
Пример расчета для подписки на 180 дней:
- Базовый период: 400₽
- Трафик безлимит: 200₽/мес × 6 мес = 1200₽
- 4 устройства: 50₽/мес × 6 мес = 300₽
- 2 сервера: 100₽/мес × 6 мес = 1200₽
- Итого: 3100₽
# Базовая цена подписки
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
# Скидка для Базовых Юзеров (Для других Промогрупп не работает!)
BASE_PROMO_GROUP_PERIOD_DISCOUNTS_ENABLED=false
# 60:10 = скидка 10% на все доп услуги. 90:20 = 20% за 90 дней и тд
BASE_PROMO_GROUP_PERIOD_DISCOUNTS=60:10,90:20,180:40,360:70
# Выводимые пакеты трафика и их цены в копейках
TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,100:15000:true,250:17000:false,500:19000:false,1000:19500:true,0:20000:true"
# Цена за дополнительное устройство
PRICE_PER_DEVICE=5000
# Настройка доступных периодов
AVAILABLE_SUBSCRIPTION_PERIODS=30,90,180
AVAILABLE_RENEWAL_PERIODS=30,90,180
📱 Управление устройствами
# Бесплатные устройства в триал подписке
TRIAL_DEVICE_LIMIT=1
# Бесплатные устройства в платной подписке
DEFAULT_DEVICE_LIMIT=3
# Максимум устройств для покупки (0 = без лимита)
MAX_DEVICES_LIMIT=15
👥 Реферальная система
# Минимальная сумма пополнения для активации бонусов
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
# Бонус новому пользователю при первом пополнении
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
# Бонус пригласившему при первом пополнении реферала
REFERRAL_INVITER_BONUS_KOPEKS=10000
# Процент комиссии с последующих пополнений
REFERRAL_COMMISSION_PERCENT=25
# Уведомления
REFERRAL_NOTIFICATIONS_ENABLED=true
REFERRAL_NOTIFICATION_RETRY_ATTEMPTS=3
🛡️ Мониторинг и техническое обслуживание
# Автоматический режим тех. работ
MAINTENANCE_MODE=false
MAINTENANCE_AUTO_ENABLE=true
MAINTENANCE_CHECK_INTERVAL=30
# Интервал проверки состояния панели (секунды)
MONITORING_INTERVAL=60
# Сообщение для пользователей
MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен.
🔧 Полная конфигурация .env
# ===============================================
# 🤖 REMNAWAVE BEDOLAGA BOT CONFIGURATION
# ===============================================
# ===== TELEGRAM BOT =====
BOT_TOKEN=
ADMIN_IDS=
# Ссылка на поддержку: Telegram username (например, @support) или полный URL
SUPPORT_USERNAME=@support
# Уведомления администраторов
ADMIN_NOTIFICATIONS_ENABLED=true
ADMIN_NOTIFICATIONS_CHAT_ID=-1001234567890 # Замени на ID твоего канала (-100) - ПРЕФИКС ЗАКРЫТОГО КАНАЛА! ВСТАВИТЬ СВОЙ ID СРАЗУ ПОСЛЕ (-100) БЕЗ ПРОБЕЛОВ!
ADMIN_NOTIFICATIONS_TOPIC_ID=123 # Опционально: ID топика
ADMIN_NOTIFICATIONS_TICKET_TOPIC_ID=126 # Опционально: ID топика для тикетов
# Обязательная подписка на канал
CHANNEL_SUB_ID= # Опционально ID твоего канала (-100)
CHANNEL_IS_REQUIRED_SUB=false # Обязательна ли подписка на канал
CHANNEL_LINK= # Опционально ссылка на канал
# ===== DATABASE CONFIGURATION =====
# Режим базы данных: "auto", "postgresql", "sqlite"
DATABASE_MODE=auto
# Основной URL (можно оставить пустым для автоматического выбора)
DATABASE_URL=
# PostgreSQL настройки (для Docker и кастомных установок)
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=remnawave_bot
POSTGRES_USER=remnawave_user
POSTGRES_PASSWORD=secure_password_123
# SQLite настройки (для локального запуска)
SQLITE_PATH=./data/bot.db
LOCALES_PATH=./locales
# Redis
REDIS_URL=redis://redis:6379/0
# ===== REMNAWAVE API =====
REMNAWAVE_API_URL=https://panel.example.com
REMNAWAVE_API_KEY=your_api_key_here
# Тип авторизации: "api_key", "basic_auth"
REMNAWAVE_AUTH_TYPE=api_key
# Для панелей с Basic Auth (опционально)
REMNAWAVE_USERNAME=
REMNAWAVE_PASSWORD=
# Для панелей установленных скриптом eGames прописывать ключ в формате XXXXXXX:DDDDDDDD
REMNAWAVE_SECRET_KEY=
# Шаблон описания пользователя в панели Remnawave
# Доступные плейсхолдеры:
# {full_name} — Имя, Фамилия из Telegram
# {username} — @логин из Telegram (c @)
# {username_clean} — логин из Telegram (без @)
# {telegram_id} — ID Telegram
REMNAWAVE_USER_DESCRIPTION_TEMPLATE="Bot user: {full_name} {username}"
# Режим удаления пользователей из панели RemnaWave
# delete - полностью удалить пользователя из панели
# disable - только деактивировать пользователя
REMNAWAVE_USER_DELETE_MODE=delete
# ========= ПОДПИСКИ =========
# ===== ТРИАЛ ПОДПИСКА =====
TRIAL_DURATION_DAYS=3
TRIAL_TRAFFIC_LIMIT_GB=10
TRIAL_DEVICE_LIMIT=1
TRIAL_SQUAD_UUID=
# ===== ПЛАТНАЯ ПОДПИСКА =====
# Сколько устройств доступно по дефолту при покупке платной подписки
DEFAULT_DEVICE_LIMIT=3
# Максимум устройств достопных к покупке (0 = Нет лимита)
MAX_DEVICES_LIMIT=15
# Дефолт параметры для подписок выданных через админку
DEFAULT_TRAFFIC_LIMIT_GB=100
# ===== ГЛОБАЛЬНЫЙ ПАРАМЕТР ДЛЯ ВСЕХ ПОДПИСОК =====
DEFAULT_TRAFFIC_RESET_STRATEGY=MONTH
# ===== НАСТРОЙКИ ТРАФИКА =====
# Режим выбора трафика:
# "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
# Скидка для Базовых Юзеров (Для других Промогрупп не работает!)
BASE_PROMO_GROUP_PERIOD_DISCOUNTS_ENABLED=false
# 60:10 = скидка 10% на все доп услуги. 90:20 = 20% за 90 дней и тд
BASE_PROMO_GROUP_PERIOD_DISCOUNTS=60:10,90:20,180:40,360:70
# Выводимые пакеты трафика и их цены в копейках
TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,100:15000:true,250:17000:false,500:19000:false,1000:19500:true,0:20000:true"
# Цена за дополнительное устройство (DEFAULT_DEVICE_LIMIT идет бесплатно!)
PRICE_PER_DEVICE=5000
# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
REFERRAL_INVITER_BONUS_KOPEKS=10000
REFERRAL_COMMISSION_PERCENT=25
# Уведомления
REFERRAL_NOTIFICATIONS_ENABLED=true
REFERRAL_NOTIFICATION_RETRY_ATTEMPTS=3
# ===== АВТОПРОДЛЕНИЕ =====
AUTOPAY_WARNING_DAYS=3,1
DEFAULT_AUTOPAY_DAYS_BEFORE=3
MIN_BALANCE_FOR_AUTOPAY_KOPEKS=10000
# ===== ПЛАТЕЖНЫЕ СИСТЕМЫ =====
# Telegram Stars (работает автоматически)
TELEGRAM_STARS_ENABLED=true
TELEGRAM_STARS_RATE_RUB=1.3
# Tribute (https://tribute.app)
TRIBUTE_ENABLED=false
TRIBUTE_API_KEY=
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_SBP_ENABLED=false
# Настройки чеков для налоговой
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
# Лимиты сумм пополнения через YooKassa (в копейках)
YOOKASSA_MIN_AMOUNT_KOPEKS=5000
YOOKASSA_MAX_AMOUNT_KOPEKS=1000000
# Быстрый выбор суммы пополнения через YooKassa
YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLED=true
# ===== НАСТРОЙКИ ОПИСАНИЙ ПЛАТЕЖЕЙ =====
# Эти настройки позволяют изменить описания платежей,
# чтобы избежать блокировок платежных систем
PAYMENT_SERVICE_NAME=Интернет-сервис
PAYMENT_BALANCE_DESCRIPTION=Пополнение баланса
PAYMENT_SUBSCRIPTION_DESCRIPTION=Оплата подписки
PAYMENT_BALANCE_TEMPLATE={service_name} - {description}
PAYMENT_SUBSCRIPTION_TEMPLATE={service_name} - {description}
# CRYPTOBOT
CRYPTOBOT_ENABLED=false
CRYPTOBOT_API_TOKEN=123456789:AAzQcZWQqQAbsfgPnOLr4FHC8Doa4L7KryC
CRYPTOBOT_WEBHOOK_SECRET=your_webhook_secret_here
CRYPTOBOT_BASE_URL=https://pay.crypt.bot
CRYPTOBOT_TESTNET=false
CRYPTOBOT_WEBHOOK_PATH=/cryptobot-webhook
CRYPTOBOT_WEBHOOK_PORT=8081
CRYPTOBOT_DEFAULT_ASSET=USDT
CRYPTOBOT_ASSETS=USDT,TON,BTC,ETH,LTC,BNB,TRX,USDC
CRYPTOBOT_INVOICE_EXPIRES_HOURS=24
# MULENPAY
MULENPAY_ENABLED=false
MULENPAY_API_KEY=
MULENPAY_SECRET_KEY=
MULENPAY_SHOP_ID=<ID магазина>
# необязательно, есть дефолтные значения
MULENPAY_BASE_URL=https://mulenpay.ru/api
MULENPAY_WEBHOOK_PATH=/mulenpay-webhook
MULENPAY_DESCRIPTION="Пополнение баланса"
MULENPAY_LANGUAGE=ru
MULENPAY_VAT_CODE=0
MULENPAY_PAYMENT_SUBJECT=4
MULENPAY_PAYMENT_MODE=4
MULENPAY_MIN_AMOUNT_KOPEKS=10000
MULENPAY_MAX_AMOUNT_KOPEKS=10000000
# PAYPALYCH / PAL24
PAL24_ENABLED=false
PAL24_API_TOKEN=
PAL24_SHOP_ID=
PAL24_SIGNATURE_TOKEN=
PAL24_BASE_URL=https://pal24.pro/api/v1/
PAL24_WEBHOOK_PATH=/pal24-webhook
PAL24_WEBHOOK_PORT=8084
PAL24_PAYMENT_DESCRIPTION="Пополнение баланса"
PAL24_MIN_AMOUNT_KOPEKS=10000
PAL24_MAX_AMOUNT_KOPEKS=100000000
PAL24_REQUEST_TIMEOUT=30
# Настройки PayPalych
1. Включите интеграцию (`PAL24_ENABLED=true`) и укажите `PAL24_API_TOKEN`, `PAL24_SHOP_ID`, а также `PAL24_SIGNATURE_TOKEN` для проверки подписи уведомлений.
2. Настройте в кабинете PayPalych **Result URL** и success/fail redirect на `https://<ваш-домен>/pal24-webhook`.
3. Убедитесь, что порт `PAL24_WEBHOOK_PORT` (по умолчанию `8084`) проброшен через прокси/фаервол.
4. Для теста можно отправить postback вручную (пример команды см. ниже в разделе «Проверка PayPalych postback»).
# ===== ИНТЕРФЕЙС И UX =====
# Включить логотип для всех сообщений (true - с изображением, false - только текст)
ENABLE_LOGO_MODE=true
LOGO_FILE=vpn_logo.png
# Скрыть блок с ссылкой подключения в разделе с информацией о подписке
HIDE_SUBSCRIPTION_LINK=false
# Режим работы кнопки "Подключиться"
# guide - открывает гайд подключения (режим 1)
# miniapp_subscription - открывает ссылку подписки в мини-приложении (режим 2)
# miniapp_custom - открывает заданную ссылку в мини-приложении (режим 3)
# link - Открывает ссылку напрямую в браузере (режим 4)
# happ_cryptolink - открывает ссылку из поля cryptoLink (режим 5)
CONNECT_BUTTON_MODE=guide
# URL для режима miniapp_custom (обязателен при CONNECT_BUTTON_MODE=miniapp_custom)
MINIAPP_CUSTOM_URL=
# Параметры режима happ_cryptolink
CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLED=false
HAPP_DOWNLOAD_LINK_IOS=
HAPP_DOWNLOAD_LINK_ANDROID=
HAPP_DOWNLOAD_LINK_PC=
# Пропустить принятие правил использования бота
SKIP_RULES_ACCEPT=false
# Пропустить запрос реферального кода
SKIP_REFERRAL_CODE=false
# ===== МОНИТОРИНГ И УВЕДОМЛЕНИЯ =====
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
# ===== СТАТУС СЕРВЕРОВ =====
# Режимы: disabled, external_link, external_link_miniapp, xray
SERVER_STATUS_MODE=disabled
# Ссылка на внешний мониторинг (для режимов external_link и external_link_miniapp)
SERVER_STATUS_EXTERNAL_URL=
# URL метрик XrayChecker (для режима xray)
SERVER_STATUS_METRICS_URL=
# Данные Basic Auth (опционально)
SERVER_STATUS_METRICS_USERNAME=
SERVER_STATUS_METRICS_PASSWORD=
# Проверять SSL сертификат при запросе метрик
SERVER_STATUS_METRICS_VERIFY_SSL=true
# Таймаут запроса к метрикам (в секундах)
SERVER_STATUS_REQUEST_TIMEOUT=10
# Количество серверов на странице в режиме интеграции
SERVER_STATUS_ITEMS_PER_PAGE=10
# ===== РЕЖИМ ТЕХНИЧЕСКИХ РАБОТ =====
MAINTENANCE_MODE=false
MAINTENANCE_CHECK_INTERVAL=30
MAINTENANCE_AUTO_ENABLE=true
MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен. Попробуйте позже.
# ===== ЛОКАЛИЗАЦИЯ =====
# Укажите язык из AVAILABLE_LANGUAGES. При некорректном значении используется ru.
DEFAULT_LANGUAGE=ru
AVAILABLE_LANGUAGES=ru,en
# ===== ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ =====
# Конфигурация приложений для гайда подключения
APP_CONFIG_PATH=app-config.json
ENABLE_DEEP_LINKS=true
APP_CONFIG_CACHE_TTL=3600
# ===== СИСТЕМА БЕКАПОВ =====
BACKUP_AUTO_ENABLED=true
BACKUP_INTERVAL_HOURS=24
BACKUP_TIME=03:00
# Первый запуск автобекапа выполняется в ближайшее время BACKUP_TIME после старта бота,
# далее копии создаются каждые BACKUP_INTERVAL_HOURS.
BACKUP_MAX_KEEP=7
BACKUP_COMPRESSION=true
BACKUP_INCLUDE_LOGS=false
BACKUP_LOCATION=/app/data/backups
# Отправка бэкапов в телеграм
BACKUP_SEND_ENABLED=true
BACKUP_SEND_CHAT_ID=-100123456789 # Замени на ID твоего канала (-100) - ПРЕФИКС ЗАКРЫТОГО КАНАЛА!
# ВСТАВИТЬ СВОЙ ID СРАЗУ ПОСЛЕ (-100) БЕЗ ПРОБЕЛОВ!
BACKUP_SEND_TOPIC_ID=123 # Опционально: ID топика
# ===== ПРОВЕРКА ОБНОВЛЕНИЙ БОТА =====
VERSION_CHECK_ENABLED=true
VERSION_CHECK_REPO=fr1ngg/remnawave-bedolaga-telegram-bot
VERSION_CHECK_INTERVAL_HOURS=1
# ===== ЛОГИРОВАНИЕ =====
LOG_LEVEL=INFO
LOG_FILE=logs/bot.log
# ===== РАЗРАБОТКА =====
DEBUG=false
WEBHOOK_URL=
WEBHOOK_PATH=/webhook
⭐ Функционал
👤 Для пользователей🛒 Умная покупка подписок
🧪 Тестовая подписка
💰 Удобные платежи
📱 Управление подписками
🎁 Бонусная система
|
⚙️ Для администраторов📊 Мощная аналитика
👥 Управление пользователями
🎯 Маркетинг и продажи
🖥️ Умный мониторинг
📨 Коммуникации и поддержка
📨 Уведомления в закрытый канал
🗄️ Бекапы и восстановление
💳 Автоплатежи и биллинг
|
🤖 Автоматизация и экосистема
- 🔄 Мониторинг Remnawave — регулярная проверка API, автоматическое включение/выключение техработ и сообщения в топики.
- 🛡️ Антифрод — валидация обязательной подписки на канал, проверка уникальности устройств и логирование действий.
- 🧠 Асинхронная архитектура — aiogram 3, PostgreSQL/SQLite, Redis и очередь задач для стабильной работы под нагрузкой.
- 🌐 Мультиязычность — локализации в
locales/, быстрый выбор языка пользователем, готовность к расширению. - 📦 Интеграция с Remnawave API — автоматическое создание пользователей, управление сквадами и синхронизация подписок.
- 🧾 История операций — хранение транзакций, уведомлений, рассылок, кампаний и бекапов для аудита.
🧭 Навигация по проекту
app/bot.py— точка входа бота и регистрация middlewares/handlers.app/handlers/— сценарии общения (пользовательские и административные).app/services/— бизнес-логика: подписки, платежи, мониторинг, бекапы, кампании, версия.app/database/— модели SQLAlchemy, CRUD и миграции Alembic.app/localization/иlocales/— тексты интерфейса и переводов.migrations/— текущие миграции БД для PostgreSQL.
Локализации
- Каталог
locales/содержит файлы локализаций в формате.ymlили.json(например,ru.yml,en.yml). Эти файлы можно редактировать напрямую на рабочем сервере. - Структура YAML/JSON повторяет иерархию ключей, объявленных в
app/localization/texts.py. Например, блокMENU:и параBALANCE: "Баланс"соответствуют ключуMENU_BALANCE. При добавлении новых ключей сохраняйте верхний регистр и единый стиль именования. - Порядок внесения правок:
- Измените нужные значения в файле
locales/<язык>.yml(или.json). - Перезапустите бота/контейнер (
docker compose restart botв Docker) — при старте приложение перечитает локали.
- Измените нужные значения в файле
- Путь до пользовательских локалей задаётся переменной
LOCALES_PATH(./localesпо умолчанию; в Docker каталог монтируется в/app/locales, см.docker-compose.yml). - При первом запуске, если каталог пуст, бот копирует шаблоны
ru.ymlиen.yml— благодаря этому у владельца сразу есть заготовки для редактирования.
💻 Локальная разработка
🚀 Быстрый запуск для разработки
Для локальной разработки используйте специальный Docker Compose файл:
# 1. Клонируйте репозиторий
git clone https://github.com/fr1ngg/remnawave-bedolaga-telegram-bot.git
cd remnawave-bedolaga-telegram-bot
# 2. Настройте окружение
cp env.example .env
# Отредактируйте .env файл с вашими настройками
# 3. Запустите локально (Windows PowerShell)
.\start-local.ps1
# Или вручную
docker-compose -f docker-compose.local.yml up --build
📁 Файлы для локальной разработки
docker-compose.local.yml- Docker Compose для локальной разработкиenv.example- Пример конфигурацииstart-local.ps1- Скрипт быстрого запуска (Windows)start-local.sh- Скрипт быстрого запуска (Linux/macOS)stop-local.ps1- Скрипт остановки (Windows)README_LOCAL.md- Подробная документация по локальной разработке
🔧 Особенности локальной разработки
- Локальная сборка - образ собирается из исходного кода
- Горячая перезагрузка - изменения в коде автоматически применяются
- Доступ к БД - PostgreSQL доступен на localhost:5432
- Доступ к Redis - Redis доступен на localhost:6379
- Логи в реальном времени - все логи выводятся в консоль
- Отладка - полный доступ к контейнерам для отладки
📊 Мониторинг разработки
# Просмотр логов
docker-compose -f docker-compose.local.yml logs -f bot
# Проверка статуса
docker-compose -f docker-compose.local.yml ps
# Health check
curl http://localhost:8081/health
# Остановка
docker-compose -f docker-compose.local.yml down
🐳 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 --locale=C"
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 --maxmemory 256mb --maxmemory-policy allkeys-lru
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:
DOCKER_ENV: "true"
DATABASE_MODE: "auto"
POSTGRES_HOST: "postgres"
POSTGRES_PORT: "5432"
POSTGRES_DB: "${POSTGRES_DB:-remnawave_bot}"
POSTGRES_USER: "${POSTGRES_USER:-remnawave_user}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-secure_password_123}"
REDIS_URL: "redis://redis:6379/0"
TZ: "Europe/Moscow"
volumes:
# Логи
- ./logs:/app/logs:rw
# Данные приложения (для SQLite в случае переключения)
- ./data:/app/data:rw
# Конфигурация приложения
# - ./app-config.json:/app/app-config.json:ro
# Timezone
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
# Логотип для сообщений
- ./vpn_logo.png:/app/vpn_logo.png:ro
ports:
- "${TRIBUTE_WEBHOOK_PORT:-8081}:8081"
- "${YOOKASSA_WEBHOOK_PORT:-8082}:8082"
networks:
- bot_network
healthcheck:
test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8081/health\", timeout=5)' || exit 1"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
volumes:
postgres_data:
driver: local
redis_data:
driver: local
networks:
bot_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
🚀 Команды управления
# Быстрый старт
docker compose up -d
# Статус сервисов
docker compose ps
# Логи
docker compose logs -f
# Перезапуск
docker compose restart
# Остановка
docker compose down
# Полная очистка
docker compose down -v --remove-orphans
🔧 Первичная настройка
После запуска необходимо:
-
📡 Синхронизация серверов (обязательно!)
- Зайди в бот → Админ панель → Подписки → Управление серверами
- Нажми Синхронизация и дождись завершения
- Без этого пользователи не смогут выбирать страны!
-
👥 Синхронизация пользователей (если есть база)
- Админ панель → Remnawave → Синхронизация
- Синхронизировать всех → дождись импорта
-
💳 Настройка платежных систем
- Telegram Stars: Работает автоматически
- Tribute: Настрой webhook на
https://your-domain.com/tribute-webhook - YooKassa: Настрой webhook на
https://your-domain.com/yookassa-webhook - PayPalych: Укажи Result URL
https://your-domain.com/pal24-webhookв кабинете Pal24
🛠️ Настройка Уведомлений в топик группы
1. Переменные окружения
Добавьте в файл .env:
# Уведомления администраторов
ADMIN_NOTIFICATIONS_ENABLED=true
ADMIN_NOTIFICATIONS_CHAT_ID=-1001234567890 # ID канала/группы
ADMIN_NOTIFICATIONS_TOPIC_ID=123 # ID топика (опционально)
2. Создание канала
- Создайте приватный канал или группу для уведомлений
- Добавьте бота как администратора с правами:
- Отправка сообщений
- Использование встроенного режима (если нужно)
- Получите ID канала:
- Отправьте любое сообщение в канал
- Перешлите его боту @userinfobot
- Скопируйте Chat ID (например:
-1001234567890)
3. Настройка топиков (опционально)
Если используете супергруппу с топиками:
- Включите топики в настройках группы
- Создайте топик для уведомлений (например, "Уведомления")
- Получите ID топика:
- Откройте топик в веб-версии Telegram
- Скопируйте число после последнего
/в URL - Или используйте бота для получения message_thread_id
🚀 Производительность
| Пользователей | Память | 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 |
🏗️ Архитектура
💪 Современный стек технологий
- 🐍 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 # Реферальная система
│ │ ├── 🌟 stars_payment.py # Start платежи
│ │ ├── common.py
│ │ ├── 💬 support.py # Техподдержка
│ │ └── 👑 admin/ # Админ панель
│ │ ├── 📊 statistics.py # Статистика
│ │ ├── 🗄️ backup.py # Бекапы
│ │ ├── 👥 users.py # Управление юзерами
│ │ ├── 🎫 promocodes.py # Управление промокодами
│ │ ├── 🚧 maintenance.py # Тех работы
│ │ ├── 📨 messages.py # Рассылки
│ │ ├── 📨 user_messages.py # Рандомные сообщения в меню
│ │ ├── 📨 welcome_text.py # Приветственное сообщение
│ │ ├── ⚙️ main.py # Админское меню
│ │ ├── 📖 rules.py # Правила
│ │ ├── 🙋 referrals.py # Правила
│ │ ├── 🌎 servers.py # Сервера
│ │ ├── 📱 subscriptions.py # Подписки
│ │ ├── 🔍 monitoring.py # Мониторинг
│ │ └── 🔗 remnawave.py # Система Remnawave
│ │
│ ├── 🗄️ database/ # База данных
│ │ ├── 📊 models.py # Модели SQLAlchemy
│ │ ├── 🔗 database.py # Подключение к БД
│ │ ├── 🔄 universal_migration.py # Миграции
│ │ └── 📝 crud/ # CRUD операции
│ │ ├── 👤 user.py # Операции с пользователями
│ │ ├── 📋 subscription.py # Операции с подписками
│ │ ├── 💰 transaction.py # Операции с транзакциями
│ │ ├── 📜 rules.py # Правила сервиса
│ │ ├── 📜 subscription_conversion.py # Правила сервиса
│ │ ├── 💳 yookassa.py # YooKassa операции
│ │ ├── 📨 welcome_text.py # Приветственное сообщение
│ │ ├── 💳 cryptobot.py # CryptoBot операции
│ │ ├── 🌐 server_squad.py # Серверы и сквады
│ │ ├── 🎁 promocode.py # Промокоды
│ │ └── 👥 referral.py # Партнерка
│ │
│ ├── 🔧 services/ # Бизнес-логика
│ │ ├── 👤 user_service.py # Сервис пользователей
│ │ ├── 📋 subscription_service.py # Сервис подписок
│ │ ├── 💰 payment_service.py # Платежи
│ │ ├── 🗄️ backup_service.py # Бекапы
│ │ ├── 🎁 promocode_service.py # Промокоды
│ │ ├── 🚧 maintenance_service.py # Промокоды
│ │ ├── 👥 referral_service.py # Партнерка
│ │ ├── 💬 admin_notification_service.py # Уведомления для администраторов в чаты
│ │ ├── 🔍 monitoring_service.py # Мониторинг
│ │ ├── ♻️ version_service.py # Проверка версий бота
│ │ ├── 🎖️ tribute_service.py # Tribute платежи
│ │ ├── 💳 yookassa_service.py # YooKassa платежи
│ │ └── 🌐 remnawave_service.py # Интеграция с Remnawave
│ │
│ ├── 🛠️ utils/ # Утилиты
│ │ ├── 🎨 decorators.py # Декораторы
│ │ ├── 📝 formatters.py # Форматирование данных
│ │ ├── ✅ validators.py # Валидация
│ │ ├── ✅ subscription_utils.py # Проверка подписок
│ │ ├── 📄 pagination.py # Пагинация
│ │ ├── 📄 pricing_utils.py # Цены
│ │ ├── 📄 message_patch.py
│ │ ├── 📄 photo_message.py
│ │ ├── ‼️ global_error.py # Обработка ошибок
│ │ ├── 👤 user_utils.py # Утилиты для пользователей
│ │ ├── 🫰 currency_converter.py # Курсы для CryptoBota
│ │ └── ⚡ cache.py # Кеширование
│ │
│ ├── 🛡️ middlewares/ # Middleware
│ │ ├── 🔐 auth.py # Авторизация
│ │ ├── 📋 logging.py # Логирование
│ │ ├── 🚧 maintenance.py # тех работы
│ │ ├── 🔐 subscription_checker.py # тех работы
│ │ ├── 🔐 channel_checker.py
│ │ └── ⏱️ throttling.py # Ограничение запросов
│ │
│ ├── 🌐 localization/ # Локализация
│ │ ├── 📝 texts.py # Тексты интерфейса
│ │ └── 🗣️ languages/
│ │
│ ├── ⌨️ keyboards/ # Клавиатуры
│ │ ├── 🔗 inline.py # Inline клавиатуры
│ │ ├── 💬 reply.py # Reply клавиатуры
│ │ └── 👑 admin.py # Админские клавиатуры
│ │
│ └── 🔌 external/ # Внешние API
│ ├── 🌐 remnawave_api.py # Remnawave API
│ ├── ⭐ telegram_stars.py # Telegram Stars
│ ├── 💳 yookassa_webhook.py # YooKassa webhook
│ ├── 🌐 webhook_server.py # Webhook сервер
│ ├── 💳 cryptobot.py # CryptoBot Api
│ └── 🎖️ tribute.py # Tribute платежи
│
├── 🔄 migrations/ # Миграции БД
└── 📋 logs/ # Логи системы
🐛 Устранение неполадок
🏥 Health Checks
- Основной:
http://localhost:8081/health
🔧 Полезные команды
# Просмотр логов в реальном времени
docker compose logs -f bot
# Статус всех контейнеров
docker compose ps
# Перезапуск только бота
docker compose restart bot
# Проверка базы данных
docker compose exec postgres pg_isready -U remnawave_user
# Подключение к базе данных
docker compose exec postgres psql -U remnawave_user -d remnawave_bot
# Проверка использования ресурсов
docker stats
# Очистка логов Docker
docker system prune
🚨 Частые проблемы и решения
| Проблема | Диагностика | Решение |
|---|---|---|
| Бот не отвечает | docker logs remnawave_bot |
Проверь BOT_TOKEN и интернет |
| Ошибки БД | docker compose ps postgres |
Проверь статус PostgreSQL |
| Webhook не работает | Проверь порты 8081/8082/8084 | Настрой прокси-сервер правильно |
| API недоступен | Проверь логи бота | Проверь REMNAWAVE_API_URL и ключ |
| Мониторинг не работает | Админ панель → Мониторинг | Проверь MAINTENANCE_AUTO_ENABLE |
| Платежи не проходят | Проверь webhook'и | Настрой URL в платежных системах |
🔧 Настройка webhook'ов
🌐 Через Nginx
server {
listen 80;
server_name your-domain.com;
# Для Tribute
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;
}
# CryptoBot webhook endpoint
location /cryptobot-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;
}
# MulenPay webhook endpoint
location /mulenpay-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;
}
# PayPalych webhook endpoint
location /pal24-webhook {
proxy_pass http://127.0.0.1:8084;
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;
}
# Для YooKassa
location /yookassa-webhook {
proxy_pass http://127.0.0.1:8082;
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;
}
# Health check
location /health {
proxy_pass http://127.0.0.1:8081/health;
}
}
⚡ Через Caddy
your-domain.com {
handle /tribute-webhook* {
reverse_proxy localhost:8081
}
handle /cryptobot-webhook* {
reverse_proxy localhost:8081
}
handle /mulenpay-webhook* {
reverse_proxy localhost:8081
}
handle /pal24-webhook* {
reverse_proxy localhost:8084
}
handle /yookassa-webhook* {
reverse_proxy localhost:8082
}
handle /health {
reverse_proxy localhost:8081/health
}
}
🧪 Проверка PayPalych postback
# Генерируем подпись: md5("100.00:test-order-1:${PAL24_SIGNATURE_TOKEN}")
SIGNATURE=$(python - <<'PY'
import hashlib, os
token = os.environ.get('PAL24_SIGNATURE_TOKEN', 'test_token')
payload = f"100.00:test-order-1:{token}".encode()
print(hashlib.md5(payload).hexdigest().upper())
PY
)
curl -X POST https://your-domain.com/pal24-webhook \
-H "Content-Type: application/json" \
-d '{"InvId": "test-order-1", "OutSum": "100.00", "Status": "SUCCESS", "SignatureValue": "'$SIGNATURE'"}'
Ответ {"status": "ok"} подтверждает корректную обработку вебхука.
💡 Использование
👤 Для пользователей
- 🚀 Старт → Найди бота и нажми
/start - 📋 Правила → Прими правила сервиса
- 💰 Баланс → "💰 Баланс" → пополни через Stars/Tribute/YooKassa
- 🛒 Подписка → "🛒 Купить подписку" → выбор тарифа → оплата
- 📱 Управление → "📋 Мои подписки" → конфигурация → получение ссылки
- 👥 Партнерка → "👥 Партнерка" → поделись ссылкой
⚙️ Для администраторов
Доступ через "⚙️ Админ панель":
- 📦 Подписки → настройка серверов, цен, синхронизация
- 👥 Пользователи → поиск, редактирование, блокировка, управление устройствами
- 🎁 Промокоды → создание бонусов, статистика применения
- 📨 Рассылки → уведомления по сегментам с HTML разметкой
- 🖥 Remnawave → мониторинг панели, синхронизация, диагностика
- 📊 Статистика → детальная аналитика бизнеса и финансов
🛡️ Безопасность
🔐 Защита панели Remnawave
Бот поддерживает интеграцию с системой защиты панели через куки-аутентификацию:
# Для защищенных панелей
REMNAWAVE_SECRET_KEY=secret_name:secret_value
# Для панелей eGames скрипта
REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD
Совместимость с remnawave-reverse-proxy для скрытия панели от несанкционированного доступа.
🔒 Дополнительные меры безопасности
- Валидация всех входящих данных
- Rate limiting для защиты от спама
- Шифрование чувствительных данных
- Автоматическое управление сессиями
- Мониторинг подозрительной активности
🤝 Как помочь проекту
- 🔍 Сообщай о багах с подробным описанием
- 💡 Предлагай идеи для улучшения
- ⭐ Ставь звезды проекту - это мотивирует разработку!
- 📢 Рассказывай друзьям о проекте
- 💝 Поддержи разработку - помоги проекту расти
💬 Поддержка и сообщество
📞 Контакты
- 💬 Telegram: @fringg - вопросы по разработке (только по делу!)
- 💬 Telegram Group: Bedolaga Chat - общение, вопросы, предложения, баги
- 🐛 Issues: GitHub Issues - баги и предложения
📚 Полезные ресурсы
- 📖 Remnawave Docs - документация панели
- 🤖 Telegram Bot API - API ботов
- 🐳 Docker Guide - обучение Docker
- 🛡️ Reverse Proxy - защита панели
💝 Благодарности
🌟 Топ спонсоры проекта
| 🏆 Место | 👤 Спонсор | 💰 Сумма | 💬 Благодарность |
|---|---|---|---|
| 🥇 | @pilot_737800 | ₽4,750 | За веру в проект с самого начала |
| 🥈 | @Legacyyy777 | ₽2,600 | За ценные предложения по улучшению |
| 🥉 | Илья (@ispanec_nn) | $30 | За активное тестирование и фидбек |
| 4 | @fso404 | ₽1,000 | За поддержку и доверие |
| 5 | @edward_forix | ₽1,000 | За поддержку и доверие |
| 5 | @Nav1_0 | ₽1,000 | За поддержку и доверие |
| 6 | @kr33njee | ₽800 | За поддержку и доверие |
| 7 | @SmartSystemCompany | ₽600 | За поддержку и доверие |
| 8 | @PhiLin58 | ₽300 | За участие в развитии |
🌟 Особая благодарность
- Remnawave Team - за отличную панель и стабильный API
- Сообщество Bedolaga - за активное тестирование и обратную связь
- Всем пользователям - за доверие и использование бота
📋 Roadmap
🚧 В разработке
- 🌎 Вебпанель
- 🌍 Мультиязычность - полная поддержка английского языка
- 📊 Расширенная аналитика - больше метрик и графиков
- 🔄 API для интеграций - подключение внешних сервисов
📄 Лицензия
Проект распространяется под лицензией MIT
🚀 Начни уже сегодня!
🧪 Протестируй бота |
💬 Присоединись к сообществу |
⭐ Поставь звезду |
💝 Поддержи проект |
Made with ❤️ by @fringg