mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
114 lines
3.4 KiB
Python
114 lines
3.4 KiB
Python
from typing import Optional, Union
|
||
|
||
|
||
class DrawCountManager:
|
||
"""
|
||
抽卡统计保底
|
||
"""
|
||
|
||
def __init__(self, game_draw_count_rule: tuple, star2name: tuple):
|
||
"""
|
||
初始化保底统计
|
||
|
||
例如:DrawCountManager((10, 90, 180), ("4", "5", "5"))
|
||
|
||
抽卡保底需要的次数和返回的对应名称,例如星级等
|
||
|
||
"""
|
||
# 只有保底
|
||
self._data = {}
|
||
self._guarantee_tuple = game_draw_count_rule
|
||
self._star2name = star2name
|
||
|
||
def increase(self, key: int, value: int = 1):
|
||
"""
|
||
用户抽卡次数加1
|
||
"""
|
||
if self._data.get(key) is None:
|
||
self._data[key] = {
|
||
"count": value,
|
||
}
|
||
for x in range(len(self._guarantee_tuple)):
|
||
self._data[key][f"count_{x}"] = 0
|
||
else:
|
||
self._data[key][f"count"] += value
|
||
if self._data[key][f"count"] > self._guarantee_tuple[-1]:
|
||
self._data[key][f"count"] = self._data[key][f"count"] % self._guarantee_tuple[-1]
|
||
|
||
def reset(self, key: int):
|
||
"""
|
||
清空记录
|
||
"""
|
||
del self._data[key]
|
||
|
||
def set_count(self, key: int, type_: int, count: int):
|
||
if self._data.get(key):
|
||
self._data[key][f"count_{type_}"] = count
|
||
|
||
def check(self, key: int, *args) -> Optional[Union[str, int]]:
|
||
"""
|
||
是否保底
|
||
"""
|
||
pass
|
||
|
||
def get_user_count(self, key: int, type_: Optional[int] = None) -> int:
|
||
"""
|
||
获取用户当前抽卡次数
|
||
"""
|
||
if self._data.get(key):
|
||
if type_ is None:
|
||
return self._data[key]["count"]
|
||
return self._data[key][f"count_{type_}"]
|
||
return 0
|
||
|
||
def record_count(self, key: int, type_: int):
|
||
"""
|
||
抽出对应星级后记录当前次数
|
||
"""
|
||
if self._data.get(key):
|
||
self._data[key][f"count_{type_}"] = self._data[key]["count"]
|
||
|
||
|
||
class GenshinCountManager(DrawCountManager):
|
||
|
||
def increase(self, key: int, value: int = 1):
|
||
"""
|
||
用户抽卡次数加1
|
||
"""
|
||
if self._data.get(key) is None:
|
||
self._data[key] = {
|
||
"is_up": False,
|
||
"count": value,
|
||
}
|
||
for x in range(len(self._guarantee_tuple)):
|
||
self._data[key][f"count_{x}"] = 0
|
||
else:
|
||
self._data[key][f"count"] += value
|
||
if self._data[key][f"count"] > self._guarantee_tuple[-1]:
|
||
self._data[key][f"count"] = self._data[key][f"count"] % 180
|
||
|
||
def set_is_up(self, key: int, value: bool):
|
||
if self._data.get(key):
|
||
self._data[key]["is_up"] = value
|
||
|
||
def is_up(self, key: int) -> bool:
|
||
if self._data.get(key):
|
||
return self._data[key]["is_up"]
|
||
return False
|
||
|
||
def check(self, key: int, *args) -> Optional[Union[str, int]]:
|
||
"""
|
||
是否保底
|
||
"""
|
||
# print(self._data)
|
||
if self._data.get(key):
|
||
for i in [1, 0]:
|
||
count = self._data[key]["count"]
|
||
if count - self._data[key][f"count_{i}"] == self._guarantee_tuple[i]:
|
||
if i in [2, 1]:
|
||
# print("clean four count")
|
||
self._data[key][f"count_0"] = self._data[key]['count']
|
||
self._data[key][f"count_{i}"] = self._data[key]['count']
|
||
return self._star2name[i]
|
||
return None
|