Enhance user description synchronization with Telegram profile
- Added functionality to update user descriptions on the panel during synchronization, incorporating Telegram fields such as username, first name, and last name. - Implemented error handling and logging for failed description updates in both admin sync and profile sync processes. - Updated user creation and details update methods in the subscription service to include user descriptions, improving consistency across user data management.
This commit is contained in:
@@ -136,6 +136,23 @@ async def perform_sync(panel_service: PanelApiService, session: AsyncSession,
|
|||||||
users_uuid_updated += 1
|
users_uuid_updated += 1
|
||||||
logging.info(f"Updated panel UUID for user {actual_user_id}: {panel_uuid}")
|
logging.info(f"Updated panel UUID for user {actual_user_id}: {panel_uuid}")
|
||||||
|
|
||||||
|
# Ensure panel description contains Telegram fields
|
||||||
|
try:
|
||||||
|
if panel_uuid and existing_user:
|
||||||
|
description_text = "\n".join([
|
||||||
|
existing_user.username or "",
|
||||||
|
existing_user.first_name or "",
|
||||||
|
existing_user.last_name or "",
|
||||||
|
])
|
||||||
|
if description_text.strip():
|
||||||
|
await panel_service.update_user_details_on_panel(
|
||||||
|
panel_uuid, {"description": description_text}
|
||||||
|
)
|
||||||
|
except Exception as e_desc:
|
||||||
|
logging.warning(
|
||||||
|
f"Sync: Failed to update description for panel user {panel_uuid} (tg {actual_user_id}): {e_desc}"
|
||||||
|
)
|
||||||
|
|
||||||
# Sync subscription data
|
# Sync subscription data
|
||||||
panel_expire_at_iso = panel_user_dict.get("expireAt")
|
panel_expire_at_iso = panel_user_dict.get("expireAt")
|
||||||
panel_status = panel_user_dict.get("status", "UNKNOWN")
|
panel_status = panel_user_dict.get("status", "UNKNOWN")
|
||||||
|
|||||||
@@ -36,6 +36,24 @@ class ProfileSyncMiddleware(BaseMiddleware):
|
|||||||
logging.info(
|
logging.info(
|
||||||
f"ProfileSyncMiddleware: Updated user {tg_user.id} profile fields: {list(update_payload.keys())}"
|
f"ProfileSyncMiddleware: Updated user {tg_user.id} profile fields: {list(update_payload.keys())}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Also update description on panel if linked
|
||||||
|
try:
|
||||||
|
panel_service = data.get("panel_service")
|
||||||
|
if panel_service and db_user.panel_user_uuid:
|
||||||
|
description_text = "\n".join([
|
||||||
|
tg_user.username or "",
|
||||||
|
tg_user.first_name or "",
|
||||||
|
tg_user.last_name or "",
|
||||||
|
])
|
||||||
|
await panel_service.update_user_details_on_panel(
|
||||||
|
db_user.panel_user_uuid,
|
||||||
|
{"description": description_text},
|
||||||
|
)
|
||||||
|
except Exception as e_upd_desc:
|
||||||
|
logging.warning(
|
||||||
|
f"ProfileSyncMiddleware: Failed to update panel description for user {tg_user.id}: {e_upd_desc}"
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(
|
logging.error(
|
||||||
f"ProfileSyncMiddleware: Failed to sync profile for user {getattr(tg_user, 'id', 'N/A')}: {e}",
|
f"ProfileSyncMiddleware: Failed to sync profile for user {getattr(tg_user, 'id', 'N/A')}: {e}",
|
||||||
|
|||||||
@@ -119,6 +119,11 @@ class SubscriptionService:
|
|||||||
creation_response = await self.panel_service.create_panel_user(
|
creation_response = await self.panel_service.create_panel_user(
|
||||||
username_on_panel=panel_username_on_panel_standard,
|
username_on_panel=panel_username_on_panel_standard,
|
||||||
telegram_id=user_id,
|
telegram_id=user_id,
|
||||||
|
description="\n".join([
|
||||||
|
(db_user.username or "") if db_user else "",
|
||||||
|
(db_user.first_name or "") if db_user else "",
|
||||||
|
(db_user.last_name or "") if db_user else "",
|
||||||
|
]),
|
||||||
specific_squad_uuids=self.settings.parsed_user_squad_uuids,
|
specific_squad_uuids=self.settings.parsed_user_squad_uuids,
|
||||||
default_traffic_limit_bytes=self.settings.user_traffic_limit_bytes,
|
default_traffic_limit_bytes=self.settings.user_traffic_limit_bytes,
|
||||||
default_traffic_limit_strategy=self.settings.USER_TRAFFIC_STRATEGY,
|
default_traffic_limit_strategy=self.settings.USER_TRAFFIC_STRATEGY,
|
||||||
@@ -142,6 +147,11 @@ class SubscriptionService:
|
|||||||
creation_response = await self.panel_service.create_panel_user(
|
creation_response = await self.panel_service.create_panel_user(
|
||||||
username_on_panel=panel_username_on_panel_standard,
|
username_on_panel=panel_username_on_panel_standard,
|
||||||
telegram_id=user_id,
|
telegram_id=user_id,
|
||||||
|
description="\n".join([
|
||||||
|
(db_user.username or "") if db_user else "",
|
||||||
|
(db_user.first_name or "") if db_user else "",
|
||||||
|
(db_user.last_name or "") if db_user else "",
|
||||||
|
]),
|
||||||
specific_squad_uuids=self.settings.parsed_user_squad_uuids,
|
specific_squad_uuids=self.settings.parsed_user_squad_uuids,
|
||||||
default_traffic_limit_bytes=self.settings.user_traffic_limit_bytes,
|
default_traffic_limit_bytes=self.settings.user_traffic_limit_bytes,
|
||||||
default_traffic_limit_strategy=self.settings.USER_TRAFFIC_STRATEGY,
|
default_traffic_limit_strategy=self.settings.USER_TRAFFIC_STRATEGY,
|
||||||
@@ -258,8 +268,19 @@ class SubscriptionService:
|
|||||||
logging.info(
|
logging.info(
|
||||||
f"Panel user {current_local_panel_uuid} has telegramId '{panel_telegram_id_from_api}'. Updating on panel to '{user_id}'."
|
f"Panel user {current_local_panel_uuid} has telegramId '{panel_telegram_id_from_api}'. Updating on panel to '{user_id}'."
|
||||||
)
|
)
|
||||||
|
# Also set readable description with Telegram fields
|
||||||
await self.panel_service.update_user_details_on_panel(
|
await self.panel_service.update_user_details_on_panel(
|
||||||
current_local_panel_uuid, {"telegramId": user_id}
|
current_local_panel_uuid,
|
||||||
|
{
|
||||||
|
"telegramId": user_id,
|
||||||
|
"description": "\n".join(
|
||||||
|
[
|
||||||
|
(db_user.username or "") if db_user else "",
|
||||||
|
(db_user.first_name or "") if db_user else "",
|
||||||
|
(db_user.last_name or "") if db_user else "",
|
||||||
|
]
|
||||||
|
),
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
panel_sub_link_id = panel_user_obj_from_api.get(
|
panel_sub_link_id = panel_user_obj_from_api.get(
|
||||||
@@ -356,6 +377,15 @@ class SubscriptionService:
|
|||||||
traffic_limit_bytes=self.settings.trial_traffic_limit_bytes,
|
traffic_limit_bytes=self.settings.trial_traffic_limit_bytes,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Add user description based on Telegram profile
|
||||||
|
panel_update_payload["description"] = "\n".join(
|
||||||
|
[
|
||||||
|
(db_user.username or "") if db_user else "",
|
||||||
|
(db_user.first_name or "") if db_user else "",
|
||||||
|
(db_user.last_name or "") if db_user else "",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
updated_panel_user = await self.panel_service.update_user_details_on_panel(
|
updated_panel_user = await self.panel_service.update_user_details_on_panel(
|
||||||
panel_user_uuid, panel_update_payload
|
panel_user_uuid, panel_update_payload
|
||||||
)
|
)
|
||||||
@@ -498,6 +528,15 @@ class SubscriptionService:
|
|||||||
traffic_limit_bytes=self.settings.user_traffic_limit_bytes,
|
traffic_limit_bytes=self.settings.user_traffic_limit_bytes,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Add user description based on Telegram profile
|
||||||
|
panel_update_payload["description"] = "\n".join(
|
||||||
|
[
|
||||||
|
(db_user.username or "") if db_user else "",
|
||||||
|
(db_user.first_name or "") if db_user else "",
|
||||||
|
(db_user.last_name or "") if db_user else "",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
updated_panel_user = await self.panel_service.update_user_details_on_panel(
|
updated_panel_user = await self.panel_service.update_user_details_on_panel(
|
||||||
panel_user_uuid, panel_update_payload
|
panel_user_uuid, panel_update_payload
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user