diff --git a/main.py b/main.py index 4100c0b7..46d34edb 100644 --- a/main.py +++ b/main.py @@ -1752,10 +1752,17 @@ async def get_combat_stats(character_name: str): ) if not row: return {"character_name": character_name, "session": None, "lifetime": None} + sd = row["stats_data"] + if isinstance(sd, str): + import json as _json + try: + sd = _json.loads(sd) + except Exception: + sd = None return { "character_name": character_name, "session": None, - "lifetime": row["stats_data"], + "lifetime": sd, } @@ -1776,10 +1783,15 @@ async def get_all_combat_stats(): rows = await database.fetch_all("SELECT character_name, stats_data FROM combat_stats") for r in rows: if r["character_name"] not in seen: + sd = r["stats_data"] + if isinstance(sd, str): + import json as _json + try: sd = _json.loads(sd) + except Exception: sd = None results.append({ "character_name": r["character_name"], "session": None, - "lifetime": r["stats_data"], + "lifetime": sd, }) results.sort(key=lambda x: x["character_name"]) return {"stats": results} @@ -3028,7 +3040,18 @@ async def ws_receive_snapshots( "SELECT stats_data FROM combat_stats WHERE character_name = :n", {"n": char}, ) - _combat_lifetime_cache[char] = row["stats_data"] if row else {} + if row and row["stats_data"]: + sd = row["stats_data"] + # DB may return JSON as string — parse if needed + if isinstance(sd, str): + import json as _json + try: + sd = _json.loads(sd) + except Exception: + sd = {} + _combat_lifetime_cache[char] = sd + else: + _combat_lifetime_cache[char] = {} lifetime = _combat_merge_into_lifetime( _combat_lifetime_cache[char], delta