2022-04-01 14:55:21 +00:00
|
|
|
|
import re
|
2021-02-01 15:13:11 +00:00
|
|
|
|
import traceback
|
2022-04-01 14:55:21 +00:00
|
|
|
|
from urllib.parse import quote
|
2021-09-10 18:05:27 +00:00
|
|
|
|
|
|
|
|
|
import ujson as json
|
2022-04-01 14:55:21 +00:00
|
|
|
|
from bs4 import BeautifulSoup
|
2022-06-12 07:07:53 +00:00
|
|
|
|
from google_play_scraper import app as google_play_scraper
|
2021-02-01 15:13:11 +00:00
|
|
|
|
|
2022-04-01 14:55:21 +00:00
|
|
|
|
from config import Config
|
2021-10-24 10:55:45 +00:00
|
|
|
|
from core.component import on_schedule
|
2022-07-31 08:27:58 +00:00
|
|
|
|
from core.elements import FetchTarget, IntervalTrigger
|
2021-08-04 16:14:23 +00:00
|
|
|
|
from core.logger import Logger
|
2023-01-31 11:03:14 +00:00
|
|
|
|
from core.utils import get_stored_list, update_stored_list, get_url, IP
|
2021-02-01 15:13:11 +00:00
|
|
|
|
|
2021-08-04 16:14:23 +00:00
|
|
|
|
|
2022-04-01 14:55:21 +00:00
|
|
|
|
async def get_article(version):
|
|
|
|
|
match_snapshot = re.match(r'.*?w.*', version)
|
|
|
|
|
link = False
|
|
|
|
|
if match_snapshot:
|
|
|
|
|
link = 'https://www.minecraft.net/en-us/article/minecraft-snapshot-' + version
|
|
|
|
|
match_prerelease1 = re.match(r'(.*?)-pre(.*[0-9])', version)
|
|
|
|
|
match_prerelease2 = re.match(r'(.*?) Pre-Release (.*[0-9])', version)
|
|
|
|
|
if match_prerelease1:
|
|
|
|
|
match_prerelease = match_prerelease1
|
|
|
|
|
elif match_prerelease2:
|
|
|
|
|
match_prerelease = match_prerelease2
|
|
|
|
|
else:
|
|
|
|
|
match_prerelease = False
|
|
|
|
|
if match_prerelease:
|
|
|
|
|
link = f'https://www.minecraft.net/en-us/article/minecraft-' + re.sub("\.", "-", match_prerelease.group(1)) \
|
|
|
|
|
+ f'-pre-release-{match_prerelease.group(2)}'
|
|
|
|
|
match_release_candidate = re.match(r'(.*?)-rc(.*[0-9])', version)
|
|
|
|
|
if match_release_candidate:
|
2022-07-31 08:33:20 +00:00
|
|
|
|
link = f'https://www.minecraft.net/en-us/article/minecraft-' + re.sub("\.", "-",
|
|
|
|
|
match_release_candidate.group(1)) \
|
2022-04-01 14:55:21 +00:00
|
|
|
|
+ f'-release-candidate-{match_release_candidate.group(2)}'
|
|
|
|
|
if not link:
|
|
|
|
|
link = 'https://www.minecraft.net/en-us/article/minecraft-java-edition-' + re.sub("\.", "-", version)
|
|
|
|
|
webrender = Config('web_render')
|
2022-06-15 00:29:20 +00:00
|
|
|
|
if not webrender:
|
|
|
|
|
return
|
2022-04-01 14:55:21 +00:00
|
|
|
|
get = webrender + 'source?url=' + quote(link)
|
|
|
|
|
|
|
|
|
|
try:
|
2023-01-17 10:51:18 +00:00
|
|
|
|
html = await get_url(get, attempt=1)
|
2022-04-01 14:55:21 +00:00
|
|
|
|
|
|
|
|
|
soup = BeautifulSoup(html, 'html.parser')
|
|
|
|
|
|
|
|
|
|
title = soup.find('h1')
|
|
|
|
|
if title.text == 'WE’RE SSSSSSSORRY':
|
|
|
|
|
return '', ''
|
|
|
|
|
else:
|
|
|
|
|
return link, title.text
|
|
|
|
|
except Exception:
|
|
|
|
|
traceback.print_exc()
|
|
|
|
|
return '', ''
|
|
|
|
|
|
|
|
|
|
|
2022-05-08 15:03:25 +00:00
|
|
|
|
trigger_times = 60 if not Config('slower_schedule') else 180
|
|
|
|
|
|
|
|
|
|
|
2021-10-24 10:55:45 +00:00
|
|
|
|
@on_schedule('mcv_rss',
|
|
|
|
|
developers=['OasisAkari', 'Dianliang233'],
|
|
|
|
|
recommend_modules=['mcv_jira_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
|
2022-05-08 15:03:25 +00:00
|
|
|
|
trigger=IntervalTrigger(seconds=trigger_times),
|
2022-08-30 08:33:08 +00:00
|
|
|
|
desc='开启后当Minecraft启动器更新Java版Minecraft时将会自动推送消息。', alias='mcvrss')
|
2021-08-07 07:56:48 +00:00
|
|
|
|
async def mcv_rss(bot: FetchTarget):
|
2022-06-28 16:13:02 +00:00
|
|
|
|
url = 'https://piston-meta.mojang.com/mc/game/version_manifest.json'
|
2021-08-30 18:53:39 +00:00
|
|
|
|
try:
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist = get_stored_list(bot, 'mcv_rss')
|
2023-01-17 10:51:18 +00:00
|
|
|
|
file = json.loads(await get_url(url, attempt=1))
|
2021-08-30 18:53:39 +00:00
|
|
|
|
release = file['latest']['release']
|
|
|
|
|
snapshot = file['latest']['snapshot']
|
|
|
|
|
if release not in verlist:
|
|
|
|
|
Logger.info(f'huh, we find {release}.')
|
|
|
|
|
await bot.post_message('mcv_rss', '启动器已更新' + file['latest']['release'] + '正式版。')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist.append(release)
|
|
|
|
|
update_stored_list(bot, 'mcv_rss', verlist)
|
2022-04-01 14:55:21 +00:00
|
|
|
|
article = await get_article(release)
|
|
|
|
|
if article[0] != '':
|
2022-06-12 14:30:02 +00:00
|
|
|
|
get_stored_news_title = get_stored_list(bot, 'mcnews')
|
2022-06-16 11:38:45 +00:00
|
|
|
|
if article[1] not in get_stored_news_title:
|
|
|
|
|
await bot.post_message('minecraft_news', f'Minecraft官网发布了{release}的更新日志:\n' + article[0])
|
|
|
|
|
get_stored_news_title.append(article[1])
|
2022-07-01 06:43:02 +00:00
|
|
|
|
update_stored_list(bot, 'mcnews', get_stored_news_title)
|
2021-08-30 18:53:39 +00:00
|
|
|
|
if snapshot not in verlist:
|
|
|
|
|
Logger.info(f'huh, we find {snapshot}.')
|
|
|
|
|
await bot.post_message('mcv_rss', '启动器已更新' + file['latest']['snapshot'] + '快照。')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist.append(snapshot)
|
|
|
|
|
update_stored_list(bot, 'mcv_rss', verlist)
|
2022-04-01 14:55:21 +00:00
|
|
|
|
article = await get_article(snapshot)
|
|
|
|
|
if article[0] != '':
|
2022-06-12 14:30:02 +00:00
|
|
|
|
get_stored_news_title = get_stored_list(bot, 'mcnews')
|
2022-06-16 11:38:45 +00:00
|
|
|
|
if article[1] not in get_stored_news_title:
|
|
|
|
|
await bot.post_message('minecraft_news', f'Minecraft官网发布了{snapshot}的更新日志:\n' + article[0])
|
|
|
|
|
get_stored_news_title.append(article[1])
|
2022-07-01 06:43:02 +00:00
|
|
|
|
update_stored_list(bot, 'mcnews', get_stored_news_title)
|
2021-08-30 18:53:39 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
traceback.print_exc()
|
2021-02-01 15:13:11 +00:00
|
|
|
|
|
2021-04-10 14:41:19 +00:00
|
|
|
|
|
2022-04-02 14:45:17 +00:00
|
|
|
|
@on_schedule('mcbv_rss', developers=['OasisAkari'],
|
|
|
|
|
recommend_modules=['mcbv_jira_rss'],
|
2022-05-25 11:59:09 +00:00
|
|
|
|
trigger=IntervalTrigger(seconds=180),
|
2022-04-02 14:45:17 +00:00
|
|
|
|
desc='开启后当Minecraft基岩版商店更新时将会自动推送消息。', alias='mcbvrss')
|
|
|
|
|
async def mcbv_rss(bot: FetchTarget):
|
2023-01-31 11:03:14 +00:00
|
|
|
|
if IP.country == 'China':
|
|
|
|
|
return # 中国大陆无法访问Google Play商店
|
2022-04-02 14:45:17 +00:00
|
|
|
|
try:
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist = get_stored_list(bot, 'mcbv_rss')
|
2022-05-19 11:55:11 +00:00
|
|
|
|
version = google_play_scraper('com.mojang.minecraftpe')['version']
|
2022-04-02 14:45:17 +00:00
|
|
|
|
if version not in verlist:
|
|
|
|
|
Logger.info(f'huh, we find bedrock {version}.')
|
2022-04-02 14:58:39 +00:00
|
|
|
|
await bot.post_message('mcbv_rss', '基岩版商店已更新' + version + '正式版。')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist.append(version)
|
|
|
|
|
update_stored_list(bot, 'mcbv_rss', verlist)
|
2022-04-02 14:45:17 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
traceback.print_exc()
|
|
|
|
|
|
|
|
|
|
|
2021-10-24 10:55:45 +00:00
|
|
|
|
@on_schedule('mcv_jira_rss', developers=['OasisAkari', 'Dianliang233'],
|
|
|
|
|
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
|
2022-05-08 15:03:25 +00:00
|
|
|
|
trigger=IntervalTrigger(seconds=trigger_times),
|
2022-01-21 12:19:32 +00:00
|
|
|
|
desc='开启后当Jira更新Java版时将会自动推送消息。', alias='mcvjirarss')
|
2021-08-07 07:56:48 +00:00
|
|
|
|
async def mcv_jira_rss(bot: FetchTarget):
|
2021-10-01 01:57:46 +00:00
|
|
|
|
try:
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist = get_stored_list(bot, 'mcv_jira_rss')
|
2023-01-17 10:51:18 +00:00
|
|
|
|
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10400/versions', 200, attempt=1))
|
2021-10-01 01:57:46 +00:00
|
|
|
|
releases = []
|
|
|
|
|
for v in file:
|
|
|
|
|
if not v['archived']:
|
|
|
|
|
releases.append(v['name'])
|
2022-06-12 14:30:02 +00:00
|
|
|
|
else:
|
|
|
|
|
if v['name'] not in verlist:
|
|
|
|
|
verlist.append(v['name'])
|
2021-10-01 01:57:46 +00:00
|
|
|
|
for release in releases:
|
|
|
|
|
if release not in verlist:
|
|
|
|
|
Logger.info(f'huh, we find {release}.')
|
2022-06-22 14:08:03 +00:00
|
|
|
|
if release.lower().find('future version') != -1:
|
|
|
|
|
await bot.post_message('mcv_jira_rss',
|
|
|
|
|
f'Jira版本库已新增Java版 {release}。'
|
|
|
|
|
f'\n(Future Version仅代表与此相关的版本正在规划中,不代表启动器已更新此版本)')
|
|
|
|
|
else:
|
|
|
|
|
await bot.post_message('mcv_jira_rss',
|
|
|
|
|
f'Jira已更新Java版 {release}。'
|
|
|
|
|
f'\n(Jira上的信息仅作版本号预览用,不代表启动器已更新此版本)')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist.append(release)
|
|
|
|
|
update_stored_list(bot, 'mcv_jira_rss', verlist)
|
|
|
|
|
|
2021-10-01 01:57:46 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
traceback.print_exc()
|
|
|
|
|
|
|
|
|
|
|
2021-10-24 10:55:45 +00:00
|
|
|
|
@on_schedule('mcbv_jira_rss',
|
|
|
|
|
developers=['OasisAkari', 'Dianliang233'],
|
|
|
|
|
recommend_modules=['mcv_rss', 'mcv_jira_rss', 'mcdv_jira_rss'],
|
2022-05-08 15:03:25 +00:00
|
|
|
|
trigger=IntervalTrigger(seconds=trigger_times),
|
2022-01-21 12:19:32 +00:00
|
|
|
|
desc='开启后当Jira更新基岩版时将会自动推送消息。', alias='mcbvjirarss')
|
2021-10-01 01:57:46 +00:00
|
|
|
|
async def mcbv_jira_rss(bot: FetchTarget):
|
|
|
|
|
try:
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist = get_stored_list(bot, 'mcbv_jira_rss')
|
2023-01-17 10:51:18 +00:00
|
|
|
|
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10200/versions', 200, attempt=1))
|
2021-10-01 01:57:46 +00:00
|
|
|
|
releases = []
|
|
|
|
|
for v in file:
|
|
|
|
|
if not v['archived']:
|
|
|
|
|
releases.append(v['name'])
|
2022-06-12 14:30:02 +00:00
|
|
|
|
else:
|
|
|
|
|
if v['name'] not in verlist:
|
|
|
|
|
verlist.append(v['name'])
|
2021-10-01 01:57:46 +00:00
|
|
|
|
for release in releases:
|
|
|
|
|
if release not in verlist:
|
|
|
|
|
Logger.info(f'huh, we find {release}.')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
|
2021-10-01 01:57:46 +00:00
|
|
|
|
await bot.post_message('mcbv_jira_rss',
|
2021-11-12 14:25:53 +00:00
|
|
|
|
f'Jira已更新基岩版 {release}。'
|
|
|
|
|
f'\n(Jira上的信息仅作版本号预览用,不代表商城已更新此版本)')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist.append(release)
|
|
|
|
|
update_stored_list(bot, 'mcbv_jira_rss', verlist)
|
2021-10-01 01:57:46 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
traceback.print_exc()
|
|
|
|
|
|
|
|
|
|
|
2021-10-24 10:55:45 +00:00
|
|
|
|
@on_schedule('mcdv_jira_rss',
|
|
|
|
|
developers=['OasisAkari', 'Dianliang233'],
|
|
|
|
|
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcv_jira_rss'],
|
2022-05-08 15:03:25 +00:00
|
|
|
|
trigger=IntervalTrigger(seconds=trigger_times),
|
2022-01-21 12:19:32 +00:00
|
|
|
|
desc='开启后当Jira更新Dungeons版本时将会自动推送消息。', alias='mcdvjirarss')
|
2021-10-01 01:57:46 +00:00
|
|
|
|
async def mcdv_jira_rss(bot: FetchTarget):
|
|
|
|
|
try:
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist = get_stored_list(bot, 'mcdv_jira_rss')
|
2023-01-17 10:51:18 +00:00
|
|
|
|
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/11901/versions', 200, attempt=1))
|
2021-10-01 01:57:46 +00:00
|
|
|
|
releases = []
|
|
|
|
|
for v in file:
|
|
|
|
|
if not v['archived']:
|
|
|
|
|
releases.append(v['name'])
|
2022-06-12 14:30:02 +00:00
|
|
|
|
else:
|
|
|
|
|
if v['name'] not in verlist:
|
|
|
|
|
verlist.append(v['name'])
|
2021-10-01 01:57:46 +00:00
|
|
|
|
for release in releases:
|
|
|
|
|
if release not in verlist:
|
|
|
|
|
Logger.info(f'huh, we find {release}.')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
|
2021-10-01 01:57:46 +00:00
|
|
|
|
await bot.post_message('mcdv_jira_rss',
|
2021-11-12 14:25:53 +00:00
|
|
|
|
f'Jira已更新Minecraft Dungeons {release}。'
|
|
|
|
|
f'\n(Jira上的信息仅作版本号预览用,不代表启动器/商城已更新此版本)')
|
2022-06-12 14:30:02 +00:00
|
|
|
|
verlist.append(release)
|
|
|
|
|
update_stored_list(bot, 'mcdv_jira_rss', verlist)
|
2021-10-01 01:57:46 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
traceback.print_exc()
|