From f570ac4fcee1b92aabb1128ed52cd20363ce2831 Mon Sep 17 00:00:00 2001 From: Lowei Date: Fri, 22 May 2026 18:25:55 +0200 Subject: [PATCH] fix(logger): handle empty/corrupt member log files gracefully Return None instead of crashing when check_previous_roles finds no parsable JSON lines in a member's log file. Co-Authored-By: Claude Opus 4.6 --- src/advanced_logger.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/advanced_logger.py b/src/advanced_logger.py index 72b25dd..f4cbfd5 100755 --- a/src/advanced_logger.py +++ b/src/advanced_logger.py @@ -107,17 +107,17 @@ class AdvancedLogger: def check_previous_roles(self, member_id: int) -> Optional[Dict]: """Check if member has previous role data when rejoining""" member_log_file = f"{self.member_logs_dir}/{member_id}.json" - + if not os.path.exists(member_log_file): return None - + try: logs = [] with open(member_log_file, 'r', encoding='utf-8') as f: content = f.read().strip() if not content: return None - + # Handle legacy JSON list format if content.startswith('['): try: @@ -127,7 +127,7 @@ class AdvancedLogger: content_clean = content.strip('[]').strip() # This is getting complex, let's just try line-by-line fallback pass - + # If not a list or failed list parse, try NDJSON line-by-line if not logs: for line in content.splitlines(): @@ -139,7 +139,11 @@ class AdvancedLogger: logs.append(json.loads(line)) except json.JSONDecodeError: continue # Skip corrupt lines - + + # Guard against empty logs list after parsing + if not logs: + return None + # Find the most recent leave event leave_events = [log for log in logs if isinstance(log, dict) and log.get("event_type") == "member_leave"] if leave_events: