check_mcv.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. INIT_MARKDOWN = '---\nversion-image-link: https://example.com\nnot_finished: true\n---\n'
  11. require_update = False
  12. def get_version_type(vid:str):
  13. if re.match(SNAPSHOT_PATTERN,vid):
  14. return 'Snapshot'
  15. if re.match(PRE_RELEASE_PATTERN,vid):
  16. return 'Pre-Release'
  17. if re.match(RELEASE_CANDIDATE_PATTERN,vid):
  18. return 'Release-Candidate'
  19. if re.match(RELEASE_PATTERN,vid):
  20. return 'Release'
  21. return 'Others'
  22. def update_library(version_libloc:str,ver_type:str,ver_id:str):
  23. filepath = f'{version_libloc}{ver_type}{os.sep}{ver_id}.md'
  24. if os.path.exists(filepath):
  25. return False,'存在于版本库,无需更改'
  26. else:
  27. with open(filepath, "w") as file:
  28. file.write(INIT_MARKDOWN)
  29. require_update = True
  30. return True,'版本库内未找到,已添加'
  31. try:
  32. response = requests.get(LAUNCHER_MANIFSET_URL)
  33. version_mainfest = json.loads(response.content)
  34. except Exception as e:
  35. print(f'error_log={e.with_traceback()}')
  36. exit(1)
  37. latest_snapshot_id = version_mainfest['latest']['snapshot']
  38. latest_release_id = version_mainfest['latest']['release']
  39. latest_snapshot_type = get_version_type(latest_snapshot_id)
  40. latest_release_type = get_version_type(latest_release_id)
  41. #print(f'● 最新 {latest_release_type} 版: {latest_release_id}')
  42. #print(f'● 最新 {latest_snapshot_type} 版: {latest_snapshot_id}')
  43. dir_location = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  44. version_lib_location = f'{dir_location}{os.sep}Libraries{os.sep}Versions{os.sep}'
  45. release_require_update,latest_release_act = \
  46. update_library(version_lib_location,latest_release_type,latest_release_id)
  47. snapshot_require_update,latest_snapshot_act = \
  48. update_library(version_lib_location,latest_snapshot_type,latest_snapshot_id)
  49. print(f'latest_release_type={latest_release_type}')
  50. print(f'latest_snapshot_type={latest_snapshot_type}')
  51. print(f'latest_release_id={latest_release_id}')
  52. print(f'latest_snapshot_id={latest_snapshot_id}')
  53. print(f'latest_release_act={latest_release_act}')
  54. print(f'latest_snapshot_act={latest_snapshot_act}')
  55. print(f'require_update={release_require_update or snapshot_require_update}')