check_mcv.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import json
  2. import requests
  3. import re
  4. import os
  5. from pathlib import Path
  6. LAUNCHER_MANIFSET_URL = 'https://piston-meta.mojang.com/mc/game/version_manifest.json'
  7. SNAPSHOT_PATTERN = re.compile(r'^\d{2}[w|W][0-9]{2}[A-Fa-f]$')
  8. NEW_SNAPSHOT_PATTERN = re.compile(r'^\d{2}-snapshot-\d+$')
  9. PRE_RELEASE_PATTERN = re.compile(r'^.*-pre[0-9]+$')
  10. RELEASE_CANDIDATE_PATTERN = re.compile(r'^.*-rc[0-9]+$')
  11. RELEASE_PATTERN = re.compile(r'^\d{1,2}\.\d+(\.\d+)?$')
  12. CURRENT_MAJOR_DEVELOPING_VERSION = "1.21"
  13. CURRENT_MINOR_DEVELOPING_VERSION = "1.21.11"
  14. require_update = False
  15. def get_version_type(vid:str):
  16. if re.match(SNAPSHOT_PATTERN,vid) or re.match(NEW_SNAPSHOT_PATTERN,vid):
  17. return 'Snapshot'
  18. if re.match(PRE_RELEASE_PATTERN,vid):
  19. return 'Pre-Release'
  20. if re.match(RELEASE_CANDIDATE_PATTERN,vid):
  21. return 'Release-Candidate'
  22. if re.match(RELEASE_PATTERN,vid):
  23. return 'Release'
  24. return 'Others'
  25. def generate_filepath(ver_type:str, ver_id:str) -> Path:
  26. major_id = ver_id.split("-")[0]
  27. if ver_id[0] == '1':
  28. return Path(f'{major_id[:4]}/{major_id}/{ver_type.lower()}/{ver_id}.md')
  29. return Path(f'{major_id[:2]}/{major_id}/{ver_type.lower()}/{ver_id}.md')
  30. #return Path(f'Others/{ver_id}.md')
  31. def update_library(version_mainfest, version_libloc:str, ver_type:str, ver_id:str):
  32. #gen content
  33. content = '---\n'
  34. content += 'version-image-link: null\n'
  35. #content += 'version-image-link-fallback: null\n'
  36. content += 'wip: true\n'
  37. content += f'server-jar: {get_server_jar(version_mainfest, ver_id)}\n'
  38. content += 'translator: null\n'
  39. content += f"cats: ['{CURRENT_MAJOR_DEVELOPING_VERSION}','{CURRENT_MINOR_DEVELOPING_VERSION}']\n"
  40. content += '---\n'
  41. #write file
  42. filepath = Path(version_libloc) / generate_filepath(ver_type, ver_id)
  43. if os.path.exists(filepath):
  44. #print(f'版本库内已存在 {ver_type} 版 {ver_id} 的文件,跳过添加')
  45. return False
  46. else:
  47. with open(filepath.absolute(), "w", encoding='UTF-8') as file:
  48. file.write(content)
  49. #print(f'已添加 {ver_type} 版 {ver_id} 的文件到版本库')
  50. return True
  51. def get_server_jar(version_mainfest,version_id):
  52. versions = version_mainfest.get('versions')
  53. for version in versions:
  54. if version['id'] == version_id:
  55. response = requests.get(version['url'])
  56. return json.loads(response.content)['downloads']['server']['url']
  57. return None
  58. try:
  59. response = requests.get(LAUNCHER_MANIFSET_URL)
  60. VERSION_MAINFEST = json.loads(response.content)
  61. except Exception as e:
  62. import traceback
  63. print(f'error_log={traceback.format_exc()}')
  64. exit(1)
  65. def main():
  66. latest_snapshot_id = VERSION_MAINFEST['latest']['snapshot']
  67. latest_release_id = VERSION_MAINFEST['latest']['release']
  68. latest_snapshot_type = get_version_type(latest_snapshot_id)
  69. latest_release_type = get_version_type(latest_release_id)
  70. #print(f'● 最新 {latest_release_type} 版: {latest_release_id}')
  71. #print(f'● 最新 {latest_snapshot_type} 版: {latest_snapshot_id}')
  72. dir_location = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  73. version_lib_location = f'{dir_location}{os.sep}Project{os.sep}libraries{os.sep}Versions{os.sep}'
  74. release_require_update = \
  75. update_library(VERSION_MAINFEST,version_lib_location,
  76. latest_release_type,latest_release_id)
  77. snapshot_require_update = \
  78. update_library(VERSION_MAINFEST,version_lib_location,
  79. latest_snapshot_type,latest_snapshot_id)
  80. print(f'latest_release_type={latest_release_type}')
  81. print(f'latest_snapshot_type={latest_snapshot_type}')
  82. print(f'latest_release_id={latest_release_id}')
  83. print(f'latest_snapshot_id={latest_snapshot_id}')
  84. print(f'require_update={release_require_update or snapshot_require_update}')
  85. if __name__ == '__main__':
  86. main()