Пользователи
Раздел «Пользователи» — список всех клиентов с фильтрами и карточкой, из которой делаются все ручные операции: баланс, продление, лимит устройств, сброс трафика, бан.
Список и поиск
Поиск понимает @username (с собакой или без), имя, фамилию и Telegram ID (число ищется точным совпадением). Спецсимволы экранируются — % в запросе не превратится в «показать всех».
Табы-фильтры со счётчиками:
| Фильтр | Кто попадает |
|---|---|
| Все | Все, кроме системных аккаунтов |
| Активные | Активный юзер с подпиской ACTIVE или LIMITED (упёрся в лимит трафика) |
| Триал | Подписка в статусе TRIAL |
| Истёкшие | Подписка EXPIRED или DISABLED |
| Блок | Забаненные (status = BLOCKED) |
В строке видно баланс, план (из снапшота подписки), срок, трафик, лимит устройств и активность. Кнопка «Экспорт CSV» выгружает текущую выборку с колонками id, telegram_id, username, first_name, status, balance_minor, subscription, created_at.
Карточка пользователя
Клик по строке открывает карточку с вкладками Обзор / Финансы / Тикеты / Действия:
- баланс и валюта;
- подписка: статус, план (замороженный снапшот), срок, трафик использовано/лимит, лимит устройств (HWID), ссылка подписки, автопродление, UUID юзера на панели;
- рефералка: код, сколько приведено, сколько заработано;
- персональная и одноразовая скидки;
- последние 10 транзакций.
Ручные операции
Все операции пишутся в журнал аудита с именем админа.
Баланс. Начисление или списание произвольной суммы (до 10 млн ₽ за операцию) с комментарием. В истории юзера появляется транзакция с пометкой admin @username — начисление типа GIFT, списание — WITHDRAWAL.
Продлить подписку. +N дней (1–3650, в интерфейсе — быстрые кнопки «+7» и «+30»). Продление идёт panel-first: новый срок сначала применяется на панели Remnawave, потом коммитится локально. Считается от текущей даты окончания (или от «сейчас», если подписка уже истекла), статус подписки становится ACTIVE. Ошибка панели вернёт 502 — ничего не «продлится наполовину».
Расширить HWID. Меняет лимит устройств на ±N (минимум 1) и сразу пушит новый лимит на панель.
Сбросить трафик. Сначала сбрасывается счётчик на панели, потом локальный. Порядок важен: если обнулить только локально, ближайший вебхук панели вернёт реальный расход, и юзер с исчерпанным лимитом останется зарезанным.
Бан и разбан
Кнопка «Заблокировать» ставит юзеру статус BLOCKED:
- бот полностью игнорирует его сообщения и нажатия (админов забанить бан не может — стафф-аккаунты защищены);
- веб-кабинет клиента и миниапп отвечают 403 — ни новую сессию получить, ни удержать старую не выйдет.
Бан не отключает VPN
Блокировка касается только бота и кабинета клиента. Подписка на панели Remnawave не трогается — конфиг продолжает работать до конца оплаченного срока. Если нужно оборвать доступ немедленно, отключите юзера на панели вручную.
«Разблокировать» возвращает статус ACTIVE — юзер снова видит бота и кабинет.
