Archived
1
0
Fork 0
This commit is contained in:
多羅狼 2024-03-09 12:06:56 +08:00 committed by GitHub
parent b8eb99da75
commit 95f5921abb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 149 additions and 173 deletions

View file

@ -13,6 +13,7 @@ from core.queue import JobQueue
from core.scheduler import Scheduler
from core.types import PrivateAssets, Secret
from core.utils.info import Info
from core.utils.web_render import check_web_render
async def init_async(start_scheduler=True) -> None:
@ -33,9 +34,10 @@ async def init_async(start_scheduler=True) -> None:
Scheduler.start()
logging.getLogger('apscheduler.executors.default').setLevel(logging.WARNING)
await load_secret()
await check_web_render()
try:
Info.version = os.popen('git rev-parse HEAD', 'r').read()
except Exception as e:
except Exception:
Logger.warn(f'Failed to get Git commit hash, is it a Git repository?')
Logger.info(f'Hello, {bot_name}!')

View file

@ -6,13 +6,10 @@ import aiohttp
import ujson as json
from tabulate import tabulate
from config import CFG
from core.logger import Logger
from .cache import random_cache_path
from .http import download_to_cache
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
from .web_render import WebRender, webrender
class ImageTable:
@ -22,10 +19,7 @@ class ImageTable:
async def image_table_render(table: Union[ImageTable, List[ImageTable]], save_source=True, use_local=True):
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
if not WebRender.local
use_local = False
pic = False
@ -67,7 +61,7 @@ async def image_table_render(table: Union[ImageTable, List[ImageTable]], save_so
try:
pic = await download_to_cache(
web_render_local if use_local else web_render,
webrender(),
method='POST',
post_data=json.dumps(html),
request_private_ip=True,
@ -78,7 +72,7 @@ async def image_table_render(table: Union[ImageTable, List[ImageTable]], save_so
except aiohttp.ClientConnectorError:
if use_local:
pic = await download_to_cache(
web_render,
webrender(use_local=False),
method='POST',
post_data=json.dumps(html),
request_private_ip=True,

59
core/utils/web_render.py Normal file
View file

@ -0,0 +1,59 @@
import traceback
from config import CFG
from core.logger import Logger
from core.utils.http import get_url
from core.utils.ip import IP
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
class WebRender:
status = False
local = False
def webrender(method: str = None, url: str = None, use_local: bool = True):
'''根据请求方法生成 Webrender URL。
:param method: API 方法
:param url: method source则指定请求的 URL
:param use_local: 是否使用本地 Webrender
:returns: 生成的 Webrender URL
'''
if use_local and not WebRender.local:
use_local = False
if method == 'source':
if WebRender.status:
return f'{(web_render_local if use_local else web_render)}source?url={url}'
else:
return url
else:
if WebRender.status:
return (web_render_local if use_local else web_render) + method
else:
return None
async def check_web_render():
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
else:
WebRender.status = True
else:
WebRender.local = True
WebRender.status = True
if IP.country != 'China':
ping_url = 'http://www.google.com/'
else:
ping_url = 'http://www.baidu.com/'
if WebRender.status:
try:
Logger.info('[Webrender] Checking Webrender status...')
await get_url(webrender('source', ping_url), 200, request_private_ip=True)
Logger.info('[Webrender] Webrender is working as expected.')
except Exception:
Logger.error('[Webrender] Webrender is not working as expected.')
Logger.error(traceback.format_exc())
WebRender.status = False

View file

@ -6,6 +6,7 @@ from core.builtins import Bot, Image as BImage, Plain
from core.component import module
from core.utils.cache import random_cache_path
from core.utils.http import get_url
from core.utils.web_render import webrender
assets_path = os.path.abspath('./assets/arcaea')
@ -17,8 +18,8 @@ arc = module('arcaea', developers=['OasisAkari'], desc='{arcaea.help.desc}',
@arc.command('download {{arcaea.help.download}}')
async def _(msg: Bot.MessageSession):
resp = await get_url('https://webapi.lowiro.com/webapi/serve/static/bin/arcaea/apk/', 200,
fmt='json')
url = 'https://webapi.lowiro.com/webapi/serve/static/bin/arcaea/apk/'
resp = await get_url(webrender('source', url), 200, fmt='json', request_private_ip=True)
if resp:
await msg.finish([Plain(msg.locale.t("arcaea.message.download", version=resp["value"]["version"],
url=resp['value']['url']))])
@ -28,8 +29,8 @@ async def _(msg: Bot.MessageSession):
@arc.command('random {{arcaea.help.random}}')
async def _(msg: Bot.MessageSession):
resp = await get_url('https://webapi.lowiro.com/webapi/song/showcase/',
200, fmt='json')
url = 'https://webapi.lowiro.com/webapi/song/showcase/'
resp = await get_url(webrender('source', url), 200, fmt='json', request_private_ip=True)
if resp:
value = resp["value"][0]
image = f'{assets_path}/jacket/{value["song_id"]}.jpg'
@ -45,11 +46,11 @@ async def _(msg: Bot.MessageSession):
'rank paid {{arcaea.help.rank.paid}}')
async def _(msg: Bot.MessageSession):
if msg.parsed_msg.get('free', False):
resp = await get_url('https://webapi.lowiro.com/webapi/song/rank/free/',
200, fmt='json')
url = 'https://webapi.lowiro.com/webapi/song/rank/free/'
resp = await get_url(webrender('source', url), 200, fmt='json', request_private_ip=True)
else:
resp = await get_url('https://webapi.lowiro.com/webapi/song/rank/paid/',
200, fmt='json')
url = 'https://webapi.lowiro.com/webapi/song/rank/paid/'
resp = await get_url(webrender('source', url), 200, fmt='json', request_private_ip=True)
if resp:
r = []
rank = 0

View file

@ -5,13 +5,11 @@ import aiohttp
import ujson as json
from PIL import ImageFont
from config import CFG
from core.builtins import Url
from core.logger import Logger
from core.utils.http import download_to_cache, get_url
from core.utils.web_render import WebRender, webrender
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
elements = ['div#descriptionmodule']
assets_path = os.path.abspath('./assets/')
@ -20,14 +18,11 @@ spx_cache = {}
async def make_screenshot(page_link, use_local=True):
elements_ = elements.copy()
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
if not WebRender.local
use_local = False
Logger.info('[Webrender] Generating element screenshot...')
try:
img = await download_to_cache((web_render_local if use_local else web_render) + 'element_screenshot',
img = await download_to_cache(webrender('element_screenshot', use_local=use_local),
status_code=200,
headers={'Content-Type': 'application/json'},
method="POST",

View file

@ -1,14 +0,0 @@
import sys
from core.builtins import Bot
from core.component import module
exit = module('exit', base=True, available_for=['TEST|Console'])
@exit.command()
async def _(msg: Bot.MessageSession):
confirm = await msg.wait_confirm(msg.locale.t("core.message.confirm"), append_instruction=False, delete=False)
if confirm:
print('Exited.')
sys.exit()

View file

@ -295,6 +295,16 @@ if Info.subprocess:
await msg.finish()
exit_ = module('exit', required_superuser=True, base=True, available_for=['TEST|Console'])
@exit_.command()
async def _(msg: Bot.MessageSession):
confirm = await msg.wait_confirm(msg.locale.t("core.message.confirm"), append_instruction=False, delete=False)
if confirm:
print('Exited.')
sys.exit()
if Bot.FetchTarget.name == 'QQ':
resume = module('resume', required_superuser=True)
@ -480,10 +490,10 @@ if Config('enable_petal'):
msg.data.clear_petal()
await msg.finish(msg.locale.t('core.message.petal.clear.self'))
lagrange = module('lagrange', required_superuser=True, base=True)
lagrange = module('lagrange', required_superuser=True, base=True)
@lagrange.command()
async def _(msg: Bot.MessageSession):
await msg.finish(f'Keepalive: {str(Temp.data.get("lagrange_keepalive", "None"))}\n'
f'Status: {str(Temp.data.get("lagrange_status", "None"))}\n'
f'Groups: {str(Temp.data.get("lagrange_available_groups", "None"))}')
@lagrange.command()
async def _(msg: Bot.MessageSession):
await msg.finish(f'Keepalive: {str(Temp.data.get("lagrange_keepalive", "None"))}\n'
f'Status: {str(Temp.data.get("lagrange_status", "None"))}\n'
f'Groups: {str(Temp.data.get("lagrange_available_groups", "None"))}')

View file

@ -1,22 +1,19 @@
import platform
import time
from datetime import datetime, timedelta, tzinfo
from datetime import datetime, timedelta
import jwt
import psutil
from cpuinfo import get_cpu_info
from config import Config, CFG
from core.builtins import Bot, Embed, EmbedField, command_prefix
from config import Config
from core.builtins import Bot
from core.component import module
from core.utils.http import get_url
from core.utils.i18n import get_available_locales, Locale, load_locale_file
from core.utils.info import Info
from core.utils.web_render import WebRender
from database import BotDBUtil
jwt_secret = Config('jwt_secret')
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
ver = module('version', base=True)
@ -33,18 +30,6 @@ ping = module('ping', base=True)
started_time = datetime.now()
async def check_web_render(use_local=True):
if not web_render_local:
if not web_render:
return False
use_local = False
try:
ping_url = 'http://www.baidu.com'
url = (web_render_local if use_local else web_render) + 'source?url=' + ping_url
await get_url(url, 200, logging_err_resp=False, request_private_ip=True)
except BaseException:
return False
return True
@ping.command('{{core.help.ping}}')
async def _(msg: Bot.MessageSession):
@ -59,7 +44,7 @@ async def _(msg: Bot.MessageSession):
swap_percent = psutil.swap_memory().percent
disk = int(psutil.disk_usage('/').used / (1024 * 1024 * 1024))
disk_total = int(psutil.disk_usage('/').total / (1024 * 1024 * 1024))
web_render_status = str(await check_web_render())
web_render_status = str(WebRender.status)
result += '\n' + msg.locale.t("core.message.ping.detail",
system_boot_time=boot_start,
bot_running_time=timediff,

View file

@ -2,7 +2,6 @@ import os
import ujson as json
from datetime import datetime
from config import CFG
from core.builtins import Plain
from core.utils.http import get_url
from core.utils.image import msgchain2image
@ -14,8 +13,6 @@ SONGS_PER_PAGE = 20
JINGLEBELL_SONG_ID = 70
assets_path = os.path.abspath('./assets/maimai')
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
total_list = TotalList()
plate_conversion = {

View file

@ -10,6 +10,7 @@
"maimai.help.b50.beta": "查询 Maimai 用户的 B50 列表。Beta 版)",
"maimai.help.base": "根据定数或定数范围搜索歌曲。",
"maimai.help.bind": "绑定 Diving-Fish 查分器用户。",
"maimai.help.calc": "根据定数计算 Rating。",
"maimai.help.desc": "查询 Maimai 相关内容。",
"maimai.help.grade": "查询段位认定列表。",
"maimai.help.id": "根据 ID 查询歌曲或谱面信息。",
@ -29,7 +30,6 @@
"maimai.help.random": "随机一首歌曲。",
"maimai.help.random.filter": "随机一首指定条件的歌曲,输入星号则表示无条件。",
"maimai.help.rank": "查看用户在查分器上的分数排行。",
"maimai.help.rating": "根据定数计算 Rating。",
"maimai.help.scoreline": "查询歌曲的分数线。",
"maimai.help.scorelist": "查看用户在对应等级的分数列表。",
"maimai.help.search": "根据歌名(或一部分)搜索歌曲。",

View file

@ -10,6 +10,7 @@
"maimai.help.b50.beta": "查詢 Maimai 使用者的 B50 列表。Beta 版)",
"maimai.help.base": "依據定數或定數範圍內搜尋歌曲。",
"maimai.help.bind": "綁定 Diving-Fish 查分器使用者。",
"maimai.help.calc": "依據定數計算 Rating。",
"maimai.help.desc": "查詢 Maimai 相關的內容。",
"maimai.help.grade": "查詢段位認定列表。",
"maimai.help.id": "依據 ID 查詢歌曲或譜面資訊。",
@ -29,7 +30,6 @@
"maimai.help.random": "隨機一首歌曲。",
"maimai.help.random.filter": "隨機一首指定條件的歌曲,輸入星號則表示無條件。",
"maimai.help.rank": "查看使用者在查分器上的分數排行。",
"maimai.help.rating": "依據定數計算 Rating。",
"maimai.help.scoreline": "查詢歌曲的分數線。",
"maimai.help.scorelist": "查看使用者在對應等級的分數列表。",
"maimai.help.search": "依據歌名(或一部分)搜尋歌曲。",

View file

@ -364,7 +364,7 @@ async def _(msg: Bot.MessageSession, diff: str, sid: str, score: float):
await msg.finish(msg.locale.t('maimai.message.scoreline.failed', prefix=msg.prefixes[0]))
@mai.command('rating <base> <score> {{maimai.help.rating}}')
@mai.command('calc <base> <score> {{maimai.help.calc}}')
async def _(msg: Bot.MessageSession, base: float, score: float):
if score:
await msg.finish([Plain(max(0, computeRa(base, score)))])

View file

@ -2,26 +2,19 @@ from urllib.parse import quote
from bs4 import BeautifulSoup
from config import CFG
from core.builtins import Url
from core.logger import Logger
from core.utils.http import get_url
from core.utils.web_render import webrender
api = 'https://search.mcmod.cn/s?key='
api_details = 'https://search.mcmod.cn/s?filter=3&key='
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
async def mcmod(msg, keyword: str, detail: bool = False):
endpoint = api_details if detail else api
search_url = endpoint + quote(keyword)
if web_render:
use_local = True if web_render_local else False
else:
return
search_url = (web_render_local if use_local else web_render) + 'source?url=' + quote(search_url)
html = await get_url(search_url, 200, request_private_ip=True)
html = await get_url(webrender('source', quote(search_url)), 200, request_private_ip=True)
Logger.debug(html)
bs = BeautifulSoup(html, 'html.parser')
results = bs.find_all('div', class_='result-item')

View file

@ -1,13 +1,10 @@
from bs4 import BeautifulSoup
from config import CFG
from core.builtins import Url
from core.logger import Logger
from core.utils.http import get_url
from core.utils.i18n import Locale
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
from core.utils.web_render import webrender
async def jiki(term: str, locale: Locale):
@ -17,12 +14,7 @@ async def jiki(term: str, locale: Locale):
:returns: 查询结果'''
try:
api = 'https://jikipedia.com/search?phrase=' + term
if web_render:
use_local = True if web_render_local else False
else:
return
api = (web_render_local if use_local else web_render) + 'source?url=' + api
html = await get_url(api, 200)
html = await get_url(webrender('source', api), 200, request_private_ip=True)
Logger.debug(html)
bs = BeautifulSoup(html, 'html.parser')
result = bs.select_one('[data-index="0"]')

View file

@ -1,13 +1,10 @@
import ujson as json
from config import CFG
from core.builtins import Url
from core.logger import Logger
from core.utils.http import get_url
from core.utils.i18n import Locale
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
from core.utils.web_render import webrender
async def urban(term: str, locale: Locale):
@ -17,12 +14,7 @@ async def urban(term: str, locale: Locale):
:returns: 查询结果'''
try:
url = 'http://api.urbandictionary.com/v0/define?term=' + term
if web_render:
use_local = True if web_render_local else False
else:
return
url = (web_render_local if use_local else web_render) + 'source?url=' + url
text = await get_url(url, 200, headers={'accept': '*/*',
text = await get_url(webrender('source', url), 200, headers={'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-GB;q=0.6',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'},

View file

@ -1,16 +1,13 @@
import re
import ujson as json
from config import CFG
from core.builtins import Bot
from core.builtins.message import Image, Url
from core.component import module
from core.dirty_check import check_bool, rickroll
from core.logger import Logger
from core.utils.http import download_to_cache, get_url
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
from core.utils.web_render import webrender
t = module('tweet',
@ -21,7 +18,7 @@ t = module('tweet',
@t.handle('<tweet> {{tweet.help}}')
async def _(msg: Bot.MessageSession, tweet: str, use_local=True):
async def _(msg: Bot.MessageSession, tweet: str):
if tweet.isdigit():
tweet_id = tweet
else:
@ -31,11 +28,9 @@ async def _(msg: Bot.MessageSession, tweet: str, use_local=True):
else:
await msg.finish(msg.locale.t('tweet.message.invalid'))
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
await msg.finish(msg.locale.t("error.config.webrender.invalid"))
use_local = False
web_render = webrender('element_screenshot')
if not web_render:
await msg.finish(msg.locale.t("error.config.webrender.invalid"))
res = await get_url(f'https://react-tweet.vercel.app/api/tweet/{tweet_id}', 200)
res_json = json.loads(res)
@ -81,7 +76,7 @@ async def _(msg: Bot.MessageSession, tweet: str, use_local=True):
}
'''
pic = await download_to_cache((web_render_local if use_local else web_render) + 'element_screenshot', method='POST', headers={
pic = await download_to_cache(web_render, method='POST', headers={
'Content-Type': 'application/json',
}, post_data=json.dumps(
{'url': f'https://react-tweet-next.vercel.app/light/{tweet_id}', 'css': css, 'mw': False,

View file

@ -11,10 +11,11 @@ from core.logger import Logger
from core.utils.http import download_to_cache
from core.utils.image import svg_render
from core.utils.image_table import image_table_render, ImageTable
from core.utils.web_render import WebRender
from modules.wiki.utils.dbutils import WikiTargetInfo
from modules.wiki.utils.screenshot_image import generate_screenshot_v1, generate_screenshot_v2
from modules.wiki.utils.wikilib import WikiLib
from .wiki import query_pages, generate_screenshot_v2_blocklist, web_render
from .wiki import query_pages, generate_screenshot_v2_blocklist
wiki_inline = module('wiki_inline',
desc='{wiki.help.wiki_inline.desc}', recommend_modules=['wiki'],
@ -147,7 +148,7 @@ async def _(msg: Bot.MessageSession):
get_infobox = await generate_screenshot_v1(q[qq].realurl, qq, headers)
if get_infobox:
await msg.send_message(Image(get_infobox), quote=False)
if get_page.invalid_section and wiki_.wiki_info.in_allowlist and web_render:
if get_page.invalid_section and wiki_.wiki_info.in_allowlist and WebRender.status:
i_msg_lst = []
if get_page.sections:
session_data = [[str(i + 1), get_page.sections[i]] for i in

View file

@ -9,12 +9,10 @@ import aiohttp
import ujson as json
from bs4 import BeautifulSoup, Comment
from config import CFG
from core.logger import Logger
from core.utils.http import download_to_cache
from core.utils.web_render import WebRender, webrender
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
elements = ['.notaninfobox', '.portable-infobox', '.infobox', '.tpl-infobox', '.infoboxtable', '.infotemplatebox',
'.skin-infobox', '.arcaeabox', '.moe-infobox', '.rotable']
assets_path = os.path.abspath('./assets/')
@ -25,10 +23,7 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
elements_ = elements.copy()
if element and isinstance(element, List):
elements_ += element
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
if not WebRender.local
use_local = False
if not section:
if allow_special_page and content_mode:
@ -37,7 +32,7 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
elements_.insert(0, '.diff')
Logger.info('[Webrender] Generating element screenshot...')
try:
img = await download_to_cache((web_render_local if use_local else web_render) + 'element_screenshot',
img = await download_to_cache(webrender('element_screenshot', use_local=use_local),
status_code=200,
headers={'Content-Type': 'application/json'},
method="POST",
@ -60,7 +55,7 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
else:
Logger.info('[Webrender] Generating section screenshot...')
try:
img = await download_to_cache((web_render_local if use_local else web_render) + 'section_screenshot',
img = await download_to_cache(webrender('element_screenshot', use_local=use_local),
status_code=200,
headers={'Content-Type': 'application/json'},
method="POST",
@ -84,11 +79,9 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
return img
async def generate_screenshot_v1(link, page_link, headers, section=None, allow_special_page=False) -> Union[str, bool]:
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
async def generate_screenshot_v1(link, page_link, headers, use_local=True, section=None, allow_special_page=False) -> Union[str, bool]:
if not WebRender.local
use_local = False
try:
Logger.info('Starting find infobox/section..')
if link[-1] != '/':
@ -340,7 +333,7 @@ async def generate_screenshot_v1(link, page_link, headers, section=None, allow_s
os.remove(picname)
try:
async with aiohttp.ClientSession() as session:
async with session.post(web_render_local, headers={
async with session.post(webrender(), headers={
'Content-Type': 'application/json',
}, data=json.dumps(html)) as resp:
if resp.status != 200:
@ -349,15 +342,16 @@ async def generate_screenshot_v1(link, page_link, headers, section=None, allow_s
with open(picname, 'wb+') as jpg:
jpg.write(await resp.read())
except aiohttp.ClientConnectorError:
async with aiohttp.ClientSession() as session:
async with session.post(web_render, headers={
'Content-Type': 'application/json',
}, data=json.dumps(html)) as resp:
if resp.status != 200:
Logger.info(f'Failed to render: {await resp.text()}')
return False
with open(picname, 'wb+') as jpg:
jpg.write(await resp.read())
if use_local:
async with aiohttp.ClientSession() as session:
async with session.post(webrender(use_local=False), headers={
'Content-Type': 'application/json',
}, data=json.dumps(html)) as resp:
if resp.status != 200:
Logger.info(f'Failed to render: {await resp.text()}')
return False
with open(picname, 'wb+') as jpg:
jpg.write(await resp.read())
return picname
except Exception:
traceback.print_exc()

View file

@ -8,7 +8,7 @@ from typing import Union, Dict, List
import ujson as json
import core.utils.html2text as html2text
from config import Config, CFG
from config import Config
from core.builtins import Url
from core.dirty_check import check
from core.logger import Logger
@ -17,9 +17,8 @@ from core.utils.i18n import Locale, default_locale
from core.exceptions import NoReportException
from modules.wiki.utils.dbutils import WikiSiteInfo as DBSiteInfo, Audit
from modules.wiki.utils.bot import BotAccount
from core.utils.web_render import webrender
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
redirect_list = {'https://zh.moegirl.org.cn/api.php': 'https://mzh.moegirl.org.cn/api.php', # 萌娘百科强制使用移动版 API
'https://minecraft.fandom.com/api.php': 'https://minecraft.wiki/api.php', # no more Fandom then
@ -170,9 +169,7 @@ class WikiLib:
request_local = False
for x in request_by_web_render_list:
if x.match(api):
if web_render:
use_local = True if web_render_local else False
api = (web_render_local if use_local else web_render) + 'source?url=' + urllib.parse.quote(api)
api = webrender('source', urllib.parse.quote(api))
request_local = True
break

View file

@ -4,7 +4,6 @@ from typing import Union
import filetype
from config import CFG
from core.builtins import Bot, Plain, Image, Voice, Url, confirm_command
from core.types import MessageSession
from core.utils.image_table import image_table_render, ImageTable
@ -13,11 +12,11 @@ from core.exceptions import AbuseWarning
from core.logger import Logger
from core.utils.http import download_to_cache
from core.utils.image import svg_render
from core.utils.web_render import WebRender
from modules.wiki.utils.dbutils import WikiTargetInfo
from modules.wiki.utils.screenshot_image import generate_screenshot_v1, generate_screenshot_v2
from modules.wiki.utils.wikilib import WikiLib, WhatAreUDoingError, PageInfo, InvalidWikiError, QueryInfo
web_render = CFG.get_url('web_render')
generate_screenshot_v2_blocklist = ['https://mzh.moegirl.org.cn', 'https://zh.moegirl.org.cn']
special_namespace = ['special', '特殊']
random_title = ['random', '随机页面', '隨機頁面']
@ -208,7 +207,7 @@ async def query_pages(session: Union[Bot.MessageSession, QueryInfo], title: Unio
plain_slice.append(session.locale.t('wiki.message.redirect', title=display_before_title,
redirected_title=display_title))
if (r.link and r.selected_section and r.info.in_allowlist and
not r.invalid_section and web_render):
not r.invalid_section and WebRender.status):
render_section_list.append(
{r.link: {'url': r.info.realurl, 'section': r.selected_section,
'in_allowlist': r.info.in_allowlist}})
@ -234,7 +233,7 @@ async def query_pages(session: Union[Bot.MessageSession, QueryInfo], title: Unio
'Template:Version disambiguation' in r.templates))}})
if plain_slice:
msg_list.append(Plain('\n'.join(plain_slice)))
if web_render:
if WebRender.status:
if r.invalid_section and r.info.in_allowlist:
if isinstance(session, Bot.MessageSession) and session.Feature.image and r.sections:
i_msg_lst = []

View file

@ -7,7 +7,7 @@ import ujson as json
from bs4 import BeautifulSoup
from google_play_scraper import app as google_play_scraper
from config import CFG, Config
from config import Config
from core.builtins import I18NContext, FormattedTime
from core.logger import Logger
from core.queue import JobQueue
@ -15,12 +15,10 @@ from core.scheduler import Scheduler, IntervalTrigger
from core.utils.http import get_url
from core.utils.ip import IP
from core.utils.storedata import get_stored_list, update_stored_list
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
from core.utils.web_render import webrender
async def get_article(version, use_local=True):
async def get_article(version):
match_snapshot = re.match(r'.*?w.*', version)
link = False
if match_snapshot:
@ -43,15 +41,9 @@ async def get_article(version, use_local=True):
+ 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)
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return '', ''
use_local = False
get = (web_render_local if use_local else web_render) + 'source?url=' + quote(link)
try:
html = await get_url(get, attempt=1, request_private_ip=True, logging_err_resp=False)
html = await get_url(webrender('source', quote(link)), attempt=1, request_private_ip=True, logging_err_resp=False)
soup = BeautifulSoup(html, 'html.parser')

View file

@ -5,16 +5,14 @@ from urllib.parse import quote
import ujson as json
from config import Config, CFG
from config import Config
from core.builtins import Url, I18NContext
from core.logger import Logger
from core.queue import JobQueue
from core.scheduler import Scheduler, IntervalTrigger
from core.utils.http import get_url
from core.utils.storedata import get_stored_list, update_stored_list
web_render = CFG.get_url('web_render')
web_render_local = CFG.get_url('web_render_local')
from core.utils.web_render import webrender
class Article:
@ -44,18 +42,12 @@ class Article:
@Scheduler.scheduled_job(IntervalTrigger(seconds=60 if not Config('slower_schedule') else 180))
async def start_check_news(use_local=True):
async def start_check_news():
baseurl = 'https://www.minecraft.net'
url = quote(
f'https://www.minecraft.net/content/minecraft-net/_jcr_content.articles.grid?tileselection=auto&tagsPath={",".join(Article.random_tags())}&offset=0&pageSize={Article.count}')
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return
use_local = False
try:
get = (web_render_local if use_local else web_render) + 'source?url=' + url
getpage = await get_url(get, 200, attempt=1, request_private_ip=True, logging_err_resp=False)
getpage = await get_url(webrender('source', url), 200, attempt=1, request_private_ip=True, logging_err_resp=False)
if getpage:
alist = get_stored_list('scheduler', 'mcnews')
o_json = json.loads(getpage)