""" Minecraft version checker - fetches latest releases from Mojang's launcher manifest """ import requests import json from datetime import datetime MANIFEST_URL = "https://launchermeta.mojang.com/mc/game/version_manifest_v2.json" TIMEOUT = 10 def get_minecraft_versions(): """ Fetch all Minecraft versions from the official launcher manifest. Returns dict with version info categorized by type. """ try: response = requests.get(MANIFEST_URL, timeout=TIMEOUT) if response.status_code == 200: return response.json() except Exception as e: print(f"[MINECRAFT_CHECKER] Error fetching manifest: {e}") return None def get_latest_releases(release_types=None): """ Get latest releases of specified types. Args: release_types: List of types like ["release", "snapshot"] If None, returns only the latest release Returns: List of dicts with version info """ if release_types is None: release_types = ["release"] manifest = get_minecraft_versions() if not manifest: return [] latest_versions = [] # Get the latest version of each type for release_type in release_types: if release_type in manifest["latest"]: version_id = manifest["latest"][release_type] # Find the full version info for version in manifest["versions"]: if version["id"] == version_id: latest_versions.append(version) break return latest_versions def get_all_versions_of_type(release_type): """ Get all versions of a specific type. Args: release_type: Type like "release", "snapshot", etc. Returns: List of version dicts """ manifest = get_minecraft_versions() if not manifest: return [] versions = [] for version in manifest["versions"]: if version["type"] == release_type: versions.append(version) return versions def parse_release_date(iso_date_str): """ Parse ISO format date string to readable format. Args: iso_date_str: Date in format "2024-06-13T11:27:32+00:00" Returns: Formatted date string like "June 13, 2024" """ try: # Parse ISO format dt = datetime.fromisoformat(iso_date_str.replace("+00:00", "")) return dt.strftime("%B %d, %Y") except: return iso_date_str