2021-06-30 19:50:55 +08:00
|
|
|
|
from nonebot import on_command, Driver
|
2021-05-20 19:31:25 +08:00
|
|
|
|
from nonebot.typing import T_State
|
2021-06-30 19:50:55 +08:00
|
|
|
|
from nonebot.adapters.cqhttp import Bot, MessageEvent, Message
|
|
|
|
|
|
from utils.init_result import image
|
|
|
|
|
|
from utils.browser import get_browser
|
|
|
|
|
|
from configs.path_config import IMAGE_PATH
|
|
|
|
|
|
import nonebot
|
|
|
|
|
|
from services.log import logger
|
|
|
|
|
|
from utils.utils import scheduler
|
|
|
|
|
|
from nonebot.permission import SUPERUSER
|
|
|
|
|
|
import os
|
2021-05-20 19:31:25 +08:00
|
|
|
|
|
|
|
|
|
|
import time
|
|
|
|
|
|
|
2021-06-30 19:50:55 +08:00
|
|
|
|
driver: Driver = nonebot.get_driver()
|
|
|
|
|
|
|
2021-05-20 19:31:25 +08:00
|
|
|
|
material = on_command('今日素材', aliases={'今日材料', '今天素材', '今天材料'}, priority=5, block=True)
|
2021-06-30 19:50:55 +08:00
|
|
|
|
|
|
|
|
|
|
super_cmd = on_command('更新原神今日素材', permission=SUPERUSER, priority=1, block=True)
|
|
|
|
|
|
|
2021-05-20 19:31:25 +08:00
|
|
|
|
|
|
|
|
|
|
@material.handle()
|
|
|
|
|
|
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
|
|
|
|
|
if time.strftime("%w") == "0":
|
|
|
|
|
|
await material.send("今天是周日,所有材料副本都开放了。")
|
|
|
|
|
|
return
|
2021-06-30 19:50:55 +08:00
|
|
|
|
await material.send(Message(image('daily_material.png', 'genshin') + '\n※ 黄历数据来源于 genshin.pub'))
|
|
|
|
|
|
logger.info(
|
|
|
|
|
|
f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})"
|
|
|
|
|
|
f" 发送查看今日素材")
|
2021-05-20 19:31:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
2021-06-30 19:50:55 +08:00
|
|
|
|
@super_cmd.handle()
|
2021-05-20 19:31:25 +08:00
|
|
|
|
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
2021-07-11 14:39:25 +08:00
|
|
|
|
if await update_image():
|
2021-06-30 19:50:55 +08:00
|
|
|
|
await super_cmd.send('更新成功...')
|
|
|
|
|
|
logger.info(f'更新每日天赋素材成功...')
|
2021-07-11 14:39:25 +08:00
|
|
|
|
else:
|
|
|
|
|
|
await super_cmd.send(f'更新失败...')
|
2021-06-30 19:50:55 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@driver.on_startup
|
|
|
|
|
|
async def update_image():
|
|
|
|
|
|
try:
|
|
|
|
|
|
if os.path.exists(f'{IMAGE_PATH}/genshin/daily_material.png'):
|
|
|
|
|
|
os.remove(f'{IMAGE_PATH}/genshin/daily_material.png')
|
|
|
|
|
|
browser = await get_browser()
|
2021-07-11 15:16:16 +08:00
|
|
|
|
if not browser:
|
|
|
|
|
|
logger.warning('获取 browser 失败,请部署至 linux 环境....')
|
|
|
|
|
|
return False
|
2021-06-30 19:50:55 +08:00
|
|
|
|
url = 'https://genshin.pub/daily'
|
|
|
|
|
|
page = await browser.new_page()
|
|
|
|
|
|
await page.goto(url, wait_until='networkidle', timeout=10000)
|
|
|
|
|
|
await page.set_viewport_size({"width": 2560, "height": 1080})
|
2021-07-26 21:16:32 +08:00
|
|
|
|
|
|
|
|
|
|
await page.evaluate("""
|
|
|
|
|
|
document.getElementsByClassName('GSTitleBar_gs_titlebar__2IJqy')[0].remove();
|
|
|
|
|
|
e = document.getElementsByClassName('GSContainer_gs_container__2FbUz')[0];
|
|
|
|
|
|
e.setAttribute("style", "height:880px");
|
|
|
|
|
|
""")
|
|
|
|
|
|
|
2021-06-30 19:50:55 +08:00
|
|
|
|
await page.click("button")
|
2021-07-26 21:16:32 +08:00
|
|
|
|
card = await page.query_selector(".GSContainer_content_box__1sIXz")
|
2021-06-30 19:50:55 +08:00
|
|
|
|
card = await card.bounding_box()
|
|
|
|
|
|
await page.screenshot(path=f'{IMAGE_PATH}/genshin/daily_material.png', clip=card, timeout=100000)
|
|
|
|
|
|
await page.close()
|
2021-07-11 14:39:25 +08:00
|
|
|
|
return True
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logger.error(f'原神每日素材更新出错... {type(e)}: {e}')
|
|
|
|
|
|
return False
|
2021-06-30 19:50:55 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@scheduler.scheduled_job(
|
|
|
|
|
|
'cron',
|
2021-07-14 12:16:25 +08:00
|
|
|
|
hour=4,
|
2021-06-30 19:50:55 +08:00
|
|
|
|
minute=1,
|
|
|
|
|
|
)
|
|
|
|
|
|
async def _():
|
|
|
|
|
|
for _ in range(5):
|
|
|
|
|
|
try:
|
|
|
|
|
|
await update_image()
|
|
|
|
|
|
logger.info(f'更新每日天赋素材成功...')
|
|
|
|
|
|
break
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logger.error(f'更新每日天赋素材出错 e:{e}')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|