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
2022-04-02 22:58:39 +08:00

211 lines
9.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import re
import traceback
from urllib.parse import quote
import ujson as json
from bs4 import BeautifulSoup
from config import Config
from core.component import on_schedule
from core.elements import FetchTarget, IntervalTrigger, PrivateAssets
from core.logger import Logger
from core.utils import get_url
from google_play_scraper import app as google_play_scraper
def getfileversions(path):
if not os.path.exists(path):
a = open(path, 'a', encoding='utf-8')
a.close()
w = open(path, 'r+', encoding='utf-8')
s = w.read().split('\n')
w.close()
return s
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 '', ''
@on_schedule('mcv_rss',
developers=['OasisAkari', 'Dianliang233'],
recommend_modules=['mcv_jira_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
trigger=IntervalTrigger(seconds=60),
desc='开启后当Minecraft启动器更新时将会自动推送消息。', alias='mcvrss')
async def mcv_rss(bot: FetchTarget):
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')
addversion.write('\n' + release)
addversion.close()
verlist = getfileversions(version_file)
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()
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')
addversion.write('\n' + snapshot)
addversion.close()
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()
except Exception:
traceback.print_exc()
@on_schedule('mcbv_rss', developers=['OasisAkari'],
recommend_modules=['mcbv_jira_rss'],
trigger=IntervalTrigger(seconds=60),
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']
if version not in verlist:
Logger.info(f'huh, we find bedrock {version}.')
await bot.post_message('mcbv_rss', '基岩版商店已更新' + version + '正式版。')
addversion = open(version_file, 'a', encoding='utf-8')
addversion.write('\n' + version)
addversion.close()
except Exception:
traceback.print_exc()
@on_schedule('mcv_jira_rss', developers=['OasisAkari', 'Dianliang233'],
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
trigger=IntervalTrigger(seconds=60),
desc='开启后当Jira更新Java版时将会自动推送消息。', alias='mcvjirarss')
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',
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()
@on_schedule('mcbv_jira_rss',
developers=['OasisAkari', 'Dianliang233'],
recommend_modules=['mcv_rss', 'mcv_jira_rss', 'mcdv_jira_rss'],
trigger=IntervalTrigger(seconds=60),
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',
f'Jira已更新基岩版 {release}'
f'\nJira上的信息仅作版本号预览用不代表商城已更新此版本')
addversion = open(version_file, 'a', encoding='utf-8')
addversion.write('\n' + release)
addversion.close()
except Exception:
traceback.print_exc()
@on_schedule('mcdv_jira_rss',
developers=['OasisAkari', 'Dianliang233'],
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcv_jira_rss'],
trigger=IntervalTrigger(seconds=60),
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',
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()