2021-04-08 15:22:55 +00:00
|
|
|
import re
|
|
|
|
|
2021-09-10 18:05:27 +00:00
|
|
|
import ujson as json
|
|
|
|
|
2023-06-05 04:10:27 +00:00
|
|
|
from html import unescape
|
2023-02-05 14:33:33 +00:00
|
|
|
from core.builtins import Bot
|
|
|
|
from core.builtins import Plain, Image, Url
|
2023-03-04 08:51:56 +00:00
|
|
|
from core.component import module
|
2023-02-05 14:33:33 +00:00
|
|
|
from core.utils.http import get_url
|
2023-04-05 05:36:11 +00:00
|
|
|
from core.utils.i18n import Locale
|
2023-04-08 17:01:27 +00:00
|
|
|
from core.utils.image import msgchain2image
|
2023-04-16 13:07:56 +00:00
|
|
|
from modules.wiki.utils.screenshot_image import generate_screenshot_v2
|
2023-04-19 07:45:29 +00:00
|
|
|
from modules.wiki.utils.wikilib import WikiLib
|
|
|
|
from .teahouse import get_rss as get_teahouse_rss
|
2021-11-19 17:50:34 +00:00
|
|
|
|
2021-08-07 07:56:48 +00:00
|
|
|
|
2023-04-05 05:36:11 +00:00
|
|
|
async def get_weekly(with_img=False, zh_tw=False):
|
2023-04-05 05:39:16 +00:00
|
|
|
locale = Locale('zh_cn' if not zh_tw else 'zh_tw')
|
2021-08-07 03:37:17 +00:00
|
|
|
result = json.loads(await get_url(
|
2023-04-16 12:48:56 +00:00
|
|
|
'https://minecraft.fandom.com/zh/api.php?action=parse&page=Minecraft_Wiki/weekly&prop=text|revid|images&format=json' +
|
2023-04-05 05:36:11 +00:00
|
|
|
('&variant=zh-tw' if zh_tw else ''),
|
2022-08-01 15:33:35 +00:00
|
|
|
200))
|
2021-08-07 03:37:17 +00:00
|
|
|
html = result['parse']['text']['*']
|
|
|
|
text = re.sub(r'<p>', '\n', html) # 分段
|
|
|
|
text = re.sub(r'<(.*?)>', '', text, flags=re.DOTALL) # 移除所有 HTML 标签
|
|
|
|
text = re.sub(r'\n\n\n', '\n\n', text) # 移除不必要的空行
|
|
|
|
text = re.sub(r'\n*$', '', text)
|
2023-06-05 04:04:26 +00:00
|
|
|
text = unescape(text)
|
2023-04-16 12:48:56 +00:00
|
|
|
img = result['parse']['images']
|
2021-08-07 03:37:17 +00:00
|
|
|
page = re.findall(r'(?<=<b><a href=").*?(?=")', html)
|
2023-05-19 04:46:29 +00:00
|
|
|
msg_list = [Plain(locale.t("weekly.message.error.expired") if page[
|
2023-04-30 03:30:59 +00:00
|
|
|
0] == '/zh/wiki/%E7%8E%BB%E7%92%83' else locale.t(
|
2023-04-05 05:36:11 +00:00
|
|
|
"weekly.message", text=text))]
|
2023-04-16 12:48:56 +00:00
|
|
|
imglink = None
|
2021-09-06 05:13:03 +00:00
|
|
|
if img:
|
2023-04-16 12:48:56 +00:00
|
|
|
get_image = await (WikiLib('https://minecraft.fandom.com/zh/wiki/')).parse_page_info('File:' + img[0])
|
|
|
|
if get_image.status:
|
|
|
|
imglink = get_image.file
|
2023-04-30 03:30:59 +00:00
|
|
|
msg_list.append(
|
|
|
|
Plain(
|
|
|
|
locale.t(
|
|
|
|
"weekly.message.link",
|
|
|
|
img=imglink if imglink is not None else locale.t("none"),
|
|
|
|
article=str(
|
|
|
|
Url(f'https://minecraft.fandom.com{page[0]}')),
|
|
|
|
link=str(
|
|
|
|
Url(f'https://minecraft.fandom.com/zh/wiki/?oldid={str(result["parse"]["revid"])}')))))
|
2023-04-16 12:48:56 +00:00
|
|
|
if imglink is not None and with_img:
|
|
|
|
msg_list.append(Image(path=imglink))
|
2021-08-07 03:37:17 +00:00
|
|
|
|
2021-09-06 05:13:03 +00:00
|
|
|
return msg_list
|
2021-08-07 03:37:17 +00:00
|
|
|
|
2021-08-07 07:56:48 +00:00
|
|
|
|
2023-04-16 13:07:56 +00:00
|
|
|
async def get_weekly_img(with_img=False, zh_tw=False):
|
|
|
|
locale = Locale('zh_cn' if not zh_tw else 'zh_tw')
|
|
|
|
img = await generate_screenshot_v2('https://minecraft.fandom.com/zh/wiki/Minecraft_Wiki/weekly' +
|
2023-05-08 04:43:14 +00:00
|
|
|
('?variant=zh-tw' if zh_tw else ''), content_mode=True, allow_special_page=True)
|
2023-04-16 13:07:56 +00:00
|
|
|
msg_ = []
|
|
|
|
if img:
|
|
|
|
msg_.append(Image(path=img))
|
|
|
|
if with_img:
|
|
|
|
result = json.loads(await get_url(
|
|
|
|
'https://minecraft.fandom.com/zh/api.php?action=parse&page=Minecraft_Wiki/weekly&prop=images&format=json' +
|
2023-05-08 05:04:40 +00:00
|
|
|
('&variant=zh-tw' if zh_tw else ''),
|
2023-04-16 13:07:56 +00:00
|
|
|
200))
|
|
|
|
img = result['parse']['images']
|
|
|
|
if img:
|
|
|
|
get_image = await (WikiLib('https://minecraft.fandom.com/zh/wiki/')).parse_page_info('File:' + img[0])
|
|
|
|
if get_image.status:
|
2023-04-16 13:10:26 +00:00
|
|
|
msg_.append(Plain(locale.t("weekly.message.image", img=get_image.file)))
|
2023-04-16 13:07:56 +00:00
|
|
|
return msg_
|
|
|
|
|
|
|
|
|
2023-04-05 05:36:11 +00:00
|
|
|
wky = module('weekly', developers=['Dianliang233'], support_languages=['zh_cn', 'zh_tw'])
|
2021-10-24 10:55:45 +00:00
|
|
|
|
|
|
|
|
2023-04-05 04:06:12 +00:00
|
|
|
@wky.handle('{{weekly.help}}')
|
2023-02-05 14:33:33 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-04-08 17:01:27 +00:00
|
|
|
weekly = await get_weekly(True if msg.target.clientName in ['QQ', 'TEST'] else False,
|
2023-04-05 05:36:11 +00:00
|
|
|
zh_tw=True if msg.locale.locale == 'zh_tw' else False)
|
2022-05-21 16:04:29 +00:00
|
|
|
await msg.finish(weekly)
|
2021-11-19 17:50:34 +00:00
|
|
|
|
|
|
|
|
2023-05-19 04:46:29 +00:00
|
|
|
@wky.handle('image {{weekly.help.image}}')
|
2023-04-08 17:01:27 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-04-16 13:07:56 +00:00
|
|
|
await msg.finish(await get_weekly_img(True if msg.target.clientName in ['QQ', 'TEST'] else False,
|
|
|
|
zh_tw=True if msg.locale.locale == 'zh_tw' else False))
|
2023-04-08 17:01:27 +00:00
|
|
|
|
|
|
|
|
2023-05-19 04:46:29 +00:00
|
|
|
@wky.handle('teahouse {{weekly.help.teahouse}}')
|
2023-02-05 14:33:33 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
2021-11-19 17:50:34 +00:00
|
|
|
weekly = await get_teahouse_rss()
|
2022-05-21 16:04:29 +00:00
|
|
|
await msg.finish(weekly)
|
2023-04-12 06:29:21 +00:00
|
|
|
|
|
|
|
|
2023-05-19 04:46:29 +00:00
|
|
|
@wky.handle('teahouse image {{weekly.help.teahouse}}')
|
2023-04-12 06:29:21 +00:00
|
|
|
async def _(msg: Bot.MessageSession):
|
|
|
|
weekly = await get_teahouse_rss()
|
|
|
|
await msg.finish(Image(await msgchain2image([Plain(weekly)])))
|