check_mcv.py 3.4 KB

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