4.3 KiB
4.3 KiB
Тарифы 2.0
Бот поддерживает каталог тарифов в JSON-файле. Путь задается через TARIFFS_CONFIG_PATH, по умолчанию config/tariffs.json.
Если файл отсутствует, включается legacy fallback: используются старые .env поля RUB_PRICE_*, STARS_PRICE_*, USER_TRAFFIC_LIMIT_GB, USER_SQUAD_UUIDS, а также старый режим TRAFFIC_PACKAGES.
Конфиг
См. пример: config/tariffs.example.json.
Основные поля:
| Поле | Описание |
|---|---|
default_tariff |
Тариф для миграции существующих подписок и выбора по умолчанию |
topup_packages_default |
Пакеты докупки для period-тарифов без собственных пакетов |
tariffs[].billing_model |
period или traffic |
tariffs[].squad_uuids |
Internal squads Remnawave для тарифа |
prices_rub / prices_stars |
Цены period-тарифов по месяцам |
traffic_packages |
Пакеты GB для traffic-тарифов |
Period-Тариф
Period-тариф продает доступ на срок и лимит трафика с календарным ежемесячным сбросом.
monthly_gbпревращается вtier_baseline_bytes.- Докупленные пакеты хранятся в
topup_balance_bytes. - В Remnawave пушится
trafficLimitBytes = tier_baseline_bytes + topup_balance_bytes. - Для period-тарифов бот выставляет
trafficLimitStrategy = MONTH, а дальнейший reset делает сама панель. - Дата сброса больше не считается в боте.
- Если покупка или продление были в середине месяца, сброс всё равно произойдёт по правилам панели для
MONTH. - Бот только меняет лимиты в GB и следит за предупреждениями/throttle на основе текущего usage из панели.
Traffic-Тариф
Traffic-тариф продает GB без срока действия.
end_dateтехнически ставится в2099-01-01 UTC.period_start_at = NULL.trafficLimitStrategy = NO_RESET.- Новая покупка добавляет GB к фактическому остатку:
limit = used + remaining + purchased. - Доступ ограничивается только при исчерпании купленного трафика.
Смена Тарифа
Смена пишется в tariff_changes.
period -> period: расчет идет отeffective_monthly_price_rub; пересчет дней используетfloor.period -> traffic: остаток оплаченных дней конвертируется в GB поconversion_rate_rub_per_gbили минимальной цене GB в RUB-пакетах.traffic -> period: пользователь покупает период, а остаток GB сохраняется как топ-ап поверх нового тарифа.
Платежи
Новые платежи сохраняют:
sale_mode:subscription,traffic_package,topup,tariff_upgrade;tariff_key;purchased_gbдля GB-покупок.
Legacy поле subscription_duration_months остается для совместимости.
Воркеры
TariffTrafficWorker запускается, только если активен tariffs.json.
- Раз в несколько минут синхронизирует
trafficLimitStrategy = MONTHдля period-тарифов, если панель ещё не переключена. - Отправляет/дедуплицирует уровни предупреждений из
TARIFF_TRAFFIC_WARNING_LEVELS(по умолчанию85,90,95) черезtraffic_warnings. - При 100% удаляет пользователя из squad-ов тарифа и ставит
is_throttled. - Возвращает пользователя в squad-ы, когда лимит снова больше использованного трафика.