from get_background import download_image_with_httpx_auto_redirect from create_image import create_image # Java版查询模块 from mc_status_api.JavaServerStatus import java_status # 基岩版查询模块 from mc_status_api.BedrockServerStatus import bedrock_status # 此API优先解析 srv 记录 from mc_status_api.dnslookup import dns_lookup # 格式化文本 from mc_status_api.FormatData import format_java_data, format_bedrock_data, format_index, format_java_index, format_bedrock_index import base64 import asyncio BACKGROUND_URL = "https://www.loliapi.com/acg/" async def generate_java_status_image(addr: str): loop = asyncio.get_event_loop() try: ip, type = await loop.run_in_executor(None, dns_lookup, addr) status = await loop.run_in_executor(None, java_status, ip) data = format_java_data(ip, type, status) except Exception as e: print(f"查询服务器时出错: {e}") return background_data = await download_image_with_httpx_auto_redirect(BACKGROUND_URL) if not background_data: background_data = None motd_list = data['motd'].split("\n") text_list = [ f"ip: {data['ip']}", f"type: {data['type']}", f"version: {data['version']}", f"latency: {round(data['latency'], 2)} ms", f"players: {data['players']['online']}/{data['players']['max']}", ] if status.icon: image = await loop.run_in_executor(None, create_image, background_data, base64.b64decode(status.icon.split(",")[1]), text_list, motd_list) else: image = await loop.run_in_executor(None, create_image, background_data, None, text_list, motd_list) return image if __name__ == "__main__": image = asyncio.run(generate_java_status_image("mc.hypixel.net")) if image: image.save("output_image.png")