53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
import requests
|
|
import json
|
|
import os
|
|
|
|
LATEST = "latest"
|
|
RELEASE = "release"
|
|
SNAPSHOT = "snapshot"
|
|
REQUESTED_VERSION = os.getenv("SERVER_VERSION", LATEST)
|
|
JARFILE = "server.jar"
|
|
|
|
def get_latest_version(latest):
|
|
return latest.get(RELEASE)
|
|
|
|
def get_version_data(versions, latest, id):
|
|
if id == LATEST:
|
|
id = get_latest_version(latest)
|
|
|
|
result = list(filter(
|
|
lambda item: item.get('id') == id,
|
|
versions
|
|
))
|
|
if len(result) == 1:
|
|
return result[0]
|
|
elif len(result) > 1:
|
|
raise ValueError(f"Version {id} didn't return 1 result, it returned {len(result)}!")
|
|
else:
|
|
raise ValueError(f"Version {id} had no matches.")
|
|
|
|
def get_metadata_from_version(version):
|
|
metadata = requests.get(version.get('url'))
|
|
return json.loads(metadata.text)
|
|
|
|
def get_server_url_from_metadata(metadata):
|
|
return metadata['downloads']['server']['url']
|
|
|
|
def write_server_jar(file):
|
|
with open(JARFILE, "wb") as f:
|
|
return f.write(file)
|
|
|
|
if __name__ == "__main__":
|
|
version_manifest = requests.get("https://launchermeta.mojang.com/mc/game/version_manifest_v2.json")
|
|
version_json = json.loads(version_manifest.text)
|
|
versions = version_json.get('versions')
|
|
latest = version_json.get(LATEST)
|
|
|
|
print(f"Attempting to get version {REQUESTED_VERSION}.")
|
|
version = get_version_data(versions, latest, REQUESTED_VERSION)
|
|
metadata = get_metadata_from_version(version)
|
|
url = get_server_url_from_metadata(metadata)
|
|
print(f"Downloading from URL for {REQUESTED_VERSION} at {url}.")
|
|
server_jar = requests.get(url)
|
|
write_server_jar(server_jar.content)
|