Files
nonebot-plugin-tetris-stats/nonebot_plugin_tetris_stats/utils/render.py

70 lines
1.6 KiB
Python

from typing import Any, Literal, overload
from jinja2 import Environment, FileSystemLoader
from ..game_data_processor.io_data_processor.typing import Rank
from ..templates import path
from .typing import GameType
Bind = Literal['bind.j2.html']
Data = Literal['data.j2.html']
env = Environment(
loader=FileSystemLoader(path), autoescape=True, trim_blocks=True, lstrip_blocks=True, enable_async=True
)
@overload
async def render(
template: Bind,
*,
user_avatar: str,
state: Literal['error', 'success', 'unknown', 'unlink', 'unverified'],
bot_avatar: str,
game_type: GameType,
user_name: str,
bot_name: str,
command: str,
) -> str: ...
@overload
async def render(
template: Data,
*,
user_avatar: str,
user_name: str,
user_sign: str | None,
game_type: Literal['TETR.IO'],
ranking: str | float,
rd: str | float,
rank: Rank,
TR: str | float, # noqa: N803
global_rank: str | int,
lpm: str | float,
pps: str | float,
apm: str | float,
apl: str | float,
adpm: str | float,
adpl: str | float,
vs: str | float,
sprint: str,
blitz: str,
data: list[list[int]],
split_value: int,
value_max: int,
value_min: int,
offset: int,
app: str | float,
dsps: str | float,
dspp: str | float,
ci: str | float,
ge: str | float,
) -> str: ...
async def render(template: Bind | Data, **kwargs: Any) -> str:
if kwargs['game_type'] == 'IO':
kwargs['game_type'] = 'TETR.IO'
return await env.get_template(template).render_async(**kwargs)