diff --git a/zhenxun/builtin_plugins/shop/_data_source.py b/zhenxun/builtin_plugins/shop/_data_source.py index 99dc7e1d..1e4af391 100644 --- a/zhenxun/builtin_plugins/shop/_data_source.py +++ b/zhenxun/builtin_plugins/shop/_data_source.py @@ -410,15 +410,14 @@ class ShopManage: return "购买的数量要大于0!" goods_list = ( await GoodsInfo.filter( - Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0), - goods_limit_time=0, + Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0) ) .annotate() .order_by("id") .all() ) if name.isdigit(): - if int(name) >= len(goods_list) or int(name) <= 0: + if int(name) > len(goods_list) or int(name) <= 0: return "道具编号不存在..." goods = goods_list[int(name) - 1] elif filter_goods := [g for g in goods_list if g.goods_name == name]: diff --git a/zhenxun/builtin_plugins/shop/html_image.py b/zhenxun/builtin_plugins/shop/html_image.py index b3bfe87f..2d7948cb 100644 --- a/zhenxun/builtin_plugins/shop/html_image.py +++ b/zhenxun/builtin_plugins/shop/html_image.py @@ -1,3 +1,4 @@ +from datetime import datetime import time from nonebot_plugin_htmlrender import template_to_pic @@ -19,12 +20,28 @@ class GoodsItem(BaseModel): """分区名称""" +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), - goods_limit_time=0, + Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0) ) .annotate() .order_by("id") @@ -48,6 +65,8 @@ async def html_image() -> bytes: { "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, diff --git a/zhenxun/builtin_plugins/shop/normal_image.py b/zhenxun/builtin_plugins/shop/normal_image.py index 3299ab6e..7b5004cf 100644 --- a/zhenxun/builtin_plugins/shop/normal_image.py +++ b/zhenxun/builtin_plugins/shop/normal_image.py @@ -19,8 +19,7 @@ async def normal_image() -> bytes: h = 10 goods_list = ( await GoodsInfo.filter( - Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0), - goods_limit_time=0, + Q(goods_limit_time__gte=time.time()) | Q(goods_limit_time=0) ) .annotate() .order_by("id")