mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-19 02:42:27 +00:00
Fix server squad user counters on removal
This commit is contained in:
@@ -371,6 +371,31 @@ async def cmd_start(message: types.Message, state: FSMContext, db: AsyncSession,
|
||||
from sqlalchemy import delete
|
||||
|
||||
if user.subscription:
|
||||
try:
|
||||
from app.database.crud.subscription import get_subscription_server_ids
|
||||
from app.database.crud.server_squad import (
|
||||
get_server_ids_by_uuids,
|
||||
remove_user_from_servers,
|
||||
)
|
||||
|
||||
removed_server_ids = set(
|
||||
await get_subscription_server_ids(db, user.subscription.id)
|
||||
)
|
||||
|
||||
if user.subscription.connected_squads:
|
||||
removed_server_ids.update(
|
||||
await get_server_ids_by_uuids(
|
||||
db, user.subscription.connected_squads
|
||||
)
|
||||
)
|
||||
|
||||
if removed_server_ids:
|
||||
await remove_user_from_servers(db, list(removed_server_ids))
|
||||
except Exception as counter_error:
|
||||
logger.error(
|
||||
f"❌ Ошибка обновления счетчиков серверов при повторной регистрации {user.telegram_id}: {counter_error}"
|
||||
)
|
||||
|
||||
await db.execute(
|
||||
delete(SubscriptionServer).where(
|
||||
SubscriptionServer.subscription_id == user.subscription.id
|
||||
|
||||
@@ -1610,19 +1610,35 @@ async def apply_countries_changes(
|
||||
description=f"Добавление стран к подписке: {', '.join(added_names)} на {charged_months} мес"
|
||||
)
|
||||
|
||||
if added:
|
||||
from app.database.crud.server_squad import get_server_ids_by_uuids, add_user_to_servers
|
||||
from app.database.crud.subscription import add_subscription_servers
|
||||
if added or removed:
|
||||
from app.database.crud.server_squad import (
|
||||
get_server_ids_by_uuids,
|
||||
add_user_to_servers,
|
||||
remove_user_from_servers,
|
||||
)
|
||||
from app.database.crud.subscription import (
|
||||
add_subscription_servers,
|
||||
remove_subscription_servers,
|
||||
)
|
||||
|
||||
added_server_ids = await get_server_ids_by_uuids(db, added)
|
||||
added_server_ids = await get_server_ids_by_uuids(db, added) if added else []
|
||||
removed_server_ids = await get_server_ids_by_uuids(db, removed) if removed else []
|
||||
|
||||
if added_server_ids:
|
||||
await add_subscription_servers(db, subscription, added_server_ids, added_server_prices)
|
||||
await add_user_to_servers(db, added_server_ids)
|
||||
|
||||
logger.info(
|
||||
f"📊 Добавлены серверы с ценами за {charged_months} мес: {list(zip(added_server_ids, added_server_prices))}")
|
||||
f"📊 Добавлены серверы с ценами за {charged_months} мес: {list(zip(added_server_ids, added_server_prices))}"
|
||||
)
|
||||
|
||||
if removed_server_ids:
|
||||
await remove_subscription_servers(db, subscription.id, removed_server_ids)
|
||||
await remove_user_from_servers(db, removed_server_ids)
|
||||
|
||||
logger.info(
|
||||
f"📉 Удалены серверы из подписки {subscription.id}: {removed_server_ids}"
|
||||
)
|
||||
subscription.connected_squads = selected_countries
|
||||
subscription.updated_at = datetime.utcnow()
|
||||
await db.commit()
|
||||
@@ -6642,4 +6658,4 @@ def register_handlers(dp: Dispatcher):
|
||||
dp.callback_query.register(
|
||||
show_device_connection_help,
|
||||
F.data == "device_connection_help"
|
||||
)
|
||||
)
|
||||
|
||||
@@ -621,7 +621,24 @@ class RemnaWaveService:
|
||||
try:
|
||||
from sqlalchemy import delete
|
||||
from app.database.models import SubscriptionServer
|
||||
|
||||
from app.database.crud.subscription import get_subscription_server_ids
|
||||
from app.database.crud.server_squad import (
|
||||
get_server_ids_by_uuids,
|
||||
remove_user_from_servers,
|
||||
)
|
||||
|
||||
removed_server_ids = set(
|
||||
await get_subscription_server_ids(db, subscription.id)
|
||||
)
|
||||
|
||||
if subscription.connected_squads:
|
||||
removed_server_ids.update(
|
||||
await get_server_ids_by_uuids(db, subscription.connected_squads)
|
||||
)
|
||||
|
||||
if removed_server_ids:
|
||||
await remove_user_from_servers(db, list(removed_server_ids))
|
||||
|
||||
await db.execute(
|
||||
delete(SubscriptionServer).where(
|
||||
SubscriptionServer.subscription_id == subscription.id
|
||||
@@ -1174,6 +1191,42 @@ class RemnaWaveService:
|
||||
user.updated_at = self._now_in_panel_timezone()
|
||||
|
||||
if user.subscription:
|
||||
try:
|
||||
from sqlalchemy import delete
|
||||
from app.database.models import SubscriptionServer
|
||||
from app.database.crud.subscription import get_subscription_server_ids
|
||||
from app.database.crud.server_squad import (
|
||||
get_server_ids_by_uuids,
|
||||
remove_user_from_servers,
|
||||
)
|
||||
|
||||
removed_server_ids = set(
|
||||
await get_subscription_server_ids(db, user.subscription.id)
|
||||
)
|
||||
|
||||
if user.subscription.connected_squads:
|
||||
removed_server_ids.update(
|
||||
await get_server_ids_by_uuids(
|
||||
db, user.subscription.connected_squads
|
||||
)
|
||||
)
|
||||
|
||||
if removed_server_ids:
|
||||
await remove_user_from_servers(db, list(removed_server_ids))
|
||||
|
||||
await db.execute(
|
||||
delete(SubscriptionServer).where(
|
||||
SubscriptionServer.subscription_id == user.subscription.id
|
||||
)
|
||||
)
|
||||
logger.info(
|
||||
f"🗑️ Удалены привязанные серверы подписки для пользователя {user.telegram_id}"
|
||||
)
|
||||
except Exception as servers_error:
|
||||
logger.error(
|
||||
f"❌ Ошибка удаления серверов подписки при очистке пользователя {user.telegram_id}: {servers_error}"
|
||||
)
|
||||
|
||||
user.subscription.status = SubscriptionStatus.DISABLED.value
|
||||
user.subscription.is_trial = True
|
||||
user.subscription.end_date = self._now_in_panel_timezone()
|
||||
|
||||
@@ -537,6 +537,31 @@ class UserService:
|
||||
|
||||
if subscription_servers:
|
||||
logger.info(f"🔄 Удаляем {len(subscription_servers)} связей подписка-сервер")
|
||||
|
||||
try:
|
||||
from app.database.crud.server_squad import (
|
||||
get_server_ids_by_uuids,
|
||||
remove_user_from_servers,
|
||||
)
|
||||
|
||||
removed_server_ids = {
|
||||
sub_server.server_squad_id for sub_server in subscription_servers
|
||||
}
|
||||
|
||||
if user.subscription.connected_squads:
|
||||
removed_server_ids.update(
|
||||
await get_server_ids_by_uuids(
|
||||
db, user.subscription.connected_squads
|
||||
)
|
||||
)
|
||||
|
||||
if removed_server_ids:
|
||||
await remove_user_from_servers(db, list(removed_server_ids))
|
||||
except Exception as counter_error:
|
||||
logger.error(
|
||||
f"❌ Ошибка обновления счетчиков серверов при удалении пользователя {user.telegram_id}: {counter_error}"
|
||||
)
|
||||
|
||||
await db.execute(
|
||||
delete(SubscriptionServer).where(
|
||||
SubscriptionServer.subscription_id == user.subscription.id
|
||||
|
||||
Reference in New Issue
Block a user