From 4220ff285e2049009e9961c3183b134182ba0bab Mon Sep 17 00:00:00 2001 From: padreug Date: Mon, 10 Nov 2025 19:33:39 +0100 Subject: [PATCH] attempt to fix usernames --- views_api.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/views_api.py b/views_api.py index 548daac..a73465e 100644 --- a/views_api.py +++ b/views_api.py @@ -532,29 +532,41 @@ async def _get_username_from_user_id(user_id: str) -> str: logger.info(f"[USERNAME] Case 1 result: '{result}'") return result - # Case 2: Dashless 32-char UUID - lookup via Castle user settings + # Case 2: Dashless 32-char UUID - lookup via Castle user settings, fallback to LNbits elif len(user_id) == 32 and '-' not in user_id: logger.info(f"[USERNAME] Case 2: Dashless UUID format - looking up in Castle user settings") try: - # Get all Castle users (which have full user_ids) - user_settings = await get_all_user_wallet_settings() - - # Convert dashless to dashed format for comparison + # Convert dashless to dashed format user_id_with_dashes = f"{user_id[0:8]}-{user_id[8:12]}-{user_id[12:16]}-{user_id[16:20]}-{user_id[20:32]}" logger.info(f"[USERNAME] Converted to dashed format: {user_id_with_dashes}") - # Find matching user + # Try Castle settings first + user_settings = await get_all_user_wallet_settings() for setting in user_settings: if setting.id == user_id_with_dashes: logger.info(f"[USERNAME] Found matching user in Castle settings") - # Get username from LNbits user = await get_user(setting.id) result = user.username if user and user.username else f"User-{user_id[:8]}" - logger.info(f"[USERNAME] Case 2 result (found): '{result}'") + logger.info(f"[USERNAME] Case 2 result (from Castle): '{result}'") return result - # No matching user found - logger.info(f"[USERNAME] No matching user found in Castle settings") + # Not in Castle settings - try LNbits database directly + logger.info(f"[USERNAME] Not in Castle settings, querying LNbits database directly") + from lnbits.db import Database + db = Database("database") + async with db.connect() as conn: + row = await conn.fetchone( + "SELECT id, username FROM accounts WHERE id = :user_id LIMIT 1", + {"user_id": user_id_with_dashes} + ) + logger.info(f"[USERNAME] Database query result: {row}") + if row and row["username"]: + result = row["username"] + logger.info(f"[USERNAME] Case 2 result (from LNbits DB): '{result}'") + return result + + # User doesn't exist anywhere + logger.info(f"[USERNAME] User not found in LNbits database either") result = f"User-{user_id[:8]}" logger.info(f"[USERNAME] Case 2 result (not found): '{result}'") return result