2022-06-26 11:50:25 +08:00
|
|
|
import jinja2
|
2022-06-22 10:36:40 +08:00
|
|
|
from nonebot import require
|
|
|
|
require("nonebot_plugin_htmlrender")
|
2022-06-21 20:37:54 +08:00
|
|
|
from nonebot_plugin_htmlrender import html_to_pic
|
2022-05-27 21:13:59 +08:00
|
|
|
from .event import *
|
2022-06-26 11:50:25 +08:00
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
2022-05-27 21:13:59 +08:00
|
|
|
|
2022-06-21 20:37:54 +08:00
|
|
|
body = []
|
2022-06-26 11:50:25 +08:00
|
|
|
weeks = []
|
|
|
|
weekList = ['一', '二', '三', '四', '五', '六', '日']
|
2022-06-22 10:36:40 +08:00
|
|
|
template_path = Path(__file__).parent / 'template'
|
2022-06-21 20:37:54 +08:00
|
|
|
env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path), enable_async=True)
|
|
|
|
|
2022-05-27 21:13:59 +08:00
|
|
|
|
|
|
|
async def generate_day_schedule(server='cn'):
|
2022-06-21 20:37:54 +08:00
|
|
|
events = await get_events(server, 0, 15)
|
2022-05-27 21:13:59 +08:00
|
|
|
has_prediction = False
|
2022-06-21 20:37:54 +08:00
|
|
|
body.clear()
|
2022-06-26 11:50:25 +08:00
|
|
|
weeks.clear()
|
|
|
|
t = datetime.now()
|
|
|
|
|
|
|
|
for i in range(7):
|
|
|
|
d2 = (t + timedelta(days=i)).strftime("%Y-%m-%d")
|
|
|
|
""" 分割 [年|月|日]"""
|
|
|
|
date_full = str(d2).split("-")
|
|
|
|
|
|
|
|
current = 'm-events-calendar__table-header-current' if t.strftime("%d") == date_full[2] else ""
|
|
|
|
date = re.search(r'0\d+', date_full[1]).group(0).replace('0', '') if re.search(r'0\d+', date_full[1]) else date_full[1]
|
|
|
|
|
|
|
|
week = datetime(int(date_full[0]), int(date_full[1]), int(date_full[2])).isoweekday()
|
|
|
|
weeks.append({
|
|
|
|
'week': f'星期{weekList[week - 1]}',
|
|
|
|
'date': f'{date}.{date_full[2]}',
|
|
|
|
'current': current
|
|
|
|
})
|
2022-06-21 20:37:54 +08:00
|
|
|
|
2022-05-27 21:13:59 +08:00
|
|
|
for event in events:
|
|
|
|
if event['start_days'] > 0:
|
|
|
|
has_prediction = True
|
|
|
|
|
2022-06-21 20:37:54 +08:00
|
|
|
template = env.get_template('calendar.html')
|
2022-05-27 21:13:59 +08:00
|
|
|
for event in events:
|
|
|
|
if event['start_days'] <= 0:
|
2022-06-21 20:37:54 +08:00
|
|
|
time = '即将结束' if event["left_days"] == 0 else f'{str(event["left_days"])}天后结束'
|
|
|
|
body.append({
|
2022-06-22 10:36:40 +08:00
|
|
|
'title': event['title'],
|
|
|
|
'time': time,
|
2022-06-21 20:37:54 +08:00
|
|
|
'online': f'{datetime.strftime(event["start"], r"%m-%d")} ~ {datetime.strftime(event["end"], r"%m-%d")}',
|
2022-06-22 10:36:40 +08:00
|
|
|
'color': event['color'],
|
2022-06-21 20:37:54 +08:00
|
|
|
'banner': event['banner']
|
|
|
|
})
|
2022-05-27 21:13:59 +08:00
|
|
|
if has_prediction:
|
|
|
|
for event in events:
|
|
|
|
if event['start_days'] > 0:
|
2022-06-21 20:37:54 +08:00
|
|
|
time = '即将开始' if event["start_days"] == 0 else f'{str(event["start_days"])}天后开始'
|
|
|
|
body.append({
|
2022-06-22 10:36:40 +08:00
|
|
|
'title': event['title'],
|
|
|
|
'time': time,
|
2022-06-21 20:37:54 +08:00
|
|
|
'online': f'{datetime.strftime(event["start"], r"%m-%d")} ~ {datetime.strftime(event["end"], r"%m-%d")}',
|
2022-06-22 10:36:40 +08:00
|
|
|
'color': event['color'],
|
2022-06-21 20:37:54 +08:00
|
|
|
'banner': event['banner']
|
|
|
|
})
|
|
|
|
|
2022-06-26 11:50:25 +08:00
|
|
|
content = await template.render_async(body=body, css_path=template_path, week=weeks)
|
|
|
|
return await html_to_pic(content, wait=0, viewport={"width": 600, "height": 10})
|