Update __init__.py

This commit is contained in:
HibiKier 2021-07-27 17:28:22 +08:00 committed by GitHub
parent edbbcec1be
commit 6a76176001
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,7 @@
from nonebot import on_command, Driver from nonebot import on_command, Driver
from nonebot.typing import T_State from nonebot.typing import T_State
from nonebot.adapters.cqhttp import Bot, MessageEvent, Message from nonebot.adapters.cqhttp import Bot, MessageEvent, Message
from utils.img_utils import CreateImg
from utils.init_result import image from utils.init_result import image
from utils.browser import get_browser from utils.browser import get_browser
from configs.path_config import IMAGE_PATH from configs.path_config import IMAGE_PATH
@ -8,7 +9,9 @@ import nonebot
from services.log import logger from services.log import logger
from utils.utils import scheduler from utils.utils import scheduler
from nonebot.permission import SUPERUSER from nonebot.permission import SUPERUSER
from typing import List
import os import os
import asyncio
import time import time
@ -24,7 +27,7 @@ async def _(bot: Bot, event: MessageEvent, state: T_State):
if time.strftime("%w") == "0": if time.strftime("%w") == "0":
await material.send("今天是周日,所有材料副本都开放了。") await material.send("今天是周日,所有材料副本都开放了。")
return return
await material.send(Message(image('daily_material.png', 'genshin') + '\n※ 黄历数据来源于 genshin.pub')) await material.send(Message(image('daily_material.png', 'genshin/material') + '\n※ 黄历数据来源于 genshin.pub'))
logger.info( logger.info(
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})" f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
f" 发送查看今日素材") f" 发送查看今日素材")
@ -41,9 +44,12 @@ async def _(bot: Bot, event: MessageEvent, state: T_State):
@driver.on_startup @driver.on_startup
async def update_image(): async def update_image():
page = None
try: try:
if os.path.exists(f'{IMAGE_PATH}/genshin/daily_material.png'): if not os.path.exists(f'{IMAGE_PATH}/genshin/material'):
os.remove(f'{IMAGE_PATH}/genshin/daily_material.png') os.mkdir(f'{IMAGE_PATH}/genshin/material')
for file in os.listdir(f'{IMAGE_PATH}/genshin/material'):
os.remove(f'{IMAGE_PATH}/genshin/material/{file}')
browser = await get_browser() browser = await get_browser()
if not browser: if not browser:
logger.warning('获取 browser 失败,请部署至 linux 环境....') logger.warning('获取 browser 失败,请部署至 linux 环境....')
@ -52,24 +58,64 @@ async def update_image():
page = await browser.new_page() page = await browser.new_page()
await page.goto(url, wait_until='networkidle', timeout=10000) await page.goto(url, wait_until='networkidle', timeout=10000)
await page.set_viewport_size({"width": 2560, "height": 1080}) await page.set_viewport_size({"width": 2560, "height": 1080})
await page.evaluate(""" await page.evaluate("""
document.getElementsByClassName('GSTitleBar_gs_titlebar__2IJqy')[0].remove(); document.getElementsByClassName('GSTitleBar_gs_titlebar__2IJqy')[0].remove();
e = document.getElementsByClassName('GSContainer_gs_container__2FbUz')[0]; e = document.getElementsByClassName('GSContainer_gs_container__2FbUz')[0];
e.setAttribute("style", "height:880px"); e.setAttribute("style", "height:880px");
""") """)
await page.click("button") await page.click("button")
card = await page.query_selector(".GSContainer_content_box__1sIXz") div = await page.query_selector(".GSContainer_content_box__1sIXz")
card = await card.bounding_box() for i, card in enumerate(await page.query_selector_all(".GSTraitCotainer_trait_section__1f3bc")):
await page.screenshot(path=f'{IMAGE_PATH}/genshin/daily_material.png', clip=card, timeout=100000) index = 0
type_ = 'char' if not i else 'weapons'
for x in await card.query_selector_all("xpath=child::*"):
await x.screenshot(path=f'{IMAGE_PATH}/genshin/material/{type_}_{index}.png', timeout=100000)
# 下滑两次
for _ in range(3):
await div.press("PageDown")
index += 1
# 结束后上滑至顶
for _ in range(index * 3):
await div.press("PageUp")
file_list = os.listdir(f'{IMAGE_PATH}/genshin/material')
char_imgs = [f'{IMAGE_PATH}/genshin/material/{x}' for x in file_list if x.startswith('char')]
weapons_imgs = [f'{IMAGE_PATH}/genshin/material/{x}' for x in file_list if x.startswith('weapons')]
char_imgs.sort()
weapons_imgs.sort()
height = await asyncio.get_event_loop().run_in_executor(None, get_background_height, weapons_imgs)
background_img = CreateImg(1200, height + 100, color='#f6f2ee')
current_width = 50
for imgs in [char_imgs, weapons_imgs]:
current_height = 20
for img in imgs:
x = CreateImg(0, 0, background=img)
background_img.paste(x, (current_width, current_height))
current_height += x.size[1]
current_width += 600
background_img.save(f'{IMAGE_PATH}/genshin/material/daily_material.png')
await page.close() await page.close()
return True return True
except Exception as e: except Exception as e:
logger.error(f'原神每日素材更新出错... {type(e)}: {e}') logger.error(f'原神每日素材更新出错... {type(e)}: {e}')
if page:
await page.close()
return False return False
# 获取背景高度以及修改最后一张图片的黑边
def get_background_height(weapons_imgs: List[str]) -> int:
height = 0
for weapons in weapons_imgs:
height += CreateImg(0, 0, background=weapons).size[1]
last_weapon = CreateImg(0, 0, background=weapons_imgs[-1])
w, h = last_weapon.size
print(w, h)
last_weapon.crop((0, 0, w, h - 10))
last_weapon.save(weapons_imgs[-1])
return height
@scheduler.scheduled_job( @scheduler.scheduled_job(
'cron', 'cron',
hour=4, hour=4,