From b31fbf581018d40de4f4d75455b8cf53e7940fc7 Mon Sep 17 00:00:00 2001
From: HibiKier <775757368@qq.com>
Date: Sun, 5 Mar 2023 23:11:04 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E7=AE=B1BUG?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 1 +
plugins/open_cases/models/buff_skin.py | 25 +++++++++++------
plugins/open_cases/open_cases_c.py | 24 ++++++++--------
plugins/open_cases/utils.py | 39 +++++++++++++++++++++++---
4 files changed, 66 insertions(+), 23 deletions(-)
diff --git a/README.md b/README.md
index 96f27435..a3faddcb 100644
--- a/README.md
+++ b/README.md
@@ -334,6 +334,7 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
### 2023/3/5
* 更新开箱会记录箱子数据以及开箱时箱子价格加入花费
+* 修复开箱BUG
### 2023/3/4
diff --git a/plugins/open_cases/models/buff_skin.py b/plugins/open_cases/models/buff_skin.py
index 6070b59c..60b7faa9 100644
--- a/plugins/open_cases/models/buff_skin.py
+++ b/plugins/open_cases/models/buff_skin.py
@@ -26,19 +26,19 @@ class BuffSkin(Model):
img_url = fields.CharField(255)
"""图片url"""
- steam_price = fields.FloatField(default=0)
+ steam_price: float = fields.FloatField(default=0)
"""steam价格"""
weapon_type = fields.CharField(255)
"""枪械类型"""
- buy_max_price = fields.FloatField(default=0)
+ buy_max_price: float = fields.FloatField(default=0)
"""最大求购价格"""
- buy_num = fields.IntField(default=0)
+ buy_num: int = fields.IntField(default=0)
"""求购数量"""
- sell_min_price = fields.FloatField(default=0)
+ sell_min_price: float = fields.FloatField(default=0)
"""售卖最低价格"""
- sell_num = fields.IntField(default=0)
+ sell_num: int = fields.IntField(default=0)
"""出售个数"""
- sell_reference_price = fields.FloatField(default=0)
+ sell_reference_price: float = fields.FloatField(default=0)
"""参考价格"""
create_time: datetime = fields.DatetimeField(auto_add_now=True)
@@ -58,12 +58,21 @@ class BuffSkin(Model):
abrasion: str,
is_stattrak: bool = False,
case_name: Optional[str] = None,
- ) -> List["BuffSkin"]:
+ ) -> List["BuffSkin"]: # type: ignore
query = cls
if case_name:
query = query.filter(case_name=case_name)
query = query.filter(abrasion=abrasion, is_stattrak=is_stattrak, color=color)
- return await query.annotate(rand=Random()).limit(num) # type:ignore
+ skin_list = await query.annotate(rand=Random()).limit(num) # type:ignore
+ num_ = num
+ cnt = 0
+ while len(skin_list) < num:
+ cnt += 1
+ num_ = num - len(skin_list)
+ skin_list += await query.annotate(rand=Random()).limit(num_)
+ if cnt > 10:
+ break
+ return skin_list # type: ignore
@classmethod
async def _run_script(cls):
diff --git a/plugins/open_cases/open_cases_c.py b/plugins/open_cases/open_cases_c.py
index 84b7fbf0..bb85a082 100755
--- a/plugins/open_cases/open_cases_c.py
+++ b/plugins/open_cases/open_cases_c.py
@@ -208,6 +208,8 @@ async def open_multiple_case(
case_price = 0
if case_skin := await BuffSkin.get_or_none(case_name=case_name, color="CASE"):
case_price = case_skin.sell_min_price
+ print(user.today_open_total)
+ cnt = 0
for skin, rand in skin_list:
total_price += skin.sell_min_price
rand = str(rand)[:11]
@@ -218,11 +220,6 @@ async def open_multiple_case(
if not skin_count.get(color_name):
skin_count[color_name] = 0
skin_count[color_name] += 1
- if skin.color == "KNIFE":
- user.knifes_name = (
- user.knifes_name
- + f"{case}||{skin.name}{'(StatTrak™)' if skin.is_stattrak else ''} | {skin.skin_name} ({skin.abrasion}) 磨损:{rand}, 价格:{skin.sell_min_price},"
- )
name = skin.name + "-" + skin.skin_name + "-" + skin.abrasion
img_path = IMAGE_PATH / "csgo_cases" / case / f"{cn2py(name)}.jpg"
wImg = BuildImage(200, 270, 200, 200)
@@ -232,6 +229,7 @@ async def open_multiple_case(
(5, 200),
f"{skin.name}{'(StatTrak™)' if skin.is_stattrak else ''} | {skin.skin_name} ({skin.abrasion})",
)
+ cnt += 1
await wImg.atext((5, 220), f"磨损:{rand}")
await wImg.atext((5, 240), f"价格:{skin.sell_min_price}")
img_list.append(wImg)
@@ -257,6 +255,7 @@ async def open_multiple_case(
)
)
await user.save()
+ print(user.today_open_total)
if log_list:
await OpenCasesLog.bulk_create(log_list, 10)
logger.debug(f"添加 {len(log_list)} 条开箱日志", "开箱", user_qq, group_id)
@@ -430,8 +429,8 @@ async def get_old_knife(user_id: int, group_id: int) -> List[OpenCasesLog]:
@scheduler.scheduled_job(
"cron",
- hour=0,
- minute=1,
+ hour=23,
+ minute=9,
)
async def _():
now = datetime.now()
@@ -453,7 +452,10 @@ async def update():
logger.debug(f"预计自动更新武器箱 {len(case_list)} 个", "更新武器箱")
for case_name in case_list:
logger.debug(f"开始自动更新武器箱: {case_name}", "更新武器箱")
- await update_case_data(case_name)
- rand = random.randint(300, 500)
- logger.debug(f"成功自动更新武器箱: {case_name}, 将在 {rand} 秒后再次更新下一武器箱", "更新武器箱")
- await asyncio.sleep(rand)
+ try:
+ await update_case_data(case_name)
+ rand = random.randint(300, 500)
+ logger.debug(f"成功自动更新武器箱: {case_name}, 将在 {rand} 秒后再次更新下一武器箱", "更新武器箱")
+ await asyncio.sleep(rand)
+ except Exception as e:
+ logger.error(f"自动更新武器箱: {case_name}", e=e)
diff --git a/plugins/open_cases/utils.py b/plugins/open_cases/utils.py
index c30fa423..02f0fb15 100755
--- a/plugins/open_cases/utils.py
+++ b/plugins/open_cases/utils.py
@@ -68,8 +68,8 @@ async def update_case_data(case_name: str) -> str:
data_list_, total = await search_skin_page(case_name, page)
if isinstance(data_list_, list):
data_list += data_list_
- create_list = []
- update_list = []
+ create_list: List[BuffSkin] = []
+ update_list: List[BuffSkin] = []
log_list = []
case_name_py = cn2py(case_name)
now = datetime.now()
@@ -113,11 +113,42 @@ async def update_case_data(case_name: str) -> str:
logger.debug(f"更新武器箱: [{case_name}], 创建 {len(create_list)} 个皮肤!")
await BuffSkin.bulk_create(create_list, 10)
if update_list:
+ abrasion_list = []
+ name_list = []
+ skin_name_list = []
+ for skin in update_list:
+ if skin.abrasion not in abrasion_list:
+ abrasion_list.append(skin.abrasion)
+ if skin.name not in name_list:
+ name_list.append(skin.name)
+ if skin.skin_name not in skin_name_list:
+ skin_name_list.append(skin.skin_name)
+ db_data = await BuffSkin.filter(
+ case_name=case_name,
+ skin_name__in=skin_name_list,
+ name__in=name_list,
+ abrasion__in=abrasion_list,
+ ).all()
+ _update_list = []
+ for data in db_data:
+ for skin in update_list:
+ if (
+ data.name == skin.name
+ and data.skin_name == skin.skin_name
+ and data.abrasion == skin.abrasion
+ ):
+ data.steam_price = skin.steam_price
+ data.buy_max_price = skin.buy_max_price
+ data.buy_num = skin.buy_num
+ data.sell_min_price = skin.sell_min_price
+ data.sell_num = skin.sell_num
+ data.sell_reference_price = skin.sell_reference_price
+ data.update_time = skin.update_time
+ _update_list.append(data)
logger.debug(f"更新武器箱: [{case_name}], 更新 {len(create_list)} 个皮肤!")
await BuffSkin.bulk_update(
- update_list,
+ _update_list,
[
- "skin_price",
"steam_price",
"buy_max_price",
"buy_num",