Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/mcv_rss/__init__.py

215 lines
9.4 KiB
Python
Raw Normal View History

import os
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
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
2021-11-12 14:25:53 +00:00
from core.elements import FetchTarget, IntervalTrigger, PrivateAssets
from core.logger import Logger
2021-10-14 15:29:59 +00:00
from core.utils import get_url
2021-03-21 08:14:28 +00:00
2022-04-02 14:45:17 +00:00
from google_play_scraper import app as google_play_scraper
2021-03-21 08:14:28 +00:00
2021-04-10 14:41:19 +00:00
def getfileversions(path):
2021-04-08 12:23:38 +00:00
if not os.path.exists(path):
a = open(path, 'a', encoding='utf-8')
2021-04-08 12:23:38 +00:00
a.close()
w = open(path, 'r+', encoding='utf-8')
2021-02-01 15:13:11 +00:00
s = w.read().split('\n')
w.close()
return s
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:
link = f'https://www.minecraft.net/en-us/article/minecraft-' + re.sub("\.", "-", match_release_candidate.group(1))\
+ 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')
get = webrender + 'source?url=' + quote(link)
try:
html = await get_url(get)
soup = BeautifulSoup(html, 'html.parser')
title = soup.find('h1')
if title.text == 'WERE 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-01-21 12:19:32 +00:00
desc='开启后当Minecraft启动器更新时将会自动推送消息。', alias='mcvrss')
2021-08-07 07:56:48 +00:00
async def mcv_rss(bot: FetchTarget):
2021-08-30 18:53:39 +00:00
url = 'http://launchermeta.mojang.com/mc/game/version_manifest.json'
try:
version_file = os.path.abspath(f'{PrivateAssets.path}/mcversion.txt')
verlist = getfileversions(version_file)
file = json.loads(await get_url(url))
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'] + '正式版。')
addversion = open(version_file, 'a', encoding='utf-8')
2021-08-30 18:53:39 +00:00
addversion.write('\n' + release)
addversion.close()
2021-04-10 14:41:19 +00:00
verlist = getfileversions(version_file)
2022-04-01 14:55:21 +00:00
article = await get_article(release)
if article[0] != '':
await bot.post_message('minecraft_news', f'Minecraft官网发布了{release}的更新日志:\n' + article[0])
newsfile = os.path.abspath(f'{PrivateAssets.path}/mcnews.txt')
addnews = open(newsfile, 'a', encoding='utf-8')
addnews.write('\n' + article[1])
addnews.close()
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'] + '快照。')
addversion = open(version_file, 'a', encoding='utf-8')
2021-08-30 18:53:39 +00:00
addversion.write('\n' + snapshot)
addversion.close()
2022-04-01 14:55:21 +00:00
article = await get_article(snapshot)
if article[0] != '':
await bot.post_message('minecraft_news', f'Minecraft官网发布了{snapshot}的更新日志:\n' + article[0])
newsfile = os.path.abspath(f'{PrivateAssets.path}/mcnews.txt')
addnews = open(newsfile, 'a', encoding='utf-8')
addnews.write('\n' + article[1])
addnews.close()
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-08 15:03:25 +00:00
trigger=IntervalTrigger(seconds=trigger_times),
2022-04-02 14:45:17 +00:00
desc='开启后当Minecraft基岩版商店更新时将会自动推送消息。', alias='mcbvrss')
async def mcbv_rss(bot: FetchTarget):
try:
version_file = os.path.abspath(f'{PrivateAssets.path}/mcbeversion.txt')
verlist = getfileversions(version_file)
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-04-02 14:45:17 +00:00
addversion = open(version_file, 'a', encoding='utf-8')
addversion.write('\n' + version)
addversion.close()
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):
try:
version_file = os.path.abspath(f'{PrivateAssets.path}/mcjira_Java.txt')
verlist = getfileversions(version_file)
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10400/versions'))
releases = []
for v in file:
if not v['archived']:
releases.append(v['name'])
for release in releases:
if release not in verlist:
Logger.info(f'huh, we find {release}.')
verlist.append(release)
await bot.post_message('mcv_jira_rss',
2021-11-12 14:25:53 +00:00
f'Jira已更新Java版 {release}'
f'\nJira上的信息仅作版本号预览用不代表启动器已更新此版本')
addversion = open(version_file, 'a', encoding='utf-8')
addversion.write('\n' + release)
addversion.close()
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')
async def mcbv_jira_rss(bot: FetchTarget):
try:
version_file = os.path.abspath(f'{PrivateAssets.path}/mcjira_Bedrock.txt')
verlist = getfileversions(version_file)
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10200/versions'))
releases = []
for v in file:
if not v['archived']:
releases.append(v['name'])
for release in releases:
if release not in verlist:
Logger.info(f'huh, we find {release}.')
verlist.append(release)
await bot.post_message('mcbv_jira_rss',
2021-11-12 14:25:53 +00:00
f'Jira已更新基岩版 {release}'
f'\nJira上的信息仅作版本号预览用不代表商城已更新此版本')
addversion = open(version_file, 'a', encoding='utf-8')
addversion.write('\n' + release)
addversion.close()
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')
async def mcdv_jira_rss(bot: FetchTarget):
try:
version_file = os.path.abspath(f'{PrivateAssets.path}/mcjira_Minecraft Dungeons.txt')
verlist = getfileversions(version_file)
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/11901/versions'))
releases = []
for v in file:
if not v['archived']:
releases.append(v['name'])
for release in releases:
if release not in verlist:
Logger.info(f'huh, we find {release}.')
verlist.append(release)
await bot.post_message('mcdv_jira_rss',
2021-11-12 14:25:53 +00:00
f'Jira已更新Minecraft Dungeons {release}'
f'\nJira上的信息仅作版本号预览用不代表启动器/商城已更新此版本)')
addversion = open(version_file, 'a', encoding='utf-8')
addversion.write('\n' + release)
addversion.close()
except Exception:
traceback.print_exc()