поправил live-status обновление. должно после того, как матч окончен, выставиться правильный статус игры

This commit is contained in:
2025-10-31 18:16:27 +03:00
parent 0b1eb16847
commit dd63bc170e

View File

@@ -168,6 +168,49 @@ def results_consumer():
"data": incoming_status if incoming_status is not None else payload,
}
elif "live-status" in source:
# просто сохраним, как и остальные
latest_data[source] = {
"ts": msg["ts"],
"data": incoming_status if incoming_status is not None else payload,
}
# попытка ДОПОЛНИТЕЛЬНО обновить глобальный STATUS по live-status
try:
ls_data = payload.get("result") or payload # иногда сразу result
# тут нужно посмотреть, какое именно поле у тебя в live-status
# допустим, там есть что-то вроде "status" или "gameStatus"
raw_ls_status = (
ls_data.get("status")
or ls_data.get("gameStatus")
or ls_data.get("state")
)
if raw_ls_status:
raw_ls_status = str(raw_ls_status).lower()
# варианты, которые считаем "матч окончен"
finished_markers = [
"finished",
"result",
"resultconfirmed",
"ended",
"game over",
"final",
]
if any(m in raw_ls_status for m in finished_markers):
# перезатираем глобальный статус — он более актуальный
# если матч сегодня — делаем finished_today, иначе просто finished
from datetime import datetime
if GAME_START_DT and GAME_START_DT.date() == datetime.now().date():
globals()["STATUS"] = "finished_today"
else:
globals()["STATUS"] = "finished"
except Exception as e:
print("results_consumer: live-status postprocess error:", e)
else:
if source == "game":
has_game_already = "game" in latest_data
@@ -1500,9 +1543,35 @@ async def regular_standings():
@app.get("/live_status.json")
async def live_status():
# если матч реально идёт/вот-вот — пытаемся отдать то, что есть
if STATUS in ["live", "live_soon"]:
return [latest_data["live-status"]["data"]["result"]]
ls = latest_data.get("live-status")
if not ls:
# live-status ещё не прилетел
return [{"foulsA": 0, "foulsB": 0}]
raw = ls.get("data")
# 1) если это уже готовый dict и в нём есть result → как было раньше
if isinstance(raw, dict):
# иногда API кладёт всё прямо в root, иногда внутрь result
if "result" in raw and isinstance(raw["result"], dict):
return [raw["result"]]
else:
# отдадим как есть, но в списке, чтобы фронт не сломать
return [raw]
# 2) если это просто строка статуса ("ok" / "no-status" / "error")
if isinstance(raw, str):
return [{
"status": raw
}]
# fallback
return [{"foulsA": 0, "foulsB": 0}]
else:
# матч не идёт — как у тебя было
return [{"foulsA": 0, "foulsB": 0}]