From 84a09ad9be53aef36545e448682894121ef5f251 Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Sat, 15 Apr 2023 20:47:35 +0200 Subject: [PATCH] Improve player display --- app/classes/controllers/servers_controller.py | 20 ++++++ app/classes/shared/helpers.py | 20 ++++++ app/classes/web/panel_handler.py | 29 ++++++++- .../templates/panel/parts/server_players.html | 61 +++++++++++++++++++ .../panel/server_admin_controls.html | 9 ++- .../templates/panel/server_schedules.html | 39 ++++-------- 6 files changed, 149 insertions(+), 29 deletions(-) create mode 100644 app/frontend/templates/panel/parts/server_players.html diff --git a/app/classes/controllers/servers_controller.py b/app/classes/controllers/servers_controller.py index 608a1ced..aebf4054 100644 --- a/app/classes/controllers/servers_controller.py +++ b/app/classes/controllers/servers_controller.py @@ -513,6 +513,26 @@ class ServersController(metaclass=Singleton): # ********************************************************************************** # Servers Helpers Methods # ********************************************************************************** + @staticmethod + def get_cached_players(server_id): + srv = ServersController().get_server_instance_by_id(server_id) + stats = srv.stats_helper.get_server_stats() + server_path = stats["server_id"]["path"] + path = os.path.join(server_path, "usercache.json") + + try: + with open( + Helpers.get_os_understandable_path(path), encoding="utf-8" + ) as file: + content = file.read() + file.close() + except Exception as ex: + print(ex) + return None + + return json.loads(content) + + @staticmethod def get_banned_players(server_id): srv = ServersController().get_server_instance_by_id(server_id) diff --git a/app/classes/shared/helpers.py b/app/classes/shared/helpers.py index cf108bcd..21556ef3 100644 --- a/app/classes/shared/helpers.py +++ b/app/classes/shared/helpers.py @@ -1255,3 +1255,23 @@ class Helpers: if region == "EN": return "en" return lang + "-" + region + + @staticmethod + def get_player_avatar(uuid): + mojang_response = requests.get( + f"https://sessionserver.mojang.com/session/minecraft/profile/{uuid}" + ) + if mojang_response.status_code == 200: + uuid_profile = mojang_response.json() + profile_properties = uuid_profile["properties"] + for property in profile_properties: + if property["name"] == "textures": + decodedBytes = base64.b64decode(property["value"]) + decodedStr = decodedBytes.decode("utf-8") + textureJson = json.loads(decodedStr) + skin_url = textureJson["textures"]["SKIN"]["url"] + skin_response = requests.get(skin_url, stream=True) + if skin_response.status_code == 200: + return base64.b64encode(skin_response.content) + else: + return diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index 168c91ce..c24582bf 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -780,7 +780,34 @@ class PanelHandler(BaseHandler): ): if not superuser: self.redirect("/panel/error?error=Unauthorized access") - page_data["banned_players"] = get_banned_players_html() + page_data["banned_players_html"] = get_banned_players_html() + page_data[ + "banned_players" + ] = self.controller.servers.get_banned_players(server_id) + page_data[ + "cached_players" + ] = self.controller.servers.get_cached_players(server_id) + + page_data["all_players"] = [] + for player in page_data["cached_players"]: + if player["name"] in page_data["get_players"]: + player["status"] = "online" + else: + player["status"] = "offline" + temp_date = datetime.datetime.strptime( + player["expiresOn"], "%Y-%m-%d %H:%M:%S %z" + ) + player["last_seen"] = ( + temp_date - datetime.timedelta(30, 0, 0, 0, 0, 0, 0) + ).strftime("%Y/%m/%d %H:%M:%S") + player["avatar"] = Helpers.get_player_avatar(player["uuid"]) + page_data["all_players"].append(player) + for player in page_data["banned_players"]: + player["banned"] = True + temp_date = datetime.datetime.strptime( + player["created"], "%Y-%m-%d %H:%M:%S %z" + ) + player["banned_on"] = (temp_date).strftime("%Y/%m/%d %H:%M:%S") template = f"panel/server_{subpage}.html" diff --git a/app/frontend/templates/panel/parts/server_players.html b/app/frontend/templates/panel/parts/server_players.html new file mode 100644 index 00000000..3ecc5efb --- /dev/null +++ b/app/frontend/templates/panel/parts/server_players.html @@ -0,0 +1,61 @@ +
+

{{ translate('serverPlayerManagement', 'players', data['lang']) }}:

+ + + + + + + + + + {% for player in data['all_players'] %} + + + {% if player['status'] == 'online' %} + + {% elif player['status'] == 'offline' %} + + {% end %} + + + {% end %} + +
PlayerStatusActions
+ {{ player['name'] }} + {{ player['status'] }} Last connexion : {{ player['last_seen'] }} + {% if data['server_stats']['running'] %} + + + + + {% else %} + Unavailable (Server Offline) + {% end %} +
+
+
+

{{ translate('serverPlayerManagement', 'bannedPlayers', data['lang']) }}:

+ + + + + + + + + + + {% for player in data['banned_players'] %} + + + + + + + {% end %} + +
PlayerStatusReasonActions
{{ player['name'] }}Banned on {{ player['banned_on'] }}Banned by : {{ player['source'] }}
Reason : {{ player['reason'] }}
+ +
+
\ No newline at end of file diff --git a/app/frontend/templates/panel/server_admin_controls.html b/app/frontend/templates/panel/server_admin_controls.html index 02e28356..ed255e8b 100644 --- a/app/frontend/templates/panel/server_admin_controls.html +++ b/app/frontend/templates/panel/server_admin_controls.html @@ -39,6 +39,13 @@
+ {% include "parts/server_players.html %} +
+ +
+ +
+