zhenxun_bot/plugins/genshin/material_remind/__init__.py

80 lines
2.6 KiB
Python
Raw Normal View History

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()
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})
await page.click("button")
card = await page.query_selector(".GSContainer_inner_border_box__21_vs")
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',
hour=0,
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}')