4.1 KiB
4.1 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. - Сброс происходит в начале календарного месяца для всех одинаково.
- Если покупка или продление были в середине месяца, reset всё равно придёт на ближайший первый день следующего месяца.
- Панель по-прежнему считает
usedTrafficBytes, а бот только синхронизирует месячный reset и лимиты.
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.
- Раз в несколько минут проверяет наступление нового календарного месяца.
- Отправляет/дедуплицирует уровни предупреждений 80/95/100 через
traffic_warnings. - При 100% удаляет пользователя из squad-ов тарифа и ставит
is_throttled. - Возвращает пользователя в squad-ы, когда лимит снова больше использованного трафика.