mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-05 11:49:59 +08:00
update
This commit is contained in:
+88
-13
@@ -6,12 +6,12 @@ from aiohttp.client_exceptions import InvalidURL
|
||||
from typing import List, Union, Set
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
from .config import path_dict
|
||||
from .config import path_dict, DRAW_PATH
|
||||
import nonebot
|
||||
from util.utils import cn2py
|
||||
import pypinyin
|
||||
from util.img_utils import CreateImg
|
||||
from util.user_agent import get_user_agent
|
||||
from configs.path_config import IMAGE_PATH
|
||||
import random
|
||||
from dataclasses import dataclass
|
||||
from services.log import logger
|
||||
try:
|
||||
@@ -23,6 +23,9 @@ except ModuleNotFoundError:
|
||||
driver: nonebot.Driver = nonebot.get_driver()
|
||||
|
||||
|
||||
headers = {'User-Agent': '"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)"'}
|
||||
|
||||
|
||||
@dataclass
|
||||
class BaseData:
|
||||
name: str
|
||||
@@ -40,21 +43,20 @@ class UpEvent:
|
||||
async def download_img(url: str, path: str, name: str) -> bool:
|
||||
path = path.split('_')[0]
|
||||
codename = cn2py(name)
|
||||
# if not _p.exists():
|
||||
# _p.mkdir(parents=True, exist_ok=True)
|
||||
Path(IMAGE_PATH + f'/draw_card/{path}').mkdir(exist_ok=True, parents=True)
|
||||
if not os.path.exists(IMAGE_PATH + f'/draw_card/{path}/{codename}.png'):
|
||||
try:
|
||||
async with aiohttp.ClientSession(headers=get_user_agent()) as session:
|
||||
async with aiohttp.ClientSession(headers=headers) as session:
|
||||
async with session.get(url, timeout=7) as response:
|
||||
async with aiofiles.open(IMAGE_PATH + f'/draw_card/{path}/{codename}.png', 'wb') as f:
|
||||
await f.write(await response.read())
|
||||
logger.info(f'下载 {path_dict[path]} 图片成功,名称:{name},url:{url}')
|
||||
return True
|
||||
except TimeoutError:
|
||||
logger.info(f'下载 {path_dict[path]} 图片超时,名称:{name},url:{url}')
|
||||
logger.warning(f'下载 {path_dict[path]} 图片超时,名称:{name},url:{url}')
|
||||
return False
|
||||
except InvalidURL:
|
||||
logger.info(f'下载 {path_dict[path]} 链接错误,名称:{name},url:{url}')
|
||||
logger.warning(f'下载 {path_dict[path]} 链接错误,名称:{name},url:{url}')
|
||||
return False
|
||||
else:
|
||||
# logger.info(f'{path_dict[path]} 图片 {name} 已存在')
|
||||
@@ -64,7 +66,7 @@ async def download_img(url: str, path: str, name: str) -> bool:
|
||||
@driver.on_startup
|
||||
def _check_dir():
|
||||
for dir_name in path_dict.keys():
|
||||
_p = Path(IMAGE_PATH + f'/draw_card/' + dir_name)
|
||||
_p = Path(DRAW_PATH + f'/draw_card/' + dir_name)
|
||||
if not _p.exists():
|
||||
_p.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
@@ -117,13 +119,13 @@ def _pst(h: int, img_list: list, game_name: str, color_list: list):
|
||||
else:
|
||||
b = CreateImg(100, 100, background=img)
|
||||
except FileNotFoundError:
|
||||
print(f'{img} not exists')
|
||||
logger.warning(f'{img} not exists')
|
||||
b = CreateImg(100, 100, color='black')
|
||||
card_img.paste(b)
|
||||
return card_img
|
||||
|
||||
|
||||
def init_star_rst(star_list: list, cnlist: list, max_star_list: list, max_star_olist: list, up_list: list = None) -> str:
|
||||
def init_star_rst(star_list: list, cnlist: list, max_star_list: list, max_star_index_list: list, up_list: list = None) -> str:
|
||||
if not up_list:
|
||||
up_list = []
|
||||
rst = ''
|
||||
@@ -133,9 +135,9 @@ def init_star_rst(star_list: list, cnlist: list, max_star_list: list, max_star_o
|
||||
rst += '\n'
|
||||
for i in range(len(max_star_list)):
|
||||
if max_star_list[i] in up_list:
|
||||
rst += f'第 {max_star_olist[i]+1} 抽获取UP {max_star_list[i]}\n'
|
||||
rst += f'第 {max_star_index_list[i]+1} 抽获取UP {max_star_list[i]}\n'
|
||||
else:
|
||||
rst += f'第 {max_star_olist[i]+1} 抽获取 {max_star_list[i]}\n'
|
||||
rst += f'第 {max_star_index_list[i]+1} 抽获取 {max_star_list[i]}\n'
|
||||
return rst
|
||||
|
||||
|
||||
@@ -150,6 +152,28 @@ def max_card(_dict: dict):
|
||||
# return rst[:-1]
|
||||
|
||||
|
||||
def is_number(s) -> bool:
|
||||
try:
|
||||
float(s)
|
||||
return True
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
import unicodedata
|
||||
unicodedata.numeric(s)
|
||||
return True
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
return False
|
||||
|
||||
|
||||
def cn2py(word) -> str:
|
||||
temp = ""
|
||||
for i in pypinyin.pinyin(word, style=pypinyin.NORMAL):
|
||||
temp += ''.join(i)
|
||||
return temp
|
||||
|
||||
|
||||
def set_list(lst: List[BaseData]) -> list:
|
||||
tmp = []
|
||||
name_lst = []
|
||||
@@ -159,3 +183,54 @@ def set_list(lst: List[BaseData]) -> list:
|
||||
name_lst.append(x.name)
|
||||
return tmp
|
||||
|
||||
|
||||
def get_star(star_lst: List[int], probability_lst: List[float]) -> int:
|
||||
rand = random.random()
|
||||
add = 0
|
||||
tmp_lst = [(0, probability_lst[0])]
|
||||
for i in range(1, len(probability_lst) - 1):
|
||||
add += probability_lst[i - 1]
|
||||
tmp_lst.append((tmp_lst[i - 1][1], probability_lst[i] + add))
|
||||
tmp_lst.append((tmp_lst[-1][1], 1))
|
||||
for i in range(len(tmp_lst)):
|
||||
if tmp_lst[i][0] <= rand <= tmp_lst[i][1]:
|
||||
return star_lst[i]
|
||||
|
||||
|
||||
# 整理数据
|
||||
def format_card_information(count: int, star_list: List[int], func, pool_name: str = ''):
|
||||
max_star_lst = [] # 获取的最高星级角色列表
|
||||
max_index_lst = [] # 获取最高星级角色的次数
|
||||
obj_list = [] # 获取所有角色
|
||||
obj_dict = {} # 获取角色次数字典
|
||||
for i in range(count):
|
||||
if pool_name:
|
||||
obj, code = func(pool_name)
|
||||
else:
|
||||
obj, code = func()
|
||||
star_list[code] += 1
|
||||
if code == 0:
|
||||
max_star_lst.append(obj.name)
|
||||
max_index_lst.append(i)
|
||||
try:
|
||||
obj_dict[obj.name] += 1
|
||||
except KeyError:
|
||||
obj_dict[obj.name] = 1
|
||||
obj_list.append(obj)
|
||||
return obj_list, obj_dict, max_star_lst, star_list, max_index_lst
|
||||
|
||||
|
||||
# 检测次数是否合法
|
||||
def check_num(num: str, max_num: int) -> 'str, bool':
|
||||
if is_number(num):
|
||||
try:
|
||||
num = int(num)
|
||||
except ValueError:
|
||||
return '必!须!是!数!字!', False
|
||||
if num > max_num:
|
||||
return '一井都满不足不了你嘛!快爬开!', False
|
||||
if num < 1:
|
||||
return '虚空抽卡???', False
|
||||
else:
|
||||
return str(num), True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user