From 4a0a65d60439f21ab6ae959f89c1a795637e128c Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 9 Dec 2025 00:45:02 +0100 Subject: [PATCH] WebHost: add played game to static tracker (#5731) --- WebHostLib/api/tracker.py | 23 ++++++++++++++++++++--- docs/webhost api.md | 18 ++++++++++++++++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/WebHostLib/api/tracker.py b/WebHostLib/api/tracker.py index 36692af426..1e6e02bee7 100644 --- a/WebHostLib/api/tracker.py +++ b/WebHostLib/api/tracker.py @@ -58,6 +58,12 @@ class PlayerLocationsTotal(TypedDict): total_locations: int +class PlayerGame(TypedDict): + team: int + player: int + game: str + + @api_endpoints.route("/tracker/") @cache.memoize(timeout=60) def tracker_data(tracker: UUID) -> dict[str, Any]: @@ -80,7 +86,8 @@ def tracker_data(tracker: UUID) -> dict[str, Any]: """Slot aliases of all players.""" for team, players in all_players.items(): for player in players: - player_aliases.append({"team": team, "player": player, "alias": tracker_data.get_player_alias(team, player)}) + player_aliases.append( + {"team": team, "player": player, "alias": tracker_data.get_player_alias(team, player)}) player_items_received: list[PlayerItemsReceived] = [] """Items received by each player.""" @@ -94,7 +101,8 @@ def tracker_data(tracker: UUID) -> dict[str, Any]: for team, players in all_players.items(): for player in players: player_checks_done.append( - {"team": team, "player": player, "locations": sorted(tracker_data.get_player_checked_locations(team, player))}) + {"team": team, "player": player, + "locations": sorted(tracker_data.get_player_checked_locations(team, player))}) total_checks_done: list[TeamTotalChecks] = [ {"team": team, "checks_done": checks_done} @@ -144,7 +152,8 @@ def tracker_data(tracker: UUID) -> dict[str, Any]: """The current client status for each player.""" for team, players in all_players.items(): for player in players: - player_status.append({"team": team, "player": player, "status": tracker_data.get_player_client_status(team, player)}) + player_status.append( + {"team": team, "player": player, "status": tracker_data.get_player_client_status(team, player)}) return { "aliases": player_aliases, @@ -207,12 +216,20 @@ def static_tracker_data(tracker: UUID) -> dict[str, Any]: player_locations_total.append( {"team": team, "player": player, "total_locations": len(tracker_data.get_player_locations(player))}) + player_game: list[PlayerGame] = [] + """The played game per player slot.""" + for team, players in all_players.items(): + for player in players: + player_game.append({"team": team, "player": player, "game": tracker_data.get_player_game(player)}) + return { "groups": groups, "datapackage": tracker_data._multidata["datapackage"], "player_locations_total": player_locations_total, + "player_game": player_game, } + # It should be exceedingly rare that slot data is needed, so it's separated out. @api_endpoints.route("/slot_data_tracker/") @cache.memoize(timeout=300) diff --git a/docs/webhost api.md b/docs/webhost api.md index 0482113484..1229704b9c 100644 --- a/docs/webhost api.md +++ b/docs/webhost api.md @@ -385,6 +385,8 @@ Will provide a dict of static tracker data with the following keys: - This hash can then be sent to the datapackage API to receive the appropriate datapackage as necessary - The number of checks found vs. total checks available per player (`player_locations_total`) - Same logic as the multitracker template: found = len(player_checks_done.locations) / total = player_locations_total.total_locations (all available checks). +- The game each player is playing (`player_game`) + - Provided as a list of objects with `team`, `player`, and `game`. Example: ```json @@ -409,10 +411,10 @@ Example: ], "datapackage": { "Archipelago": { - "checksum": "ac9141e9ad0318df2fa27da5f20c50a842afeecb", + "checksum": "ac9141e9ad0318df2fa27da5f20c50a842afeecb" }, "The Messenger": { - "checksum": "6991cbcda7316b65bcb072667f3ee4c4cae71c0b", + "checksum": "6991cbcda7316b65bcb072667f3ee4c4cae71c0b" } }, "player_locations_total": [ @@ -427,6 +429,18 @@ Example: "total_locations": 20 } ], + "player_game": [ + { + "team": 0, + "player": 1, + "game": "Archipelago" + }, + { + "team": 0, + "player": 2, + "game": "The Messenger" + } + ] } ```