Merge branch 'main' into dev

This commit is contained in:
felinae98 2021-11-01 14:38:27 +08:00
commit 0916b1a19d
No known key found for this signature in database
GPG Key ID: 00C8B010587FF610
3 changed files with 28 additions and 6 deletions

View File

@ -33,7 +33,7 @@ async def send_help(bot: Bot, event: Event, state: T_State):
def do_add_sub(add_sub: Type[Matcher]): def do_add_sub(add_sub: Type[Matcher]):
@add_sub.handle() @add_sub.handle()
async def init_promote(bot: Bot, event: Event, state: T_State): async def init_promote(bot: Bot, event: Event, state: T_State):
state['_prompt'] = '请输入想要订阅的平台,目前支持\n' + \ state['_prompt'] = '请输入想要订阅的平台,目前支持,请输入冒号左边的名称\n' + \
''.join(['{}{}\n'.format(platform_name, platform_manager[platform_name].name) \ ''.join(['{}{}\n'.format(platform_name, platform_manager[platform_name].name) \
for platform_name in common_platform]) + \ for platform_name in common_platform]) + \
'要查看全部平台请输入:“全部”' '要查看全部平台请输入:“全部”'
@ -74,7 +74,7 @@ def do_add_sub(add_sub: Type[Matcher]):
state['cats'] = [] state['cats'] = []
return return
state['_prompt'] = '请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format( state['_prompt'] = '请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format(
','.join(list(platform_manager[state['platform']].categories.values()))) ' '.join(list(platform_manager[state['platform']].categories.values())))
async def parser_cats(bot: Bot, event: Event, state: T_State): async def parser_cats(bot: Bot, event: Event, state: T_State):
res = [] res = []

View File

@ -40,6 +40,7 @@ class Arknights(NewMessage, NoTargetMixin):
async def parse(self, raw_post: RawPost) -> Post: async def parse(self, raw_post: RawPost) -> Post:
announce_url = raw_post['webUrl'] announce_url = raw_post['webUrl']
text = ''
async with httpx.AsyncClient() as client: async with httpx.AsyncClient() as client:
raw_html = await client.get(announce_url) raw_html = await client.get(announce_url)
soup = bs(raw_html, 'html.parser') soup = bs(raw_html, 'html.parser')
@ -49,12 +50,14 @@ class Arknights(NewMessage, NoTargetMixin):
render = Render() render = Render()
viewport = {'width': 320, 'height': 6400, 'deviceScaleFactor': 3} viewport = {'width': 320, 'height': 6400, 'deviceScaleFactor': 3}
pic_data = await render.render(announce_url, viewport=viewport, target='div.main') pic_data = await render.render(announce_url, viewport=viewport, target='div.main')
pics.append(pic_data) if pic_data:
pics.append(pic_data)
text = '图片渲染失败'
elif (pic := soup.find('img', class_='banner-image')): elif (pic := soup.find('img', class_='banner-image')):
pics.append(pic['src']) pics.append(pic['src'])
else: else:
raise CategoryNotSupport() raise CategoryNotSupport()
return Post('arknights', text='', url='', target_name="明日方舟游戏内公告", pics=pics, compress=True, override_use_pic=False) return Post('arknights', text=text, url='', target_name="明日方舟游戏内公告", pics=pics, compress=True, override_use_pic=False)
class AkVersion(NoTargetMixin, StatusChange): class AkVersion(NoTargetMixin, StatusChange):
@ -81,9 +84,13 @@ class AkVersion(NoTargetMixin, StatusChange):
def compare_status(self, _, old_status, new_status): def compare_status(self, _, old_status, new_status):
res = [] res = []
if old_status.get('preAnnounceType') == 2 and new_status.get('preAnnounceType') == 0: if old_status.get('preAnnounceType') == 2 and new_status.get('preAnnounceType') == 0:
res.append(Post('arknights', text='开始维护!', target_name='明日方舟更新信息')) res.append(Post('arknights',
text='登录界面维护公告上线(大概是开始维护了)',
target_name='明日方舟更新信息'))
elif old_status.get('preAnnounceType') == 0 and new_status.get('preAnnounceType') == 2: elif old_status.get('preAnnounceType') == 0 and new_status.get('preAnnounceType') == 2:
res.append(Post('arknights', text='维护结束!冲!(可能不太准确)', target_name='明日方舟更新信息')) res.append(Post('arknights',
text='登录界面维护公告下线(大概是开服了,冲!)',
target_name='明日方舟更新信息'))
if old_status.get('clientVersion') != new_status.get('clientVersion'): if old_status.get('clientVersion') != new_status.get('clientVersion'):
res.append(Post('arknights', text='游戏本体更新(大更新)', target_name='明日方舟更新信息')) res.append(Post('arknights', text='游戏本体更新(大更新)', target_name='明日方舟更新信息'))
if old_status.get('resVersion') != new_status.get('resVersion'): if old_status.get('resVersion') != new_status.get('resVersion'):

View File

@ -3,6 +3,7 @@ import base64
from html import escape from html import escape
import os import os
from time import asctime from time import asctime
import re
from typing import Awaitable, Callable, Optional from typing import Awaitable, Callable, Optional
from nonebot.adapters.cqhttp.message import MessageSegment from nonebot.adapters.cqhttp.message import MessageSegment
@ -12,6 +13,8 @@ from pyppeteer.browser import Browser
from pyppeteer.chromium_downloader import check_chromium, download_chromium from pyppeteer.chromium_downloader import check_chromium, download_chromium
from pyppeteer.page import Page from pyppeteer.page import Page
from bs4 import BeautifulSoup as bs
from .plugin_config import plugin_config from .plugin_config import plugin_config
class Singleton(type): class Singleton(type):
@ -121,3 +124,15 @@ async def parse_text(text: str) -> MessageSegment:
return await render.text_to_pic_cqcode(text) return await render.text_to_pic_cqcode(text)
else: else:
return MessageSegment.text(text) return MessageSegment.text(text)
def html_to_text(html: str, query_dict: dict = {}) -> str:
html = re.sub(r'<br\s*/?>', '<br>\n', html)
html = html.replace('</p>', '</p>\n')
soup = bs(html, 'html.parser')
if query_dict:
node = soup.find(**query_dict)
else:
node = soup
assert node is not None
return node.text.strip()