fix(devices): сброс устройств при уменьшении лимита
При уменьшении лимита устройств подключённые устройства не удалялись,
позволяя пользователю продолжать использовать их бесплатно.
Исправления:
- execute_change_devices: сброс всех устройств через API если
подключённых больше чем новый лимит
- confirm_change_devices: предупреждение пользователя о сбросе
устройств перед подтверждением
- Уведомление о количестве сброшенных устройств в результате
This commit is contained in:
@@ -355,6 +355,28 @@ async def confirm_change_devices(
|
||||
).format(count=new_devices_count)
|
||||
cost_text = texts.t("DEVICE_CHANGE_NO_REFUND", "Возврат средств не производится")
|
||||
|
||||
# Проверяем количество подключённых устройств для предупреждения
|
||||
devices_warning = ""
|
||||
if new_devices_count < current_devices and db_user.remnawave_uuid:
|
||||
try:
|
||||
service = RemnaWaveService()
|
||||
async with service.get_api_client() as api:
|
||||
response = await api._make_request('GET', f'/api/hwid/devices/{db_user.remnawave_uuid}')
|
||||
if response and 'response' in response:
|
||||
connected_count = response['response'].get('total', 0)
|
||||
if connected_count > new_devices_count:
|
||||
devices_warning = texts.t(
|
||||
"DEVICE_CHANGE_RESET_WARNING",
|
||||
(
|
||||
"\n⚠️ <b>Внимание!</b>\n"
|
||||
"У вас подключено {connected} устройств.\n"
|
||||
"При уменьшении лимита до {new} все устройства будут сброшены.\n"
|
||||
"Вам нужно будет заново подключить нужные устройства.\n"
|
||||
),
|
||||
).format(connected=connected_count, new=new_devices_count)
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка проверки устройств: {e}")
|
||||
|
||||
confirm_text = texts.t(
|
||||
"DEVICE_CHANGE_CONFIRMATION",
|
||||
(
|
||||
@@ -372,6 +394,9 @@ async def confirm_change_devices(
|
||||
cost=cost_text,
|
||||
)
|
||||
|
||||
if devices_warning:
|
||||
confirm_text += devices_warning
|
||||
|
||||
await callback.message.edit_text(
|
||||
confirm_text,
|
||||
reply_markup=get_confirm_change_devices_keyboard(new_devices_count, price, db_user.language),
|
||||
@@ -431,6 +456,28 @@ async def execute_change_devices(
|
||||
subscription_service = SubscriptionService()
|
||||
await subscription_service.update_remnawave_user(db, subscription)
|
||||
|
||||
# При уменьшении лимита - сбросить лишние устройства
|
||||
devices_reset_count = 0
|
||||
if new_devices_count < current_devices and db_user.remnawave_uuid:
|
||||
try:
|
||||
service = RemnaWaveService()
|
||||
async with service.get_api_client() as api:
|
||||
response = await api._make_request('GET', f'/api/hwid/devices/{db_user.remnawave_uuid}')
|
||||
if response and 'response' in response:
|
||||
devices_list = response['response'].get('devices', [])
|
||||
connected_count = len(devices_list)
|
||||
|
||||
# Если подключённых устройств больше чем новый лимит - сбросить все
|
||||
if connected_count > new_devices_count:
|
||||
logger.info(
|
||||
f"🔧 Сброс устройств при уменьшении лимита: "
|
||||
f"подключено {connected_count}, новый лимит {new_devices_count}"
|
||||
)
|
||||
await api.reset_user_devices(db_user.remnawave_uuid)
|
||||
devices_reset_count = connected_count
|
||||
except Exception as reset_error:
|
||||
logger.error(f"Ошибка сброса устройств при уменьшении лимита: {reset_error}")
|
||||
|
||||
await db.refresh(db_user)
|
||||
await db.refresh(subscription)
|
||||
|
||||
@@ -466,6 +513,12 @@ async def execute_change_devices(
|
||||
"DEVICE_CHANGE_RESULT_LINE",
|
||||
"📱 Было: {old} → Стало: {new}\n",
|
||||
).format(old=current_devices, new=new_devices_count)
|
||||
if devices_reset_count > 0:
|
||||
success_text += texts.t(
|
||||
"DEVICE_CHANGE_DEVICES_RESET",
|
||||
"\n🔄 Сброшено устройств: {count}\n"
|
||||
"💡 Подключите заново нужные устройства (до {limit} шт.)\n\n",
|
||||
).format(count=devices_reset_count, limit=new_devices_count)
|
||||
success_text += texts.t(
|
||||
"DEVICE_CHANGE_NO_REFUND_INFO",
|
||||
"ℹ️ Возврат средств не производится",
|
||||
|
||||
Reference in New Issue
Block a user