offical_link.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """
  2. 生成官网链接
  3. """
  4. import re
  5. from homepagebuilder.interfaces import script
  6. from homepagebuilder.core.formatter import format_code
  7. SNAPSHOT_PATTERN = re.compile(r'^[0-9]{2}[w|W][0-9]{2}[A-Fa-f]$')
  8. NEW_SNAPSHOT_PATTERN = re.compile(r'^[0-9]{2}(\.[0-9]+)*-snapshot-[0-9]+$')
  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'^1\.[0-9]+(\.[0-9]+)?$')
  12. def gen_official_link(vid:str):
  13. '''生成官网链接'''
  14. if re.match(SNAPSHOT_PATTERN,vid):
  15. return f'https://minecraft.net/article/minecraft-snapshot-{vid.lower()}'
  16. if re.match(NEW_SNAPSHOT_PATTERN,vid):
  17. return f'https://minecraft.net/article/minecraft-{vid.replace(".","-")}'
  18. if re.match(PRE_RELEASE_PATTERN,vid):
  19. version,sub=vid.split('-pre')
  20. return f'https://minecraft.net/article/minecraft-{version.replace(".","-")}-pre-release-{sub}'
  21. if re.match(RELEASE_CANDIDATE_PATTERN,vid):
  22. version,sub=vid.split('-rc')
  23. return f'https://minecraft.net/article/minecraft-{version.replace(".","-")}-release-candidate-{sub}'
  24. if re.match(RELEASE_PATTERN,vid):
  25. return f'https://minecraft.net/article/minecraft-java-edition-{vid.replace(".","-")}'
  26. return ''
  27. @script('GetLink')
  28. def get_link(link_type,link_key=None,**kwargs):
  29. card = kwargs['card']
  30. context = kwargs['context']
  31. name:str = card['version-id']
  32. if card.get('wip') == 'true' and link_type != 'Official':
  33. return ''
  34. data = context.data[f'{link_type}Link']
  35. if link_key:
  36. return data[link_key]
  37. name = format_code(name,card,context)
  38. if link_type == 'Official' and name not in data:
  39. return gen_official_link(name)
  40. result = data.get(name)
  41. return result if result else ""