Files
nonebot-plugin-tetris-stats/nonebot_plugin_tetris_stats/utils/render.py
呵呵です fd85140c99 绑定使用图片回复 #61 (#305)
* 🚧 查数据图初版测试

Co-authored-by: C1ystal <m17687496044@163.com>
Co-authored-by: C29H25N3O5 <michaelgu495@gmail.com>

* 🙈 添加一些 ignore 文件

* 🎨 格式化代码

* 🐛 修复格式化导致的样式爆炸

* 💄 优化曲线图观感

* 💄 将雷达图的指示器名称旋转显示

* 💄 查数据图第二版

Co-authored-by: C29H25N3O5 <michaelgu495@gmail.com>

* ✏️ 修复 typo

* 💄 把用户头像文件的引用放到 html 里

* 💄 账户绑定图第一版

Co-authored-by: C1ystal <m17687496044@163.com>
Co-authored-by: C29H25N3O5 <michaelgu495@gmail.com>

* 🚧 模板化测试

*  添加依赖 fastapi

*  通过 FastAPI 提供静态文件

*  添加依赖 jinja2

* 💄 更新数据图模板 (#291)

* feat(template): show actual value

* feat(template): add user avatar

* feat(template): fix radar

* feat(style): fix name container width fixed caused display misplacement

* feat(style): fix vs value wrap display

* feat(template): make check data length in template

* feat(template): update radar data

* feat(jinja): update data

* fix(template): fix typo

* feat(style): prevent sign too long

* feat(template): turn off echarts animation

* chore(deps): add identicon.js

* fix(template): fix typo

* 🙈 更新.gitignore

* 🏗️ 大部分重构为 flex 布局

---------

Co-authored-by: shoucandanghehe <wallfjjd@gmail.com>
Co-authored-by: 呵呵です <51957264+shoucandanghehe@users.noreply.github.com>

*  添加依赖 nonebot_plugin_userinfo

*  通过 FastAPI 托管渲染后的模板

*  新增头像 api 使用 playwright 生成

*  修正模板资源文件引用路径
被托管后的正确路径

* 💄 将绑定图模板化

* 💄 重命名变量

* 🚚 重命名资源

*  使用 jinja2 渲染模板

*  使用 playwright 渲染网页

* 🩹 渲染模板时对 IO 进行一些额外处理

*  添加依赖 pillow

* 🚚 修改托管页面的路由路径

* 💬 优化绑定图文案

*  新增获取自身网络位置的方法

* 🍱 更新 unknown.svg

*  新增获取用户头像的方法

*  绑定消息使用图片回复

*  为 identicon api 添加缓存

* 🔥 删除旧文件

* 🚚 重命名模板

* 📄 添加字体 License

* 🙈 更新.gitignore

---------

Co-authored-by: C1ystal <m17687496044@163.com>
Co-authored-by: C29H25N3O5 <michaelgu495@gmail.com>
Co-authored-by: 渣渣120 <WOSHIZHAZHA120@qq.com>
2024-05-02 01:22:33 +08:00

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,
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,
dspp: str | float,
OR: str | float, # noqa: N803
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)