-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget_file.py
95 lines (77 loc) · 3.37 KB
/
get_file.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import argparse
import requests
import os
minecraft_version_url = "http://launchermeta.mojang.com/mc/game/version_manifest.json"
minecraft_server_filename = "minecraft_server.jar"
# 發送 HTTP 請求獲取版本清單
def get_version_manifest():
response = requests.get(minecraft_version_url)
data = response.json()
return data
# 根據版本清單取得下載連結
def get_download_link(version_manifest, version):
for v in version_manifest['versions']:
if v['id'] == version:
url = v['url']
response = requests.get(url)
data = response.json()
if 'downloads' in data and 'server' in data['downloads']:
return data['downloads']['server']['url']
else:
return None
return None
# 下載 Minecraft 伺服器 JAR 檔案
def download_minecraft_server(download_link):
response = requests.get(download_link)
# 檢查目錄是否存在,如果不存在就創建
server_directory = "server"
if not os.path.exists(server_directory):
os.makedirs(server_directory)
# 將檔案保存在 server 目錄下
file_path = os.path.join(server_directory, minecraft_server_filename)
with open(file_path, 'wb') as file:
file.write(response.content)
print(f"{minecraft_server_filename} 下載完成,保存在 {server_directory} 目錄中")
# 列印所有可用的穩定版本
def print_all_versions(version_manifest):
for v in version_manifest['versions']:
if v['type'] == 'release':
print(v['id'])
# 主程式流程
def main():
# 解析命令行引數
parser = argparse.ArgumentParser(description="Get Minecraft server download link.")
parser.add_argument("--version", help="Minecraft version")
parser.add_argument("-d", "--download", action="store_true", help="Download the server JAR file")
parser.add_argument("--all_ver", action="store_true", help="Print all available stable versions")
args = parser.parse_args()
target_version = args.version
download_requested = args.download
print_all_versions_requested = args.all_ver
# 如果未提供版本引數,自動選擇最新的穩定版本
if not target_version and not print_all_versions_requested:
version_manifest = get_version_manifest()
for v in version_manifest['versions']:
if v['type'] == 'release':
target_version = v['id']
break
# 取得版本清單
version_manifest = get_version_manifest()
# 如果使用者指定了 --all_ver,則列印所有可用的穩定版本
if print_all_versions_requested:
print_all_versions(version_manifest)
return
# 取得下載連結
download_link = get_download_link(version_manifest, target_version)
# 輸出下載連結或版本不存在的訊息
if download_link:
print(f"The download link for Minecraft {target_version} server is:")
print(download_link)
# 如果使用者指定了 -d,則執行下載
if download_requested:
download_minecraft_server(download_link)
print(f"{minecraft_server_filename} 下載完成")
else:
print(f"Error: Minecraft {target_version} server version does not exist.")
if __name__ == "__main__":
main()