2021-09-10 18:05:27 +00:00
|
|
|
|
import ujson as json
|
2021-10-01 02:28:33 +00:00
|
|
|
|
import os
|
2021-11-12 14:25:53 +00:00
|
|
|
|
import traceback
|
2021-11-02 11:14:21 +00:00
|
|
|
|
from datetime import datetime, timedelta
|
2021-11-12 14:25:53 +00:00
|
|
|
|
from urllib.parse import quote
|
|
|
|
|
|
|
|
|
|
import ujson as json
|
2021-10-24 13:19:37 +00:00
|
|
|
|
|
2021-08-24 15:58:57 +00:00
|
|
|
|
from config import Config
|
2021-11-12 14:25:53 +00:00
|
|
|
|
from core.component import on_schedule
|
2021-10-14 15:29:59 +00:00
|
|
|
|
from core.elements import FetchTarget, IntervalTrigger, PrivateAssets
|
2021-08-24 15:58:57 +00:00
|
|
|
|
from core.logger import Logger
|
2021-10-14 15:29:59 +00:00
|
|
|
|
from core.utils import get_url
|
2021-08-24 15:58:57 +00:00
|
|
|
|
|
|
|
|
|
|
2021-11-01 17:06:19 +00:00
|
|
|
|
def getfileversions(path):
|
|
|
|
|
if not os.path.exists(path):
|
2021-11-10 15:54:45 +00:00
|
|
|
|
a = open(path, 'a', encoding='utf-8')
|
2021-11-01 17:06:19 +00:00
|
|
|
|
a.close()
|
2021-11-10 15:54:45 +00:00
|
|
|
|
w = open(path, 'r+', encoding='utf-8')
|
2021-11-01 17:06:19 +00:00
|
|
|
|
s = w.read().split('\n')
|
|
|
|
|
w.close()
|
|
|
|
|
return s
|
|
|
|
|
|
|
|
|
|
|
2021-11-10 15:54:45 +00:00
|
|
|
|
class Article:
|
|
|
|
|
count = 10
|
|
|
|
|
|
|
|
|
|
|
2021-11-12 14:25:53 +00:00
|
|
|
|
@on_schedule('minecraft_news', developers=['_LittleC_', 'OasisAkari', 'Dianliang233'],
|
|
|
|
|
recommend_modules=['feedback_news'], trigger=IntervalTrigger(seconds=300), desc='开启后将会推送来自Minecraft官网的新闻。')
|
2021-08-24 15:58:57 +00:00
|
|
|
|
async def start_check_news(bot: FetchTarget):
|
2021-11-01 17:06:19 +00:00
|
|
|
|
Logger.info('Checking Minecraft news...')
|
|
|
|
|
file_ = os.path.abspath(f'{PrivateAssets.path}/mcnews.txt')
|
2021-08-24 15:58:57 +00:00
|
|
|
|
baseurl = 'https://www.minecraft.net'
|
2021-11-12 14:25:53 +00:00
|
|
|
|
url = quote(
|
|
|
|
|
f'https://www.minecraft.net/content/minecraft-net/_jcr_content.articles.grid?tileselection=auto&tagsPath=minecraft:article/news,minecraft:article/insider,minecraft:article/culture,minecraft:article/merch,minecraft:stockholm/news,minecraft:stockholm/guides,minecraft:stockholm/deep-dives,minecraft:stockholm/merch,minecraft:stockholm/events,minecraft:stockholm/minecraft-builds,minecraft:stockholm/marketplace&offset=0&pageSize={Article.count}')
|
2021-11-08 16:09:06 +00:00
|
|
|
|
webrender = Config('web_render')
|
2021-08-24 15:58:57 +00:00
|
|
|
|
get = webrender + 'source?url=' + url
|
|
|
|
|
if not webrender:
|
|
|
|
|
return
|
|
|
|
|
getpage = await get_url(get)
|
|
|
|
|
if getpage:
|
2021-11-01 17:06:19 +00:00
|
|
|
|
alist = getfileversions(file_)
|
2021-11-10 15:54:45 +00:00
|
|
|
|
o_json = json.loads(getpage)
|
|
|
|
|
o_nws = o_json['article_grid']
|
|
|
|
|
Article.count = o_json['article_count']
|
2021-08-24 15:58:57 +00:00
|
|
|
|
for o_article in o_nws:
|
2021-11-01 17:06:19 +00:00
|
|
|
|
default_tile = o_article['default_tile']
|
|
|
|
|
title = default_tile['title']
|
|
|
|
|
desc = default_tile['sub_header']
|
|
|
|
|
link = baseurl + o_article['article_url']
|
|
|
|
|
articletext = f'Minecraft官网发布了新的文章:\n{title}\n{link}\n{desc}'
|
|
|
|
|
if title not in alist:
|
2021-11-02 11:14:21 +00:00
|
|
|
|
publish_date = datetime.strptime(o_article['publish_date'], '%d %B %Y %H:%M:%S %Z')
|
|
|
|
|
now = datetime.now()
|
|
|
|
|
if now - publish_date < timedelta(days=2):
|
|
|
|
|
await bot.post_message('minecraft_news', articletext)
|
2021-11-10 15:54:45 +00:00
|
|
|
|
addversion = open(file_, 'a', encoding='utf-8')
|
2021-11-01 17:06:19 +00:00
|
|
|
|
addversion.write('\n' + title)
|
|
|
|
|
addversion.close()
|
|
|
|
|
Logger.info('Minecraft news checked.')
|
2021-10-01 02:28:33 +00:00
|
|
|
|
|
2021-10-08 11:54:27 +00:00
|
|
|
|
|
2021-11-12 14:25:53 +00:00
|
|
|
|
@on_schedule('feedback_news', developers=['Dianliang233'], recommend_modules=['minecraft_news'],
|
|
|
|
|
trigger=IntervalTrigger(seconds=300), desc='开启后将会推送来自Minecraft Feedback的更新记录。')
|
2021-10-01 02:28:33 +00:00
|
|
|
|
async def feedback_news(bot: FetchTarget):
|
2021-11-12 14:25:53 +00:00
|
|
|
|
sections = [{'name': 'beta',
|
|
|
|
|
'url': 'https://minecraftfeedback.zendesk.com/api/v2/help_center/en-us/sections/360001185332/articles?per_page=5'},
|
|
|
|
|
{'name': 'article',
|
|
|
|
|
'url': 'https://minecraftfeedback.zendesk.com/api/v2/help_center/en-us/sections/360001186971/articles?per_page=5'}]
|
2021-10-01 02:28:33 +00:00
|
|
|
|
for section in sections:
|
|
|
|
|
try:
|
|
|
|
|
name = section['name']
|
|
|
|
|
version_file = os.path.abspath(f'{PrivateAssets.path}/feedback_{name}.txt')
|
|
|
|
|
alist = getfileversions(version_file)
|
2021-10-01 14:00:35 +00:00
|
|
|
|
get = await get_url(section['url'])
|
|
|
|
|
res = json.loads(get)
|
2021-10-01 02:28:33 +00:00
|
|
|
|
articles = []
|
|
|
|
|
for i in res['articles']:
|
|
|
|
|
articles.append(i)
|
|
|
|
|
for article in articles:
|
|
|
|
|
if article['name'] not in alist:
|
|
|
|
|
name = article['name']
|
|
|
|
|
link = article['html_url']
|
|
|
|
|
Logger.info(f'huh, we find {name}.')
|
|
|
|
|
alist.append(name)
|
|
|
|
|
await bot.post_message('feedback_news',
|
2021-11-12 14:25:53 +00:00
|
|
|
|
f'Minecraft Feedback 发布了新的文章:\n{name}\n{link}')
|
2021-11-10 15:54:45 +00:00
|
|
|
|
addversion = open(version_file, 'a', encoding='utf-8')
|
2021-10-01 02:28:33 +00:00
|
|
|
|
addversion.write('\n' + name)
|
|
|
|
|
addversion.close()
|
|
|
|
|
except Exception:
|
2021-10-01 14:09:30 +00:00
|
|
|
|
traceback.print_exc()
|
2021-11-12 14:25:53 +00:00
|
|
|
|
print(get)
|