033d0da5e0
Platega API defines: 2=СБП, 11=Карточный эквайринг, 12=Международная, 13=Крипто. Code 10 does not exist in their API but was defined in our config as "Банковские карты (RUB)", while real code 11 was mislabeled as "Банковские карты". This caused two card options to appear in the admin panel, one of which didn't work. - Removed code 10 from definitions, defaults, allowed set, .env.example - Renamed code 11: "Банковские карты" → "Карты (RUB)" - Removed redundant filter in handlers/balance/platega.py - Updated tests to match
956 lines
46 KiB
Bash
956 lines
46 KiB
Bash
# ===============================================
|
||
# 🤖 REMNAWAVE BEDOLAGA BOT CONFIGURATION
|
||
# ===============================================
|
||
|
||
# ===== TELEGRAM BOT =====
|
||
# Токен бота от @BotFather
|
||
# ВАЖНО: Также используется для авторизации виджета личного кабинета (Cabinet WebApp)
|
||
# через Telegram.WebApp.initData
|
||
BOT_TOKEN=
|
||
ADMIN_IDS=
|
||
# Ссылка на поддержку: Telegram username (например, @support) или полный URL
|
||
SUPPORT_USERNAME=@support
|
||
# Имя пользователя бота (опционально, автоопределяется)
|
||
# BOT_USERNAME=
|
||
|
||
# ===== SOCKS5 ПРОКСИ =====
|
||
# URL SOCKS5 прокси-сервера для маршрутизации трафика бота к Telegram API
|
||
# Формат: socks5://user:password@host:port или socks5://host:port
|
||
# PROXY_URL=socks5://127.0.0.1:1080
|
||
|
||
# ===== СИСТЕМА ПОДДЕРЖКИ =====
|
||
# Включить меню поддержки в интерфейсе
|
||
SUPPORT_MENU_ENABLED=true
|
||
# Режим системы поддержки: tickets (тикеты), contact (контакт), both (оба)
|
||
SUPPORT_SYSTEM_MODE=both
|
||
# SLA для тикетов поддержки
|
||
SUPPORT_TICKET_SLA_ENABLED=false
|
||
SUPPORT_TICKET_SLA_MINUTES=60
|
||
SUPPORT_TICKET_SLA_CHECK_INTERVAL_SECONDS=300
|
||
SUPPORT_TICKET_SLA_REMINDER_COOLDOWN_MINUTES=30
|
||
|
||
# ===== ЛИЧНЫЙ КАБИНЕТ (CABINET) =====
|
||
# Включить личный кабинет пользователя (веб-интерфейс для управления подпиской)
|
||
CABINET_ENABLED=false
|
||
# URL кабинета для ссылок в email (например: https://cabinet.example.com)
|
||
CABINET_URL=
|
||
# Секретный ключ для JWT токенов (если не указан, используется BOT_TOKEN)
|
||
CABINET_JWT_SECRET=
|
||
# Время жизни access token в минутах (по умолчанию 15)
|
||
CABINET_ACCESS_TOKEN_EXPIRE_MINUTES=15
|
||
# Время жизни refresh token в днях (по умолчанию 7)
|
||
CABINET_REFRESH_TOKEN_EXPIRE_DAYS=7
|
||
# Разрешенные origins для CORS (через запятую, например: https://cabinet.example.com)
|
||
CABINET_ALLOWED_ORIGINS=
|
||
# Включить верификацию email (требует настройки SMTP)
|
||
CABINET_EMAIL_VERIFICATION_ENABLED=false
|
||
# Включить регистрацию/вход по email (если false - только Telegram)
|
||
CABINET_EMAIL_AUTH_ENABLED=true
|
||
|
||
# ===== ТЕСТОВЫЙ EMAIL ДЛЯ РАЗРАБОТКИ =====
|
||
# Тестовый email для проверки регистрации без SMTP
|
||
# При использовании этого email верификация пропускается
|
||
TEST_EMAIL=
|
||
TEST_EMAIL_PASSWORD=
|
||
# Время жизни токена верификации email в часах
|
||
CABINET_EMAIL_VERIFICATION_EXPIRE_HOURS=24
|
||
# Время жизни токена сброса пароля в часах
|
||
CABINET_PASSWORD_RESET_EXPIRE_HOURS=1
|
||
# Время жизни кода подтверждения смены email в минутах
|
||
CABINET_EMAIL_CHANGE_CODE_EXPIRE_MINUTES=15
|
||
|
||
# ===== SMTP НАСТРОЙКИ (для email в личном кабинете) =====
|
||
# SMTP сервер (например: smtp.gmail.com, smtp.yandex.ru)
|
||
SMTP_HOST=
|
||
SMTP_PORT=587
|
||
SMTP_USER=
|
||
SMTP_PASSWORD=
|
||
# Email отправителя (если не указан, используется SMTP_USER)
|
||
SMTP_FROM_EMAIL=
|
||
SMTP_FROM_NAME=VPN Service
|
||
# Использовать TLS шифрование
|
||
SMTP_USE_TLS=true
|
||
|
||
# Уведомления администраторов
|
||
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 топика для тикетов
|
||
ADMIN_NOTIFICATIONS_NALOG_TOPIC_ID=133 # Опционально: ID топика для уведомлений о чеках NaloGO
|
||
# Автоматические отчеты
|
||
ADMIN_REPORTS_ENABLED=false
|
||
ADMIN_REPORTS_CHAT_ID= # Опционально: чат для отчетов (по умолчанию ADMIN_NOTIFICATIONS_CHAT_ID)
|
||
ADMIN_REPORTS_TOPIC_ID= # ID топика для отчетов
|
||
ADMIN_REPORTS_SEND_TIME=10:00 # Время отправки (по МСК) ежедневного отчета
|
||
|
||
# ===== МОНИТОРИНГ ТРАФИКА =====
|
||
# Логика: при запуске бота создаётся snapshot трафика всех пользователей.
|
||
# Через указанный интервал проверяется дельта (разница) трафика.
|
||
# Если дельта превышает порог — отправляется уведомление админам.
|
||
|
||
# Быстрая проверка (дельта трафика за интервал)
|
||
TRAFFIC_FAST_CHECK_ENABLED=false # Включить быструю проверку
|
||
TRAFFIC_FAST_CHECK_INTERVAL_MINUTES=10 # Интервал проверки в минутах
|
||
TRAFFIC_FAST_CHECK_THRESHOLD_GB=5.0 # Порог дельты в ГБ (сколько потрачено за интервал)
|
||
|
||
# Суточная проверка (трафик за 24 часа через bandwidth API)
|
||
TRAFFIC_DAILY_CHECK_ENABLED=false # Включить суточную проверку
|
||
TRAFFIC_DAILY_CHECK_TIME=00:00 # Время суточной проверки (HH:MM по UTC)
|
||
TRAFFIC_DAILY_THRESHOLD_GB=50.0 # Порог суточного трафика в ГБ
|
||
|
||
# Куда отправлять уведомления
|
||
SUSPICIOUS_NOTIFICATIONS_TOPIC_ID=14 # ID топика для уведомлений о подозрительной активности
|
||
|
||
# Фильтрация по серверам (UUID нод через запятую)
|
||
TRAFFIC_MONITORED_NODES= # Только эти ноды (пусто = все)
|
||
TRAFFIC_IGNORED_NODES= # Исключить эти ноды
|
||
|
||
# Исключить пользователей (UUID через запятую)
|
||
TRAFFIC_EXCLUDED_USER_UUIDS= # Служебные/тунельные пользователи
|
||
|
||
# Производительность
|
||
TRAFFIC_CHECK_BATCH_SIZE=1000 # Размер батча для получения пользователей
|
||
TRAFFIC_CHECK_CONCURRENCY=10 # Параллельных запросов к API
|
||
TRAFFIC_NOTIFICATION_COOLDOWN_MINUTES=60 # Кулдаун уведомлений на пользователя (минуты)
|
||
TRAFFIC_SNAPSHOT_TTL_HOURS=24 # TTL snapshot трафика в Redis (часы, сохраняется при рестарте)
|
||
|
||
# Черный список
|
||
BLACKLIST_CHECK_ENABLED=false # Включить проверку пользователей по черному списку
|
||
BLACKLIST_GITHUB_URL=https://raw.githubusercontent.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/refs/heads/main/blacklist.txt # URL к файлу черного списка на GitHub
|
||
BLACKLIST_UPDATE_INTERVAL_HOURS=24 # Интервал обновления черного списка с GitHub (в часах)
|
||
BLACKLIST_IGNORE_ADMINS=true # Игнорировать администраторов (из ADMIN_IDS) при проверке черного списка
|
||
SUBSCRIPTION_RENEWAL_BALANCE_THRESHOLD_KOPEKS=20000 # Порог баланса (в копейках) для фильтра «готовы к продлению»
|
||
|
||
# Channel subscription settings (channels are managed via admin panel)
|
||
CHANNEL_IS_REQUIRED_SUB=false # Обязательна ли подписка на канал
|
||
CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE=true # Отключать триальные подписки при отписке от канала
|
||
CHANNEL_REQUIRED_FOR_ALL=false # Требовать подписку на канал для ВСЕХ пользователей (платных и триальных)
|
||
|
||
# ===== 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
|
||
# Время жизни корзины пользователя в Redis (секунды, по умолчанию 1 час)
|
||
CART_TTL_SECONDS=3600
|
||
|
||
# ===== REMNAWAVE API =====
|
||
REMNAWAVE_API_URL=https://panel.example.com
|
||
REMNAWAVE_API_KEY=your_api_key_here
|
||
|
||
# Тип авторизации: "api_key", "basic_auth", "caddy"
|
||
REMNAWAVE_AUTH_TYPE=api_key
|
||
REMNAWAVE_CADDY_TOKEN=
|
||
|
||
# Для панелей с 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
|
||
# Доступные плейсхолдеры аналогичны описанию выше
|
||
# {full_name} — Имя, Фамилия из Telegram
|
||
# {username} — @логин из Telegram (c @)
|
||
# {username_clean} — логин из Telegram (без @)
|
||
# {telegram_id} — ID Telegram
|
||
REMNAWAVE_USER_USERNAME_TEMPLATE="user_{telegram_id}"
|
||
|
||
# Режим удаления пользователей из панели RemnaWave
|
||
# delete - полностью удалить пользователя из панели
|
||
# disable - только деактивировать пользователя
|
||
REMNAWAVE_USER_DELETE_MODE=delete
|
||
|
||
# Автоматическая синхронизация пользователей с панелью Remnawave
|
||
REMNAWAVE_AUTO_SYNC_ENABLED=false
|
||
# Времена синхронизации (через запятую, формат HH:MM по МСК)
|
||
REMNAWAVE_AUTO_SYNC_TIMES=03:00
|
||
|
||
# ===== REMNAWAVE WEBHOOKS (входящие события из панели) =====
|
||
# Включить приём вебхуков от панели Remnawave (real-time события)
|
||
REMNAWAVE_WEBHOOK_ENABLED=false
|
||
# Путь для приёма вебхуков (должен совпадать с настройкой в панели)
|
||
REMNAWAVE_WEBHOOK_PATH=/remnawave-webhook
|
||
# Общий секрет для подписи HMAC-SHA256 (минимум 32 символа)
|
||
# Сгенерируйте: openssl rand -hex 32
|
||
# ВАЖНО: этот же секрет указывается в панели Remnawave при создании вебхука
|
||
REMNAWAVE_WEBHOOK_SECRET=
|
||
# Уведомления администраторам о потере/восстановлении связи с нодами
|
||
# false = не отправлять события node.connection_lost / node.connection_restored
|
||
REMNAWAVE_WEBHOOK_NOTIFY_NODE_CONNECTION_STATUS=true
|
||
|
||
# ===== УВЕДОМЛЕНИЯ ОТ ВЕБХУКОВ (что получают пользователи) =====
|
||
# Глобальный переключатель уведомлений пользователям от вебхуков
|
||
WEBHOOK_NOTIFY_USER_ENABLED=true
|
||
# Отключение/активация подписки администратором
|
||
WEBHOOK_NOTIFY_SUB_STATUS=true
|
||
# Истечение подписки
|
||
WEBHOOK_NOTIFY_SUB_EXPIRED=true
|
||
# Предупреждения о скором истечении (72ч, 48ч, 24ч)
|
||
WEBHOOK_NOTIFY_SUB_EXPIRING=true
|
||
# Достижение лимита трафика
|
||
WEBHOOK_NOTIFY_SUB_LIMITED=true
|
||
# Сброс счётчика трафика
|
||
WEBHOOK_NOTIFY_TRAFFIC_RESET=true
|
||
# Удаление пользователя из панели
|
||
WEBHOOK_NOTIFY_SUB_DELETED=true
|
||
# Обновление ключей подписки (revoke)
|
||
WEBHOOK_NOTIFY_SUB_REVOKED=true
|
||
# Первое подключение к VPN
|
||
WEBHOOK_NOTIFY_FIRST_CONNECTED=true
|
||
# Напоминание о неподключении
|
||
WEBHOOK_NOTIFY_NOT_CONNECTED=true
|
||
# Предупреждение о приближении к лимиту трафика
|
||
WEBHOOK_NOTIFY_BANDWIDTH_THRESHOLD=true
|
||
# Подключение и отключение устройств
|
||
WEBHOOK_NOTIFY_DEVICES=true
|
||
|
||
# Теги пользователей в Remnawave (A-Z, 0-9, _, макс. 16 символов)
|
||
# Тег для пробных пользователей (опционально)
|
||
# TRIAL_USER_TAG=TRIAL
|
||
# Тег для платных пользователей (опционально)
|
||
# PAID_SUBSCRIPTION_USER_TAG=PAID
|
||
|
||
# ========= ПОДПИСКИ =========
|
||
|
||
# ===== РЕЖИМ ПРОДАЖ =====
|
||
# Режим продаж подписок (можно переключить в кабинете: Настройки → Подписки):
|
||
# "classic" - классический режим:
|
||
# - Пользователь выбирает период, серверы, трафик, устройства отдельно
|
||
# - Цены периодов берутся из PERIOD_PRICES ниже
|
||
# - Подходит для гибкой настройки под каждого пользователя
|
||
# "tariffs" - режим тарифов:
|
||
# - Пользователь выбирает готовый тариф (Premium, Basic и т.д.)
|
||
# - Тарифы создаются в кабинете: Админ → Тарифы
|
||
# - Каждый тариф имеет свои серверы, трафик, устройства и цены за периоды
|
||
# - Подходит для продажи готовых пакетов услуг
|
||
SALES_MODE=tariffs
|
||
|
||
# ===== ТРИАЛ ПОДПИСКА =====
|
||
TRIAL_DURATION_DAYS=3
|
||
TRIAL_TRAFFIC_LIMIT_GB=10
|
||
TRIAL_DEVICE_LIMIT=1
|
||
# ID тарифа для триала в режиме тарифов (0 = использовать стандартные настройки триала)
|
||
# Если указан ID тарифа, параметры триала берутся из тарифа (traffic_limit_gb, device_limit, allowed_squads)
|
||
# Длительность триала всё равно берётся из TRIAL_DURATION_DAYS
|
||
TRIAL_TARIFF_ID=0
|
||
# Платный триал: если TRIAL_ACTIVATION_PRICE > 0, триал становится платным
|
||
# Цена в копейках (1000 = 10 рублей). Пользователь может оплатить триал любым методом оплаты.
|
||
# TRIAL_PAYMENT_ENABLED опционален (для обратной совместимости)
|
||
TRIAL_PAYMENT_ENABLED=false
|
||
TRIAL_ACTIVATION_PRICE=0
|
||
|
||
# ===== ПЛАТНАЯ ПОДПИСКА =====
|
||
# Сколько устройств доступно по дефолту при покупке платной подписки
|
||
DEFAULT_DEVICE_LIMIT=3
|
||
|
||
# Максимум устройств доступных к покупке (0 = Нет лимита)
|
||
MAX_DEVICES_LIMIT=15
|
||
|
||
# Дефолт параметры для подписок выданных через админку
|
||
DEFAULT_TRAFFIC_LIMIT_GB=100
|
||
|
||
# Плюсовать дни триала при покупке платной подписке
|
||
TRIAL_ADD_REMAINING_DAYS_TO_PAID=false
|
||
|
||
# ===== ГЛОБАЛЬНЫЙ ПАРАМЕТР ДЛЯ ВСЕХ ПОДПИСОК =====
|
||
DEFAULT_TRAFFIC_RESET_STRATEGY=MONTH
|
||
# Сбрасывать трафик при каждой оплате подписки
|
||
RESET_TRAFFIC_ON_PAYMENT=false
|
||
|
||
# ===== НАСТРОЙКИ ТРАФИКА =====
|
||
# Режим выбора трафика:
|
||
# "selectable" - пользователи выбирают пакеты трафика (по умолчанию)
|
||
# "fixed" - фиксированный лимит трафика для всех подписок
|
||
TRAFFIC_SELECTION_MODE=selectable
|
||
|
||
# Фиксированный лимит трафика в ГБ (используется только в режиме "fixed")
|
||
# 0 = безлимит
|
||
FIXED_TRAFFIC_LIMIT_GB=100
|
||
|
||
# ===== ДОКУПКА ТРАФИКА =====
|
||
# Включить/выключить функцию докупки трафика к существующей подписке
|
||
TRAFFIC_TOPUP_ENABLED=true
|
||
# Показывать кнопку "Докупить трафик" в меню
|
||
BUY_TRAFFIC_BUTTON_VISIBLE=true
|
||
|
||
# Пакеты для докупки трафика (формат: "гб:цена_в_копейках:enabled")
|
||
# Пустая строка = использовать TRAFFIC_PACKAGES_CONFIG
|
||
# Пример: "10:5000:true,25:10000:true,50:15000:true,100:25000:true"
|
||
TRAFFIC_TOPUP_PACKAGES_CONFIG=
|
||
|
||
# ===== СБРОС ТРАФИКА =====
|
||
# Режим расчета цены сброса трафика:
|
||
# "period" - фиксированная цена = стоимость периода 30 дней (старое поведение, может быть абьюзом!)
|
||
# "traffic" - цена = стоимость текущего пакета трафика подписки
|
||
# "traffic_with_purchased" - цена = стоимость базового + докупленного трафика (рекомендуется)
|
||
TRAFFIC_RESET_PRICE_MODE=traffic_with_purchased
|
||
|
||
# Базовая цена сброса в копейках (0 = использовать PERIOD_PRICES[30])
|
||
# Используется как минимальная цена или фиксированная в режиме "period"
|
||
TRAFFIC_RESET_BASE_PRICE=0
|
||
|
||
# ===== ПЕРИОДЫ ПОДПИСКИ =====
|
||
# Доступные периоды подписки (через запятую)
|
||
# Возможные значения: 14,30,60,90,180,360
|
||
AVAILABLE_SUBSCRIPTION_PERIODS=30,90,180
|
||
AVAILABLE_RENEWAL_PERIODS=30,90,180
|
||
|
||
# ===== ПРОСТАЯ ПОКУПКА ПОДПИСКИ =====
|
||
SIMPLE_SUBSCRIPTION_ENABLED=true
|
||
# Стандартный период (должен совпадать с одним из AVAILABLE_SUBSCRIPTION_PERIODS)
|
||
SIMPLE_SUBSCRIPTION_PERIOD_DAYS=30
|
||
# Сколько устройств выдаётся в рамках простой подписки
|
||
SIMPLE_SUBSCRIPTION_DEVICE_LIMIT=1
|
||
# Лимит трафика в ГБ (0 — безлимит)
|
||
SIMPLE_SUBSCRIPTION_TRAFFIC_GB=0
|
||
# UUID сквада (оставьте пустым, чтобы использовать сквады по умолчанию)
|
||
# SIMPLE_SUBSCRIPTION_SQUAD_UUID=
|
||
|
||
# ===== ЦЕНЫ (в копейках) =====
|
||
BASE_SUBSCRIPTION_PRICE=0
|
||
|
||
# Цены за периоды
|
||
PRICE_14_DAYS=7000
|
||
PRICE_30_DAYS=1000
|
||
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:0:true"
|
||
# Цена за безлимитный трафик (в копейках)
|
||
PRICE_TRAFFIC_UNLIMITED=20000
|
||
|
||
# Цена за дополнительное устройство (DEFAULT_DEVICE_LIMIT идет бесплатно!)
|
||
PRICE_PER_DEVICE=10000
|
||
# Включить выбор количества устройств при покупке и продлении
|
||
DEVICES_SELECTION_ENABLED=true
|
||
# Единое количество устройств для режима без выбора (0 — не назначать устройства)
|
||
DEVICES_SELECTION_DISABLED_AMOUNT=0
|
||
|
||
# ===== МОДЕМ =====
|
||
# Включить функционал подключения модема
|
||
MODEM_ENABLED=false
|
||
# Цена модема в копейках за месяц (добавляется к ежемесячному платежу)
|
||
MODEM_PRICE_PER_MONTH=10000
|
||
# Скидки на модем за длительный срок: "месяцев:процент,месяцев:процент"
|
||
# Пример: 3 мес = 15%, 6 мес = 20%, 12 мес = 25%
|
||
MODEM_PERIOD_DISCOUNTS=3:15,6:20,12:25
|
||
|
||
# Отключение превью ссылок в сообщениях бота
|
||
DISABLE_WEB_PAGE_PREVIEW=false
|
||
|
||
# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
|
||
REFERRAL_PROGRAM_ENABLED=true
|
||
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
|
||
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
|
||
REFERRAL_INVITER_BONUS_KOPEKS=10000
|
||
REFERRAL_COMMISSION_PERCENT=25
|
||
# Макс. кол-во платежей реферала, с которых начисляется комиссия (0 = без лимита)
|
||
REFERRAL_MAX_COMMISSION_PAYMENTS=0
|
||
# Показывать раздел партнёрки в кабинете
|
||
REFERRAL_PARTNER_SECTION_VISIBLE=true
|
||
|
||
# Уведомления
|
||
REFERRAL_NOTIFICATIONS_ENABLED=true
|
||
REFERRAL_NOTIFICATION_RETRY_ATTEMPTS=3
|
||
|
||
# ===== ВЫВОД РЕФЕРАЛЬНОГО БАЛАНСА =====
|
||
# Включить функцию вывода реферального баланса
|
||
REFERRAL_WITHDRAWAL_ENABLED=false
|
||
# Минимальная сумма вывода в копейках (по умолчанию 50000 = 500₽)
|
||
REFERRAL_WITHDRAWAL_MIN_AMOUNT_KOPEKS=50000
|
||
# Интервал между запросами на вывод (дни)
|
||
REFERRAL_WITHDRAWAL_COOLDOWN_DAYS=30
|
||
# Текст-подсказка для поля реквизитов при выводе (пустая строка = стандартный текст)
|
||
REFERRAL_WITHDRAWAL_REQUISITES_TEXT=
|
||
# Выводить только реферальный баланс (true) или весь баланс (false)
|
||
REFERRAL_WITHDRAWAL_ONLY_REFERRAL_BALANCE=true
|
||
# ID топика для уведомлений о заявках на вывод (0 = основной чат)
|
||
REFERRAL_WITHDRAWAL_NOTIFICATIONS_TOPIC_ID=0
|
||
# Тестовый режим (позволяет админам тестировать функционал)
|
||
REFERRAL_WITHDRAWAL_TEST_MODE=false
|
||
|
||
# Настройки анализа на подозрительную активность
|
||
# Минимальная сумма депозита от реферала для анализа (в копейках)
|
||
REFERRAL_WITHDRAWAL_SUSPICIOUS_MIN_DEPOSIT_KOPEKS=100000
|
||
# Максимум пополнений от одного реферала в месяц
|
||
REFERRAL_WITHDRAWAL_SUSPICIOUS_MAX_DEPOSITS_PER_MONTH=10
|
||
# Коэффициент подозрительности (пополнено в X раз больше, чем потрачено)
|
||
REFERRAL_WITHDRAWAL_SUSPICIOUS_NO_PURCHASES_RATIO=3
|
||
|
||
# ===== АВТОПРОДЛЕНИЕ =====
|
||
# Глобально включить/выключить функцию автопродления (false = функция скрыта)
|
||
ENABLE_AUTOPAY=false
|
||
# Дни до окончания подписки, когда отправлять предупреждение (через запятую)
|
||
AUTOPAY_WARNING_DAYS=3,1
|
||
# Включить автопродление для новых пользователей по умолчанию
|
||
DEFAULT_AUTOPAY_ENABLED=true
|
||
DEFAULT_AUTOPAY_DAYS_BEFORE=3
|
||
MIN_BALANCE_FOR_AUTOPAY_KOPEKS=10000
|
||
|
||
# ===== ПЛАТЕЖНЫЕ СИСТЕМЫ =====
|
||
|
||
# Telegram Stars (работает автоматически)
|
||
TELEGRAM_STARS_ENABLED=false
|
||
TELEGRAM_STARS_RATE_RUB=1.79
|
||
|
||
# Tribute (https://tribute.app)
|
||
TRIBUTE_ENABLED=false
|
||
TRIBUTE_API_KEY=
|
||
TRIBUTE_DONATE_LINK=
|
||
TRIBUTE_WEBHOOK_PATH=/tribute-webhook
|
||
TRIBUTE_WEBHOOK_HOST=0.0.0.0
|
||
# Примечание: индивидуальные *_WEBHOOK_PORT используются только для старой схемы запуска.
|
||
# В режиме единого FastAPI сервера оставьте эти значения по умолчанию.
|
||
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
|
||
# 7 - НДС 5%
|
||
# 8 - НДС 7%
|
||
# 9 - НДС 5/105
|
||
# 10 - НДС 7/107
|
||
# 11 - НДС 22%
|
||
# 12 - НДС 22/122
|
||
|
||
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_HOST=0.0.0.0
|
||
YOOKASSA_WEBHOOK_PORT=8082
|
||
# Доверенные сети для webhook (IP-адреса YooKassa, через запятую)
|
||
# YOOKASSA_TRUSTED_PROXY_NETWORKS=185.71.76.0/24,185.71.77.0/24
|
||
|
||
# Лимиты сумм пополнения через YooKassa (в копейках)
|
||
YOOKASSA_MIN_AMOUNT_KOPEKS=5000
|
||
YOOKASSA_MAX_AMOUNT_KOPEKS=1000000
|
||
|
||
# Рекуррентные платежи YooKassa (автосохранение карты для автоплатежей)
|
||
YOOKASSA_RECURRENT_ENABLED=false
|
||
# true = карта сохраняется обязательно, false = пользователь решает (чекбокс на стороне YooKassa)
|
||
YOOKASSA_RECURRENT_REQUIRED=true
|
||
|
||
# Отключить пополнение баланса через поддержку
|
||
SUPPORT_TOPUP_ENABLED=true
|
||
|
||
# Автоматическая проверка зависших пополнений и повторные обращения к провайдерам
|
||
PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED=false
|
||
# Интервал (в минутах) между автоматическими проверками пополнений
|
||
PAYMENT_VERIFICATION_AUTO_CHECK_INTERVAL_MINUTES=10
|
||
|
||
# ===== НАЛОГОВАЯ СЛУЖБА (NaloGO) =====
|
||
# Автоматическая отправка чеков в налоговую при пополнении баланса
|
||
NALOGO_ENABLED=false
|
||
NALOGO_INN= # ИНН самозанятого
|
||
NALOGO_PASSWORD= # Пароль от личного кабинета налоговой
|
||
NALOGO_DEVICE_ID= # Опционально: ID устройства для авторизации
|
||
NALOGO_STORAGE_PATH=./nalogo_tokens.json # Путь к файлу с токенами
|
||
NALOGO_QUEUE_CHECK_INTERVAL=300 # Интервал проверки очереди чеков (секунды)
|
||
NALOGO_QUEUE_RECEIPT_DELAY=3 # Задержка между отправкой чеков (секунды)
|
||
NALOGO_QUEUE_MAX_ATTEMPTS=10 # Максимум попыток отправки одного чека
|
||
# NALOGO_PROXY_URL=socks5://127.0.0.1:1080 # SOCKS прокси для nalog.ru (если не задан — используется PROXY_URL)
|
||
|
||
# ===== НАСТРОЙКИ ОПИСАНИЙ ПЛАТЕЖЕЙ =====
|
||
# Эти настройки позволяют изменить описания платежей,
|
||
# чтобы избежать блокировок платежных систем
|
||
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
|
||
# Эти порты используются только при ручном запуске старого aiohttp сервера.
|
||
# В новой конфигурации все вебхуки обрабатываются через порт 8080.
|
||
CRYPTOBOT_WEBHOOK_PORT=8081
|
||
CRYPTOBOT_DEFAULT_ASSET=USDT
|
||
CRYPTOBOT_ASSETS=USDT,TON,BTC,ETH,LTC,BNB,TRX,USDC
|
||
CRYPTOBOT_INVOICE_EXPIRES_HOURS=24
|
||
|
||
# HELEKET
|
||
HELEKET_ENABLED=false
|
||
HELEKET_MERCHANT_ID=
|
||
HELEKET_API_KEY=
|
||
HELEKET_BASE_URL=https://api.heleket.com/v1
|
||
HELEKET_DEFAULT_CURRENCY=USDT
|
||
HELEKET_DEFAULT_NETWORK=
|
||
HELEKET_INVOICE_LIFETIME=3600
|
||
HELEKET_MARKUP_PERCENT=0
|
||
HELEKET_WEBHOOK_PATH=/heleket-webhook
|
||
HELEKET_WEBHOOK_HOST=0.0.0.0
|
||
HELEKET_WEBHOOK_PORT=8086
|
||
HELEKET_CALLBACK_URL=
|
||
HELEKET_RETURN_URL=
|
||
HELEKET_SUCCESS_URL=
|
||
|
||
# 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_DISPLAY_NAME=Mulen Pay
|
||
MULENPAY_DESCRIPTION="Пополнение баланса"
|
||
# Запрещённые ключевые слова в display_name (КАЗИНО, СТАВКИ и т.п. — блокируются Mulenpay)
|
||
# DISPLAY_NAME_BANNED_KEYWORDS=КАЗИНО,СТАВКИ,CASINO,BET,1XBET
|
||
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
|
||
# Ожидаемый origin для iframe (опционально, для безопасности)
|
||
# MULENPAY_IFRAME_EXPECTED_ORIGIN=https://mulenpay.ru
|
||
# URL для редиректа после оплаты (по умолчанию WEBHOOK_URL)
|
||
# MULENPAY_WEBSITE_URL=https://your-cabinet-url.com
|
||
|
||
# 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_PAYMENT_DESCRIPTION="Пополнение баланса"
|
||
PAL24_MIN_AMOUNT_KOPEKS=10000
|
||
PAL24_MAX_AMOUNT_KOPEKS=100000000
|
||
PAL24_REQUEST_TIMEOUT=30
|
||
# Отображать кнопку СБП в PayPalych (true - отображать, false - скрывать)
|
||
PAL24_SBP_BUTTON_VISIBLE=true
|
||
# Отображать кнопку оплаты картой в PayPalych (true - отображать, false - скрывать)
|
||
PAL24_CARD_BUTTON_VISIBLE=true
|
||
|
||
# PLATEGA
|
||
PLATEGA_ENABLED=false
|
||
PLATEGA_MERCHANT_ID=
|
||
PLATEGA_SECRET=
|
||
PLATEGA_BASE_URL=https://app.platega.io
|
||
# Название кнопки в интерфейсе
|
||
PLATEGA_DISPLAY_NAME=Platega
|
||
PLATEGA_RETURN_URL=
|
||
PLATEGA_FAILED_URL=
|
||
PLATEGA_CURRENCY=RUB
|
||
# Список ID активных методов из кабинета Platega (через запятую)
|
||
PLATEGA_ACTIVE_METHODS=2,11,12,13
|
||
PLATEGA_MIN_AMOUNT_KOPEKS=100
|
||
PLATEGA_MAX_AMOUNT_KOPEKS=100000000
|
||
PLATEGA_WEBHOOK_PATH=/platega-webhook
|
||
PLATEGA_WEBHOOK_HOST=0.0.0.0
|
||
PLATEGA_WEBHOOK_PORT=8086
|
||
|
||
# ===== FREEKASSA =====
|
||
FREEKASSA_ENABLED=false
|
||
FREEKASSA_SHOP_ID=
|
||
FREEKASSA_API_KEY=
|
||
# Секретное слово 1 (для формы оплаты)
|
||
FREEKASSA_SECRET_WORD_1=
|
||
# Секретное слово 2 (для webhook)
|
||
FREEKASSA_SECRET_WORD_2=
|
||
FREEKASSA_DISPLAY_NAME=Freekassa
|
||
FREEKASSA_CURRENCY=RUB
|
||
FREEKASSA_MIN_AMOUNT_KOPEKS=10000
|
||
FREEKASSA_MAX_AMOUNT_KOPEKS=100000000
|
||
FREEKASSA_PAYMENT_TIMEOUT_SECONDS=3600
|
||
FREEKASSA_WEBHOOK_PATH=/freekassa-webhook
|
||
FREEKASSA_WEBHOOK_HOST=0.0.0.0
|
||
FREEKASSA_WEBHOOK_PORT=8088
|
||
# Способ оплаты: пусто = форма выбора, 42 = обычный СБП, 44 = NSPK СБП
|
||
FREEKASSA_PAYMENT_SYSTEM_ID=
|
||
# Использовать API для создания заказов (обязательно для NSPK СБП)
|
||
FREEKASSA_USE_API=false
|
||
# Раздельные методы оплаты (отображаются как отдельные кнопки)
|
||
# СБП (QR код) — i=44
|
||
FREEKASSA_SBP_ENABLED=false
|
||
FREEKASSA_SBP_DISPLAY_NAME=СБП (QR код)
|
||
# Карты РФ — i=36
|
||
FREEKASSA_CARD_ENABLED=false
|
||
FREEKASSA_CARD_DISPLAY_NAME=Карта РФ
|
||
|
||
# ===== KASSA AI (api.fk.life) =====
|
||
# Отдельная платёжная система, работает параллельно с Freekassa
|
||
KASSA_AI_ENABLED=false
|
||
KASSA_AI_SHOP_ID=
|
||
KASSA_AI_API_KEY=
|
||
# Секретное слово 2 (для webhook)
|
||
KASSA_AI_SECRET_WORD_2=
|
||
KASSA_AI_DISPLAY_NAME=KassaAI
|
||
KASSA_AI_CURRENCY=RUB
|
||
KASSA_AI_MIN_AMOUNT_KOPEKS=10000
|
||
KASSA_AI_MAX_AMOUNT_KOPEKS=100000000
|
||
KASSA_AI_WEBHOOK_PATH=/kassa-ai-webhook
|
||
KASSA_AI_WEBHOOK_HOST=0.0.0.0
|
||
KASSA_AI_WEBHOOK_PORT=8089
|
||
# Способ оплаты: 44 = СБП (QR), 36 = Карты РФ, 43 = SberPay
|
||
KASSA_AI_PAYMENT_SYSTEM_ID=44
|
||
|
||
# ===== RIOPAY (api.riopay.online) =====
|
||
RIOPAY_ENABLED=false
|
||
RIOPAY_API_TOKEN=
|
||
# Ключ для HMAC-SHA512 верификации вебхуков (если не указан, используется RIOPAY_API_TOKEN)
|
||
RIOPAY_WEBHOOK_SECRET=
|
||
RIOPAY_DISPLAY_NAME=RioPay
|
||
RIOPAY_CURRENCY=RUB
|
||
RIOPAY_MIN_AMOUNT_KOPEKS=10000
|
||
RIOPAY_MAX_AMOUNT_KOPEKS=100000000
|
||
RIOPAY_WEBHOOK_PATH=/riopay-webhook
|
||
# URL для редиректа после оплаты (опционально)
|
||
RIOPAY_SUCCESS_URL=
|
||
RIOPAY_FAIL_URL=
|
||
|
||
# ===== WATA =====
|
||
WATA_ENABLED=false
|
||
WATA_BASE_URL=https://api.wata.pro
|
||
WATA_ACCESS_TOKEN=
|
||
WATA_TERMINAL_PUBLIC_ID=
|
||
WATA_PAYMENT_DESCRIPTION=Пополнение баланса
|
||
# Тип платежа: card, sbp, all
|
||
WATA_PAYMENT_TYPE=all
|
||
WATA_SUCCESS_REDIRECT_URL=
|
||
WATA_FAIL_REDIRECT_URL=
|
||
WATA_LINK_TTL_MINUTES=60
|
||
WATA_MIN_AMOUNT_KOPEKS=10000
|
||
WATA_MAX_AMOUNT_KOPEKS=10000000
|
||
WATA_REQUEST_TIMEOUT=30
|
||
WATA_WEBHOOK_PATH=/wata-webhook
|
||
WATA_WEBHOOK_HOST=0.0.0.0
|
||
WATA_WEBHOOK_PORT=8087
|
||
# Кэширование публичного ключа WATA (секунды)
|
||
WATA_PUBLIC_KEY_CACHE_SECONDS=3600
|
||
# URL для получения публичного ключа (опционально)
|
||
# WATA_PUBLIC_KEY_URL=
|
||
|
||
# ===== CLOUDPAYMENTS =====
|
||
CLOUDPAYMENTS_ENABLED=false
|
||
CLOUDPAYMENTS_PUBLIC_ID=
|
||
CLOUDPAYMENTS_API_SECRET=
|
||
# URL API CloudPayments
|
||
CLOUDPAYMENTS_API_URL=https://api.cloudpayments.ru
|
||
# URL виджета оплаты
|
||
CLOUDPAYMENTS_WIDGET_URL=https://widget.cloudpayments.ru/show
|
||
CLOUDPAYMENTS_DESCRIPTION=Пополнение баланса
|
||
CLOUDPAYMENTS_CURRENCY=RUB
|
||
CLOUDPAYMENTS_MIN_AMOUNT_KOPEKS=10000
|
||
CLOUDPAYMENTS_MAX_AMOUNT_KOPEKS=10000000
|
||
CLOUDPAYMENTS_WEBHOOK_PATH=/cloudpayments-webhook
|
||
CLOUDPAYMENTS_WEBHOOK_HOST=0.0.0.0
|
||
CLOUDPAYMENTS_WEBHOOK_PORT=8089
|
||
# URL для возврата после оплаты (опционально)
|
||
# CLOUDPAYMENTS_RETURN_URL=
|
||
# Скин виджета: mini, classic, modern
|
||
CLOUDPAYMENTS_SKIN=mini
|
||
CLOUDPAYMENTS_REQUIRE_EMAIL=false
|
||
CLOUDPAYMENTS_TEST_MODE=false
|
||
|
||
# ===== ИНТЕРФЕЙС И UX =====
|
||
|
||
# Включить логотип для всех сообщений (true - с изображением, false - только текст)
|
||
ENABLE_LOGO_MODE=true
|
||
LOGO_FILE=vpn_logo.png
|
||
|
||
# Режим главного меню:
|
||
# default - классический режим работы бота (все кнопки внутри Telegram)
|
||
# cabinet - режим Cabinet с активным ЛК MiniApp, кнопки ведут на конкретные
|
||
# разделы кабинета (/balance, /subscription, /referral и т.д.)
|
||
# Требует MINIAPP_CUSTOM_URL
|
||
# Алиасы для обратной совместимости: text, text_only, minimal
|
||
MAIN_MENU_MODE=default
|
||
# Стиль кнопок в режиме Cabinet (Bot API 9.4):
|
||
# primary - синий
|
||
# success - зелёный
|
||
# danger - красный
|
||
# (пустое) - цвета по умолчанию для каждой секции
|
||
CABINET_BUTTON_STYLE=
|
||
# Включить управление меню через API (позволяет динамически менять структуру кнопок)
|
||
MENU_LAYOUT_ENABLED=false
|
||
|
||
# Скрыть блок с ссылкой подключения в разделе с информацией о подписке
|
||
HIDE_SUBSCRIPTION_LINK=false
|
||
|
||
# Режим работы кнопки "Подключиться"
|
||
# guide - открывает гайд подключения (режим 1)
|
||
# miniapp_subscription - открывает ссылку подписки в мини-приложении (режим 2)
|
||
# miniapp_custom - открывает заданную ссылку в мини-приложении (режим 3)
|
||
# link - Открывает ссылку напрямую в браузере (режим 4)
|
||
# happ_cryptolink - Вывод cryptoLink ссылки на подписку Happ (режим 5)
|
||
CONNECT_BUTTON_MODE=miniapp_subscription
|
||
|
||
# URL для режима miniapp_custom (обязателен при CONNECT_BUTTON_MODE=miniapp_custom)
|
||
MINIAPP_CUSTOM_URL=
|
||
MINIAPP_STATIC_PATH=miniapp
|
||
# URL для редиректа на страницу покупки в мини-приложении (опционально)
|
||
# MINIAPP_PURCHASE_URL=
|
||
MINIAPP_SERVICE_NAME_EN=Bedolaga VPN
|
||
MINIAPP_SERVICE_NAME_RU=Bedolaga VPN
|
||
MINIAPP_SERVICE_DESCRIPTION_EN=Secure & Fast Connection
|
||
MINIAPP_SERVICE_DESCRIPTION_RU=Безопасное и быстрое подключение
|
||
|
||
# Параметры режима happ_cryptolink
|
||
CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLED=false
|
||
HAPP_DOWNLOAD_LINK_IOS=
|
||
HAPP_DOWNLOAD_LINK_ANDROID=
|
||
HAPP_DOWNLOAD_LINK_MACOS=
|
||
HAPP_DOWNLOAD_LINK_WINDOWS=
|
||
# Универсальная ссылка для ПК (если MACOS и WINDOWS не заданы отдельно)
|
||
HAPP_DOWNLOAD_LINK_PC=
|
||
# Кнопка (Подключится) с редиректом (тк ссылки с happ:// тг не поддерживает) - Без установленной ссылки на редирект кнопки (подключится) не будет! Пример: https://sub.domain.sub/redirect-page/?redirect_to=
|
||
HAPP_CRYPTOLINK_REDIRECT_TEMPLATE=
|
||
|
||
# Пропустить принятие правил использования бота
|
||
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_MONITORING_ENABLED=true
|
||
MAINTENANCE_RETRY_ATTEMPTS=1
|
||
MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен. Попробуйте позже.
|
||
|
||
# ===== ЛОКАЛИЗАЦИЯ =====
|
||
# Укажите язык из AVAILABLE_LANGUAGES. При некорректном значении используется ru.
|
||
DEFAULT_LANGUAGE=ru
|
||
AVAILABLE_LANGUAGES=ru,en,ua,zh,fa
|
||
# Включить выбор языка при старте и отображение кнопки в меню
|
||
LANGUAGE_SELECTION_ENABLED=true
|
||
|
||
# Округление цен при отображении (≤50 коп вниз, >50 коп вверх)
|
||
# true: 14.78₽ → 15₽, 14.12₽ → 14₽
|
||
# false: показывать точные суммы с копейками
|
||
PRICE_ROUNDING_ENABLED=true
|
||
|
||
# Часовой пояс
|
||
TZ=Europe/Moscow # или UTC, America/New_York и т.д.
|
||
|
||
# ===== ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ =====
|
||
ENABLE_DEEP_LINKS=true
|
||
APP_CONFIG_CACHE_TTL=3600
|
||
|
||
# ===== BAN SYSTEM INTEGRATION (BedolagaBan) =====
|
||
# Интеграция с системой мониторинга банов BedolagaBan
|
||
# Включить интеграцию с Ban системой
|
||
BAN_SYSTEM_ENABLED=false
|
||
# URL API сервера Ban системы (например: http://ban-server:8000)
|
||
BAN_SYSTEM_API_URL=
|
||
# API токен для авторизации в Ban системе
|
||
BAN_SYSTEM_API_TOKEN=
|
||
# Таймаут запросов к API (секунды)
|
||
BAN_SYSTEM_REQUEST_TIMEOUT=30
|
||
|
||
# ===== СИСТЕМА БЕКАПОВ =====
|
||
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 топика
|
||
# Пароль для архива бекапа (опционально). Если задан - бекап отправляется в зашифрованном ZIP с AES
|
||
BACKUP_ARCHIVE_PASSWORD=
|
||
|
||
# ===== ПРОВЕРКА ОБНОВЛЕНИЙ БОТА =====
|
||
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
|
||
# ANSI-цвета в консоли (true — цветной вывод с Rich, false — plain-text)
|
||
LOG_COLORS=true
|
||
|
||
# === Ротация логов ===
|
||
# Включить новую систему ротации (по умолчанию старое поведение)
|
||
LOG_ROTATION_ENABLED=false
|
||
# Время ротации (HH:MM)
|
||
LOG_ROTATION_TIME=00:00
|
||
# Хранить архивы N дней
|
||
LOG_ROTATION_KEEP_DAYS=7
|
||
# Сжимать архивы gzip
|
||
LOG_ROTATION_COMPRESS=true
|
||
# Отправлять архивы в Telegram-канал
|
||
LOG_ROTATION_SEND_TO_TELEGRAM=false
|
||
# Канал для логов (если не задан, используется BACKUP_SEND_CHAT_ID)
|
||
LOG_ROTATION_CHAT_ID=
|
||
# Топик в канале (если не задан, используется BACKUP_SEND_TOPIC_ID)
|
||
LOG_ROTATION_TOPIC_ID=
|
||
# Пути к лог-файлам (при LOG_ROTATION_ENABLED=true)
|
||
LOG_DIR=logs
|
||
LOG_INFO_FILE=info.log
|
||
LOG_WARNING_FILE=warning.log
|
||
LOG_ERROR_FILE=error.log
|
||
LOG_PAYMENTS_FILE=payments.log
|
||
|
||
# ===== РАЗРАБОТКА =====
|
||
DEBUG=false
|
||
WEBHOOK_URL=
|
||
WEBHOOK_PATH=/webhook
|
||
WEBHOOK_SECRET_TOKEN=
|
||
WEBHOOK_DROP_PENDING_UPDATES=true
|
||
WEBHOOK_MAX_QUEUE_SIZE=1024
|
||
WEBHOOK_WORKERS=4
|
||
WEBHOOK_ENQUEUE_TIMEOUT=0.1
|
||
WEBHOOK_WORKER_SHUTDOWN_TIMEOUT=30.0
|
||
BOT_RUN_MODE=polling # polling или webhook
|
||
|
||
# ===== КОНКУРСНАЯ СИСТЕМА =====
|
||
CONTESTS_ENABLED=false
|
||
CONTESTS_BUTTON_VISIBLE=false
|
||
# Реферальные конкурсы (турниры среди рефералов)
|
||
REFERRAL_CONTESTS_ENABLED=false
|
||
|
||
# ===== АВТОПОКУПКА ПОСЛЕ ПОПОЛНЕНИЯ =====
|
||
# Автоматическая покупка из сохранённой корзины после пополнения баланса
|
||
AUTO_PURCHASE_AFTER_TOPUP_ENABLED=false
|
||
|
||
# ===== КНОПКА АКТИВАЦИИ =====
|
||
ACTIVATE_BUTTON_VISIBLE=false
|
||
# ACTIVATE_BUTTON_TEXT=активировать
|
||
|
||
# ===== ЕДИНЫЙ ВЕБ-СЕРВЕР =====
|
||
WEB_API_ENABLED=false
|
||
WEB_API_HOST=0.0.0.0
|
||
WEB_API_PORT=8080
|
||
# Количество воркеров (для продакшена рекомендуется 2-4)
|
||
WEB_API_WORKERS=1
|
||
WEB_API_ALLOWED_ORIGINS=*
|
||
WEB_API_DOCS_ENABLED=false
|
||
# Название и версия API (для документации)
|
||
WEB_API_TITLE=Remnawave Bot Admin API
|
||
WEB_API_VERSION=1.0.0
|
||
# Токен по умолчанию для начальной настройки
|
||
WEB_API_DEFAULT_TOKEN=
|
||
WEB_API_DEFAULT_TOKEN_NAME=Bootstrap Token
|
||
# Алгоритм хеширования токенов
|
||
WEB_API_TOKEN_HASH_ALGORITHM=sha256
|
||
# Логирование запросов
|
||
WEB_API_REQUEST_LOGGING=true
|
||
|
||
# Внешний админ-токен (для интеграции с другими ботами/системами)
|
||
# Токен для доступа через API другого бота
|
||
# EXTERNAL_ADMIN_TOKEN=
|
||
# ID бота, от которого принимается токен
|
||
# EXTERNAL_ADMIN_TOKEN_BOT_ID=
|
||
|
||
MINIAPP_STATIC_PATH=miniapp
|