""" Minecraft Bedrock Edition version checker - tracks Windows releases """ import requests import json from datetime import datetime # Bedrock version tracking endpoints # Using third-party services that track Bedrock version history BEDROCK_VERSIONS_URL = "https://raw.githubusercontent.com/pmmp/PocketMine-MP/master/src/VersionInfo.php" # Alternative: Direct launcher check (if available) BEDROCK_LAUNCHER_API = "https://launcher.mojang.com/v1/products/bedrock-launcher/latest" TIMEOUT = 10 def get_bedrock_versions(): """ Fetch Bedrock version information. Attempts multiple sources for reliability. Returns: Dict with version info or None """ # Try the launcher API first try: response = requests.get(BEDROCK_LAUNCHER_API, timeout=TIMEOUT) if response.status_code == 200: data = response.json() if data: return data except Exception as e: print(f"[BEDROCK_CHECKER] Launcher API error: {e}") # Fallback: try Windows version manifest try: # Query Microsoft's update service for Bedrock response = requests.get( "https://launcher.mojang.com/v1/products/bedrock-launcher/16/latest", headers={"Accept": "application/json"}, timeout=TIMEOUT ) if response.status_code == 200: return response.json() except Exception as e: print(f"[BEDROCK_CHECKER] Manifest error: {e}") return None def parse_bedrock_version(response_data): """ Parse response data into standardized version format. Args: response_data: JSON response from version endpoint Returns: Dict with keys: id, version, type, releaseTime """ if not response_data: return None try: # Extract version information from different possible response formats version = response_data.get('version') or response_data.get('latest') if not version: return None return { "id": version, "version": version, "type": "bedrock-windows", "releaseTime": response_data.get('releaseTime', datetime.utcnow().isoformat() + "+00:00"), "platform": "windows" } except Exception as e: print(f"[BEDROCK_CHECKER] Parse error: {e}") return None def get_latest_bedrock_release(): """ Get the latest Bedrock Windows release. Returns: Dict with version info or None """ try: version_data = get_bedrock_versions() return parse_bedrock_version(version_data) except Exception as e: print(f"[BEDROCK_CHECKER] Error getting latest release: {e}") return None def compare_versions(v1, v2): """ Compare two version strings (semantic versioning). Args: v1, v2: Version strings like "1.20.0" Returns: True if v1 > v2, False otherwise """ try: parts1 = [int(x) for x in v1.split('.')] parts2 = [int(x) for x in v2.split('.')] # Pad with zeros while len(parts1) < len(parts2): parts1.append(0) while len(parts2) < len(parts1): parts2.append(0) return parts1 > parts2 except: # Fallback to string comparison return v1 > v2