diff --git a/bot/handlers/admin/sync_admin.py b/bot/handlers/admin/sync_admin.py index 5525146..1428fe2 100644 --- a/bot/handlers/admin/sync_admin.py +++ b/bot/handlers/admin/sync_admin.py @@ -136,6 +136,23 @@ async def perform_sync(panel_service: PanelApiService, session: AsyncSession, users_uuid_updated += 1 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 panel_expire_at_iso = panel_user_dict.get("expireAt") panel_status = panel_user_dict.get("status", "UNKNOWN") diff --git a/bot/middlewares/profile_sync.py b/bot/middlewares/profile_sync.py index d15cb9c..24d075d 100644 --- a/bot/middlewares/profile_sync.py +++ b/bot/middlewares/profile_sync.py @@ -36,6 +36,24 @@ class ProfileSyncMiddleware(BaseMiddleware): logging.info( 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: logging.error( f"ProfileSyncMiddleware: Failed to sync profile for user {getattr(tg_user, 'id', 'N/A')}: {e}", diff --git a/bot/services/subscription_service.py b/bot/services/subscription_service.py index b349e39..78cf15a 100644 --- a/bot/services/subscription_service.py +++ b/bot/services/subscription_service.py @@ -119,6 +119,11 @@ class SubscriptionService: creation_response = await self.panel_service.create_panel_user( username_on_panel=panel_username_on_panel_standard, 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, default_traffic_limit_bytes=self.settings.user_traffic_limit_bytes, default_traffic_limit_strategy=self.settings.USER_TRAFFIC_STRATEGY, @@ -142,6 +147,11 @@ class SubscriptionService: creation_response = await self.panel_service.create_panel_user( username_on_panel=panel_username_on_panel_standard, 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, default_traffic_limit_bytes=self.settings.user_traffic_limit_bytes, default_traffic_limit_strategy=self.settings.USER_TRAFFIC_STRATEGY, @@ -258,8 +268,19 @@ class SubscriptionService: logging.info( 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( - 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( @@ -356,6 +377,15 @@ class SubscriptionService: 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( panel_user_uuid, panel_update_payload ) @@ -498,6 +528,15 @@ class SubscriptionService: 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( panel_user_uuid, panel_update_payload )