diff --git a/homepage/html/index.html b/homepage/html/index.html index 0fa203e..55cc891 100644 --- a/homepage/html/index.html +++ b/homepage/html/index.html @@ -38,8 +38,7 @@ Hardware: Versions: • Minecraft: {{server_details["versions"]["minecraft"]}} -• Paper: {{server_details["versions"]["paper"]}} -• API: {{server_details["versions"]["api"]}} +• Server: {{server_details["versions"]["paper"]}} Datapacks: % for datapack in server_details["datapacks"]: diff --git a/homepage/main.py b/homepage/main.py index 3b102b6..a1b8204 100644 --- a/homepage/main.py +++ b/homepage/main.py @@ -1,9 +1,10 @@ #!/usr/bin/env python3 -from bottle import route, run, static_file, template -from os import listdir, sysconf +from mcstatus import MinecraftServer from os.path import join as pathjoin +from bottle import route, run, static_file, template from random import random, choice from mcrcon import MCRcon +from os import listdir, sysconf import configparser import platform import requests @@ -48,29 +49,14 @@ def callback(path): return static_file(path, root="static") def currentPlayerData(): + status = server_status() player = {} - with MCRcon(CONFIG["mcrcon"]["host"], CONFIG["mcrcon"]["password"], port=int(CONFIG["mcrcon"]["port"])) as mcr: - resp = mcr.command("list uuids") - resp = resp.split(":") - player_string = resp[1].strip() - if player_string != "": - player_list = player_string.split(",") - else: - player_list = [] - player_list = list(map(lambda x: x.strip(), player_list)) - count_regex = re.match("There are ([0-9]+) of a max of ([0-9]+) players online", resp[0]) - num_players = count_regex.group(1) - max_players = count_regex.group(2) - player["count"] = {} - player["count"]["current"] = num_players - player["count"]["max"] = max_players + player["count"]["current"] = status.players.online + player["count"]["max"] = status.players.max player["players"] = [] - for p in player_list: - data = p.split(" ") - name = data[0].strip() - uuid = data[1].strip().replace("(", "").replace(")", "") - player["players"].append({"name": name, "uuid": uuid}) + for p in status.players.sample: + player["players"].append({"name": p.name, "uuid": p.id}) return player def fetchSkin(uuid): @@ -107,17 +93,10 @@ def hardware_info(): return {"cpu": processor, "ram": mem_pretty} def paper_version(): - with MCRcon(CONFIG["mcrcon"]["host"], CONFIG["mcrcon"]["password"], port=int(CONFIG["mcrcon"]["port"])) as mcr: - for i in range(0, 10): - resp = mcr.command("version") - if not "please wait" in resp: - break - match = re.match(".*(This server is running Paper version )(.*) \((.*)\) \(Implementing API version (.*)\).*", resp) - paper_version = match.group(2) - mc_version = match.group(3) - mc_version = mc_version.split(":")[1].strip() - api_version = match.group(4) - return {"paper": paper_version, "minecraft": mc_version, "api": api_version} + status = server_status() + paper_version = status.version.name + mc_version = status.version.protocol + return {"paper": paper_version, "minecraft": mc_version} def datapack_info(): with MCRcon(CONFIG["mcrcon"]["host"], CONFIG["mcrcon"]["password"], port=int(CONFIG["mcrcon"]["port"])) as mcr: @@ -141,6 +120,11 @@ def server_details(): datapacks = datapack_info() return {"hardware": hardware, "versions": versions, "datapacks": datapacks} +def server_status(): + server = MinecraftServer.lookup(CONFIG["mcrcon"]["host"]) + status = server.status() + return status + CONFIG = parseConfig() run(host="localhost", port=8080) diff --git a/homepage/requirements.txt b/homepage/requirements.txt index f3b4441..76b95f1 100644 --- a/homepage/requirements.txt +++ b/homepage/requirements.txt @@ -1,2 +1,3 @@ bottle==0.12.19 mcrcon==0.6.0 +mcstatus==5.2.0