mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 06:12:53 +08:00
修复开箱BUG
This commit is contained in:
parent
f2ab119397
commit
b31fbf5810
@ -334,6 +334,7 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
|
|||||||
### 2023/3/5
|
### 2023/3/5
|
||||||
|
|
||||||
* 更新开箱会记录箱子数据以及开箱时箱子价格加入花费
|
* 更新开箱会记录箱子数据以及开箱时箱子价格加入花费
|
||||||
|
* 修复开箱BUG
|
||||||
|
|
||||||
### 2023/3/4
|
### 2023/3/4
|
||||||
|
|
||||||
|
|||||||
@ -26,19 +26,19 @@ class BuffSkin(Model):
|
|||||||
|
|
||||||
img_url = fields.CharField(255)
|
img_url = fields.CharField(255)
|
||||||
"""图片url"""
|
"""图片url"""
|
||||||
steam_price = fields.FloatField(default=0)
|
steam_price: float = fields.FloatField(default=0)
|
||||||
"""steam价格"""
|
"""steam价格"""
|
||||||
weapon_type = fields.CharField(255)
|
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)
|
create_time: datetime = fields.DatetimeField(auto_add_now=True)
|
||||||
@ -58,12 +58,21 @@ class BuffSkin(Model):
|
|||||||
abrasion: str,
|
abrasion: str,
|
||||||
is_stattrak: bool = False,
|
is_stattrak: bool = False,
|
||||||
case_name: Optional[str] = None,
|
case_name: Optional[str] = None,
|
||||||
) -> List["BuffSkin"]:
|
) -> List["BuffSkin"]: # type: ignore
|
||||||
query = cls
|
query = cls
|
||||||
if case_name:
|
if case_name:
|
||||||
query = query.filter(case_name=case_name)
|
query = query.filter(case_name=case_name)
|
||||||
query = query.filter(abrasion=abrasion, is_stattrak=is_stattrak, color=color)
|
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
|
@classmethod
|
||||||
async def _run_script(cls):
|
async def _run_script(cls):
|
||||||
|
|||||||
@ -208,6 +208,8 @@ async def open_multiple_case(
|
|||||||
case_price = 0
|
case_price = 0
|
||||||
if case_skin := await BuffSkin.get_or_none(case_name=case_name, color="CASE"):
|
if case_skin := await BuffSkin.get_or_none(case_name=case_name, color="CASE"):
|
||||||
case_price = case_skin.sell_min_price
|
case_price = case_skin.sell_min_price
|
||||||
|
print(user.today_open_total)
|
||||||
|
cnt = 0
|
||||||
for skin, rand in skin_list:
|
for skin, rand in skin_list:
|
||||||
total_price += skin.sell_min_price
|
total_price += skin.sell_min_price
|
||||||
rand = str(rand)[:11]
|
rand = str(rand)[:11]
|
||||||
@ -218,11 +220,6 @@ async def open_multiple_case(
|
|||||||
if not skin_count.get(color_name):
|
if not skin_count.get(color_name):
|
||||||
skin_count[color_name] = 0
|
skin_count[color_name] = 0
|
||||||
skin_count[color_name] += 1
|
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
|
name = skin.name + "-" + skin.skin_name + "-" + skin.abrasion
|
||||||
img_path = IMAGE_PATH / "csgo_cases" / case / f"{cn2py(name)}.jpg"
|
img_path = IMAGE_PATH / "csgo_cases" / case / f"{cn2py(name)}.jpg"
|
||||||
wImg = BuildImage(200, 270, 200, 200)
|
wImg = BuildImage(200, 270, 200, 200)
|
||||||
@ -232,6 +229,7 @@ async def open_multiple_case(
|
|||||||
(5, 200),
|
(5, 200),
|
||||||
f"{skin.name}{'(StatTrak™)' if skin.is_stattrak else ''} | {skin.skin_name} ({skin.abrasion})",
|
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, 220), f"磨损:{rand}")
|
||||||
await wImg.atext((5, 240), f"价格:{skin.sell_min_price}")
|
await wImg.atext((5, 240), f"价格:{skin.sell_min_price}")
|
||||||
img_list.append(wImg)
|
img_list.append(wImg)
|
||||||
@ -257,6 +255,7 @@ async def open_multiple_case(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
await user.save()
|
await user.save()
|
||||||
|
print(user.today_open_total)
|
||||||
if log_list:
|
if log_list:
|
||||||
await OpenCasesLog.bulk_create(log_list, 10)
|
await OpenCasesLog.bulk_create(log_list, 10)
|
||||||
logger.debug(f"添加 {len(log_list)} 条开箱日志", "开箱", user_qq, group_id)
|
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(
|
@scheduler.scheduled_job(
|
||||||
"cron",
|
"cron",
|
||||||
hour=0,
|
hour=23,
|
||||||
minute=1,
|
minute=9,
|
||||||
)
|
)
|
||||||
async def _():
|
async def _():
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
@ -453,7 +452,10 @@ async def update():
|
|||||||
logger.debug(f"预计自动更新武器箱 {len(case_list)} 个", "更新武器箱")
|
logger.debug(f"预计自动更新武器箱 {len(case_list)} 个", "更新武器箱")
|
||||||
for case_name in case_list:
|
for case_name in case_list:
|
||||||
logger.debug(f"开始自动更新武器箱: {case_name}", "更新武器箱")
|
logger.debug(f"开始自动更新武器箱: {case_name}", "更新武器箱")
|
||||||
await update_case_data(case_name)
|
try:
|
||||||
rand = random.randint(300, 500)
|
await update_case_data(case_name)
|
||||||
logger.debug(f"成功自动更新武器箱: {case_name}, 将在 {rand} 秒后再次更新下一武器箱", "更新武器箱")
|
rand = random.randint(300, 500)
|
||||||
await asyncio.sleep(rand)
|
logger.debug(f"成功自动更新武器箱: {case_name}, 将在 {rand} 秒后再次更新下一武器箱", "更新武器箱")
|
||||||
|
await asyncio.sleep(rand)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"自动更新武器箱: {case_name}", e=e)
|
||||||
|
|||||||
@ -68,8 +68,8 @@ async def update_case_data(case_name: str) -> str:
|
|||||||
data_list_, total = await search_skin_page(case_name, page)
|
data_list_, total = await search_skin_page(case_name, page)
|
||||||
if isinstance(data_list_, list):
|
if isinstance(data_list_, list):
|
||||||
data_list += data_list_
|
data_list += data_list_
|
||||||
create_list = []
|
create_list: List[BuffSkin] = []
|
||||||
update_list = []
|
update_list: List[BuffSkin] = []
|
||||||
log_list = []
|
log_list = []
|
||||||
case_name_py = cn2py(case_name)
|
case_name_py = cn2py(case_name)
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
@ -113,11 +113,42 @@ async def update_case_data(case_name: str) -> str:
|
|||||||
logger.debug(f"更新武器箱: [<u><e>{case_name}</e></u>], 创建 {len(create_list)} 个皮肤!")
|
logger.debug(f"更新武器箱: [<u><e>{case_name}</e></u>], 创建 {len(create_list)} 个皮肤!")
|
||||||
await BuffSkin.bulk_create(create_list, 10)
|
await BuffSkin.bulk_create(create_list, 10)
|
||||||
if update_list:
|
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"更新武器箱: [<u><c>{case_name}</c></u>], 更新 {len(create_list)} 个皮肤!")
|
logger.debug(f"更新武器箱: [<u><c>{case_name}</c></u>], 更新 {len(create_list)} 个皮肤!")
|
||||||
await BuffSkin.bulk_update(
|
await BuffSkin.bulk_update(
|
||||||
update_list,
|
_update_list,
|
||||||
[
|
[
|
||||||
"skin_price",
|
|
||||||
"steam_price",
|
"steam_price",
|
||||||
"buy_max_price",
|
"buy_max_price",
|
||||||
"buy_num",
|
"buy_num",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user