From f76ae521d91b4124959b392eb2331b85fbb8ec41 Mon Sep 17 00:00:00 2001 From: webjoin111 <455457521@qq.com> Date: Thu, 14 Aug 2025 22:08:15 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(shop):=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=95=86=E5=BA=97HTML=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhenxun/builtin_plugins/shop/html_image.py | 90 ---------------------- 1 file changed, 90 deletions(-) delete mode 100644 zhenxun/builtin_plugins/shop/html_image.py diff --git a/zhenxun/builtin_plugins/shop/html_image.py b/zhenxun/builtin_plugins/shop/html_image.py deleted file mode 100644 index 59de1257..00000000 --- a/zhenxun/builtin_plugins/shop/html_image.py +++ /dev/null @@ -1,90 +0,0 @@ -from datetime import datetime -import time - -from nonebot_plugin_htmlrender import template_to_pic -from pydantic import BaseModel -from tortoise.expressions import Q - -from zhenxun.configs.config import BotConfig -from zhenxun.configs.path_config import THEMES_PATH -from zhenxun.models.goods_info import GoodsInfo -from zhenxun.utils._build_image import BuildImage - -from .config import ICON_PATH - - -class GoodsItem(BaseModel): - goods_list: list[dict] - """商品列表""" - partition: str - """分区名称""" - - -def get_limit_time(end_time: int): - now = int(time.time()) - if now > end_time: - return None - current_datetime = datetime.fromtimestamp(now) - end_datetime = datetime.fromtimestamp(end_time) - time_difference = end_datetime - current_datetime - total_seconds = time_difference.total_seconds() - hours = int(total_seconds // 3600) - minutes = int((total_seconds % 3600) // 60) - return f"{hours}:{minutes}" - - -def get_discount(price: int, discount: float): - return None if discount == 1.0 else int(price * discount) - - -async def html_image() -> bytes: - """构建图片""" - goods_list = ( - await GoodsInfo.filter( - Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0) - ) - .annotate() - .order_by("id") - .all() - ) - partition_dict: dict[str, list[dict]] = {} - for idx, goods in enumerate(goods_list): - if not goods.partition: - goods.partition = "默认分区" - if goods.partition not in partition_dict: - partition_dict[goods.partition] = [] - icon = None - if goods.icon: - path = ICON_PATH / goods.icon - if path.exists(): - icon = ( - "data:image/png;base64," - f"{BuildImage.open(ICON_PATH / goods.icon).pic2bs4()[9:]}" - ) - partition_dict[goods.partition].append( - { - "id": idx + 1, - "price": goods.goods_price, - "discount_price": get_discount(goods.goods_price, goods.goods_discount), - "limit_time": get_limit_time(goods.goods_limit_time), - "daily_limit": goods.daily_limit or "∞", - "name": goods.goods_name, - "icon": icon, - "description": goods.goods_description, - } - ) - data_list = [ - GoodsItem(goods_list=value, partition=partition) - for partition, value in partition_dict.items() - ] - template_dir = THEMES_PATH / "default" / "templates" / "shop" - return await template_to_pic( - template_path=str(template_dir.absolute()), - template_name="main.html", - templates={"name": BotConfig.self_nickname, "data_list": data_list}, - pages={ - "viewport": {"width": 850, "height": 1024}, - "base_url": f"file://{THEMES_PATH.parent.absolute()}", - }, - wait=2, - )