Устройства (HWID)
Экран «📱 Устройства» показывает пользователю, какие устройства привязаны к его подписке, и даёт отвязать лишние в один тап — без обращения в поддержку. В конструкторе меню это действие devices; кнопка требует активной подписки.
Откуда берутся HWID
HWID регистрирует панель Remnawave: клиентские приложения передают идентификатор устройства при подключении по подписочной ссылке. Бот ничего не хранит — он читает живой список с панели (GET /api/hwid/devices/{uuid}) при каждом открытии экрана и удаляет устройства через её же API (POST /api/hwid/devices/delete).
Лимит устройств задаётся тарифом: device_limit плана передаётся на панель как hwidDeviceLimit при создании и обновлении panel-юзера (0 = безлимит) и показывается в заголовке экрана — «📱 Устройства (лимит N)». Лимит триала — отдельная настройка TRIAL_DEVICE_LIMIT.
Что видит юзер
- Список до 10 устройств; подпись — платформа и модель («iOS · iPhone15,3»), если панель их не сообщила — первые символы HWID.
- Кнопка ❌ напротив каждого устройства — отвязка. После отвязки список сразу перерисовывается, освобождая слот под новое устройство.
- Без активной подписки — алерт «Сначала оформи подписку»; при недоступной панели — «Панель временно недоступна, попробуй позже».
Отвязка сверяется с живым списком
Кнопка кодирует позицию в списке, и перед удалением бот перечитывает устройства с панели: если список успел измениться, юзер получит «Список изменился — открой заново» вместо отвязки не того устройства.
Связь с Device Guard
HWID-лимит — жёсткое ограничение на стороне панели: устройство сверх лимита просто не подключится. Device Guard — второй, независимый рубеж: он ловит шеринг подписки по числу одновременных онлайн-IP и умеет алертить, рвать соединения или отключать подписку. Работают вместе: лимит держит честных, Guard находит тех, кто делится в обход.
