⬆️ pre-commit-ci自动升级 (#617)

* ⬆️ `pre-commit-ci`自动升级

updates:
- [github.com/psf/black: 23.12.1 → 24.1.1](https://github.com/psf/black/compare/23.12.1...24.1.1)
- [github.com/pycqa/flake8: 6.1.0 → 7.0.0](https://github.com/pycqa/flake8/compare/6.1.0...7.0.0)

* 🚨 `pre-commit-ci`修复格式错误

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
pre-commit-ci[bot] 2024-02-09 21:56:00 +08:00 committed by GitHub
parent e76a236d5c
commit 5140ab2dc3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
41 changed files with 279 additions and 99 deletions

View File

@ -13,12 +13,12 @@ repos:
- id: isort - id: isort
- repo: https://github.com/psf/black - repo: https://github.com/psf/black
rev: 23.12.1 rev: 24.1.1
hooks: hooks:
- id: black - id: black
- repo: https://github.com/pycqa/flake8 - repo: https://github.com/pycqa/flake8
rev: 6.1.0 rev: 7.0.0
hooks: hooks:
- id: flake8 - id: flake8

View File

@ -72,7 +72,9 @@ async def ann_list_card() -> bytes:
bg, new_item, (x, list_head.height + (index * new_item.height)) bg, new_item, (x, list_head.height + (index * new_item.height))
) )
tip = '*可以使用 原神公告#0000(右上角ID) 来查看详细内容, 例子: 原神公告#2434' tip = (
'*可以使用 原神公告#0000(右上角ID) 来查看详细内容, 例子: 原神公告#2434'
)
draw_text_by_line( draw_text_by_line(
bg, (0, bg.height - 35), tip, gs_font_18, '#767779', 1000, True bg, (0, bg.height - 35), tip, gs_font_18, '#767779', 1000, True
) )

View File

@ -61,9 +61,11 @@ async def send_check_cookie(bot: Bot, ev: Event):
else: else:
return_str = '\n'.join( return_str = '\n'.join(
[ [
(
f'uid{user.uid}/mys{user.mys_id}的Cookies是正常的!' f'uid{user.uid}/mys{user.mys_id}的Cookies是正常的!'
if user not in invalid_user if user not in invalid_user
else f'uid{user.uid}的Cookies是异常的!已删除该条Cookies!' else f'uid{user.uid}的Cookies是异常的!已删除该条Cookies!'
)
for user in user_list for user in user_list
] ]
) )
@ -99,15 +101,20 @@ async def send_check_stoken(bot: Bot, ev: Event):
if len(user_list) > 4: if len(user_list) > 4:
im = f'正常Stoken数量: {len(user_list) - len(invalid_user)}' im = f'正常Stoken数量: {len(user_list) - len(invalid_user)}'
invalid = '\n'.join( invalid = '\n'.join(
[f'uid{user.uid}的Stoken是异常的!已清除Stoken!\n' for user in invalid_user] [
f'uid{user.uid}的Stoken是异常的!已清除Stoken!\n'
for user in invalid_user
]
) )
return_str = f'{im}\n{invalid if invalid else "无失效Stoken!"}' return_str = f'{im}\n{invalid if invalid else "无失效Stoken!"}'
else: else:
return_str = '\n'.join( return_str = '\n'.join(
[ [
(
f'uid{user.uid}/mys{user.mys_id}的Stoken是正常的!' f'uid{user.uid}/mys{user.mys_id}的Stoken是正常的!'
if user not in invalid_user if user not in invalid_user
else f'uid{user.uid}的Stoken是异常的!已清除Stoken!' else f'uid{user.uid}的Stoken是异常的!已清除Stoken!'
)
for user in user_list for user in user_list
] ]
) )

View File

@ -20,12 +20,18 @@ CONIFG_DEFAULT: Dict[str, GSC] = {
'原神公告推送ID列表', '原神公告推送ID列表',
[], [],
), ),
'SignTime': GsListStrConfig('每晚签到时间设置', '每晚米游社签到时间设置(时,分)', ['0', '38']), 'SignTime': GsListStrConfig(
'每晚签到时间设置', '每晚米游社签到时间设置(时,分)', ['0', '38']
),
'BBSTaskTime': GsListStrConfig( 'BBSTaskTime': GsListStrConfig(
'每晚米游社任务时间设置', '每晚米游社任务时间设置(时,分)', ['1', '41'] '每晚米游社任务时间设置',
'每晚米游社任务时间设置(时,分)',
['1', '41'],
), ),
'GetDrawTaskTime': GsListStrConfig( 'GetDrawTaskTime': GsListStrConfig(
'每晚留影叙佳期任务时间设置', '每晚留影叙佳期任务时间设置(时,分)', ['3', '25'] '每晚留影叙佳期任务时间设置',
'每晚留影叙佳期任务时间设置(时,分)',
['3', '25'],
), ),
'MhyBBSCoinReport': GsBoolConfig( 'MhyBBSCoinReport': GsBoolConfig(
'米游币推送', '米游币推送',

View File

@ -91,7 +91,9 @@ async def set_config_func(
# 执行设置 # 执行设置
if query is not None: if query is not None:
gsconfig.set_config(name, query) gsconfig.set_config(name, query)
im = '成功设置{}{}'.format(config_name, '' if query else '') im = '成功设置{}{}'.format(
config_name, '' if query else ''
)
else: else:
im = '未传入参数query!' im = '未传入参数query!'
else: else:

View File

@ -9,7 +9,9 @@ from .draw_daily_cost import draw_daily_cost_img
sv_daily_cost = SV('查询每日材料') sv_daily_cost = SV('查询每日材料')
@sv_daily_cost.on_command(('每日材料', '今日材料', '每日素材', '今日素材'), block=True) @sv_daily_cost.on_command(
('每日材料', '今日材料', '每日素材', '今日素材'), block=True
)
async def send_collection_info(bot: Bot, ev: Event): async def send_collection_info(bot: Bot, ev: Event):
logger.info('开始执行[每日材料]') logger.info('开始执行[每日材料]')
im = await draw_daily_cost_img() im = await draw_daily_cost_img()

View File

@ -231,7 +231,9 @@ async def contrast_char_info(bot: Bot, ev: Event):
return await bot.send('参考格式: 对比面板 公子 公子换可莉圣遗物') return await bot.send('参考格式: 对比面板 公子 公子换可莉圣遗物')
contrast_list = ev.text.strip().split(' ') contrast_list = ev.text.strip().split(' ')
if len(contrast_list) <= 1: if len(contrast_list) <= 1:
return await bot.send('输入格式错误...参考格式: 对比面板 公子 公子换可莉圣遗物') return await bot.send(
'输入格式错误...参考格式: 对比面板 公子 公子换可莉圣遗物'
)
elif len(contrast_list) >= 4: elif len(contrast_list) >= 4:
return await bot.send('不支持对比四个及以上的面板...') return await bot.send('不支持对比四个及以上的面板...')
@ -244,7 +246,9 @@ async def contrast_char_info(bot: Bot, ev: Event):
elif isinstance(im, Tuple): elif isinstance(im, Tuple):
data = im[0] data = im[0]
if isinstance(data, bytes): if isinstance(data, bytes):
return await bot.send('输入了错误的格式...参考格式: 对比面板 公子 公子换可莉圣遗物') return await bot.send(
'输入了错误的格式...参考格式: 对比面板 公子 公子换可莉圣遗物'
)
elif isinstance(data, str): elif isinstance(data, str):
return await bot.send(data) return await bot.send(data)
else: else:
@ -262,10 +266,14 @@ async def contrast_char_info(bot: Bot, ev: Event):
@sv_get_enka.on_command('保存面板') @sv_get_enka.on_command('保存面板')
async def save_char_info(bot: Bot, ev: Event): async def save_char_info(bot: Bot, ev: Event):
if not ev.text.strip(): if not ev.text.strip():
return await bot.send('后面需要跟自定义的保存名字\n例如:保存面板公子为核爆公子') return await bot.send(
'后面需要跟自定义的保存名字\n例如:保存面板公子为核爆公子'
)
save_list = ev.text.strip().split('') save_list = ev.text.strip().split('')
if len(save_list) <= 1: if len(save_list) <= 1:
return await bot.send('输入格式错误...参考格式: 保存面板公子为核爆公子') return await bot.send(
'输入格式错误...参考格式: 保存面板公子为核爆公子'
)
uid = await get_uid(bot, ev) uid = await get_uid(bot, ev)
if uid is None: if uid is None:

View File

@ -47,22 +47,32 @@ async def get_weight_temp(prop: dict, attr: str) -> List[float]:
weight = [] weight = []
if '攻击' in attr: if '攻击' in attr:
weight.append( weight.append(
(prop['atk_green'] / prop['baseAtk']) * 100 / WEIGHT_MAP['百分比攻击力'] (prop['atk_green'] / prop['baseAtk'])
* 100
/ WEIGHT_MAP['百分比攻击力']
) )
elif '生命' in attr: elif '生命' in attr:
weight.append( weight.append(
(prop['hp_green'] / prop['baseHp']) * 100 / WEIGHT_MAP['百分比血量'] (prop['hp_green'] / prop['baseHp'])
* 100
/ WEIGHT_MAP['百分比血量']
) )
elif '防御' in attr: elif '防御' in attr:
weight.append( weight.append(
(prop['def_green'] / prop['baseDef']) * 100 / WEIGHT_MAP['百分比防御力'] (prop['def_green'] / prop['baseDef'])
* 100
/ WEIGHT_MAP['百分比防御力']
) )
elif '精通' in attr: elif '精通' in attr:
weight.append(prop['elementalMastery'] / WEIGHT_MAP['元素精通']) weight.append(prop['elementalMastery'] / WEIGHT_MAP['元素精通'])
elif '充能' in attr: elif '充能' in attr:
weight.append(prop['energyRecharge'] * 100 / WEIGHT_MAP['元素充能效率']) weight.append(
prop['energyRecharge'] * 100 / WEIGHT_MAP['元素充能效率']
)
elif '物伤' in attr: elif '物伤' in attr:
weight.append(prop['physicalDmgBonus'] * 100 / WEIGHT_MAP['物理伤害加成']) weight.append(
prop['physicalDmgBonus'] * 100 / WEIGHT_MAP['物理伤害加成']
)
elif '' in attr: elif '' in attr:
weight.append(prop['dmgBonus'] * 100 / WEIGHT_MAP['元素伤害加成']) weight.append(prop['dmgBonus'] * 100 / WEIGHT_MAP['元素伤害加成'])
elif '治疗' in attr: elif '治疗' in attr:

View File

@ -123,7 +123,9 @@ async def draw_lib(ev: Event, uid: str, num: int) -> Union[bytes, str]:
) )
extra_notice = ( extra_notice = (
f'可用 圣遗物仓库{num+1} 命令查看第{num+1}' if num < all_page else '暂无更多页数' f'可用 圣遗物仓库{num+1} 命令查看第{num+1}'
if num < all_page
else '暂无更多页数'
) )
bg_draw.text( bg_draw.text(

View File

@ -415,7 +415,9 @@ async def get_char_img(
.resize((1421, 800)) .resize((1421, 800))
) )
else: else:
char_img = Image.open(GACHA_IMG_PATH / f'{char_name}.png') # 角色图像 char_img = Image.open(
GACHA_IMG_PATH / f'{char_name}.png'
) # 角色图像
# 确定图片的长宽 # 确定图片的长宽
w, h = char_img.size w, h = char_img.size
if (w, h) != (based_w, based_h): if (w, h) != (based_w, based_h):

View File

@ -118,7 +118,9 @@ async def draw_rank_img(ev: Event, uid: str) -> Union[bytes, str]:
char_draw.text((791, 129), _cr, 'white', gs_font_26, 'lm') char_draw.text((791, 129), _cr, 'white', gs_font_26, 'lm')
char_draw.text((791, 169), _cd, 'white', gs_font_26, 'lm') char_draw.text((791, 169), _cd, 'white', gs_font_26, 'lm')
char_draw.text((263, 260), '测试项目: 未知', grey, gs_font_22, 'lm') char_draw.text(
(263, 260), '测试项目: 未知', grey, gs_font_22, 'lm'
)
char_draw.text( char_draw.text(
(716, 257), str(int(float(result))), 'white', gs_font_44, 'lm' (716, 257), str(int(float(result))), 'white', gs_font_44, 'lm'
) )
@ -140,7 +142,9 @@ async def draw_rank_img(ev: Event, uid: str) -> Union[bytes, str]:
char_draw = ImageDraw.Draw(char_img) char_draw = ImageDraw.Draw(char_img)
char_draw.text((65, 39), f'数据最后更新于 {time}', grey, gs_font_15, 'lm') char_draw.text(
(65, 39), f'数据最后更新于 {time}', grey, gs_font_15, 'lm'
)
char_draw.text( char_draw.text(
(760, 37), f'{char_name}', 'white', gs_font_32, 'rm' (760, 37), f'{char_name}', 'white', gs_font_32, 'rm'
) )
@ -164,7 +168,9 @@ async def draw_rank_img(ev: Event, uid: str) -> Union[bytes, str]:
char_draw.text((169, 129), _cr, 'white', gs_font_26, 'lm') char_draw.text((169, 129), _cr, 'white', gs_font_26, 'lm')
char_draw.text((169, 169), _cd, 'white', gs_font_26, 'lm') char_draw.text((169, 169), _cd, 'white', gs_font_26, 'lm')
char_draw.text((669, 260), '测试项目: 未知', grey, gs_font_22, 'rm') char_draw.text(
(669, 260), '测试项目: 未知', grey, gs_font_22, 'rm'
)
char_draw.text( char_draw.text(
(237, 249), str(int(float(result))), 'white', gs_font_44, 'rm' (237, 249), str(int(float(result))), 'white', gs_font_44, 'rm'
) )

View File

@ -13,14 +13,14 @@ class ActionMAP(TypedDict):
with open(EFFECT_PATH / 'weapon_effect.json', "r", encoding='UTF-8') as f: with open(EFFECT_PATH / 'weapon_effect.json', "r", encoding='UTF-8') as f:
weapon_effect_map: Dict[ weapon_effect_map: Dict[str, Dict[str, Dict[str, Dict[str, str]]]] = (
str, Dict[str, Dict[str, Dict[str, str]]] json.load(f)
] = json.load(f) )
with open(EFFECT_PATH / 'char_effect.json', "r", encoding='UTF-8') as f: with open(EFFECT_PATH / 'char_effect.json', "r", encoding='UTF-8') as f:
char_effect_map: Dict[ char_effect_map: Dict[str, Dict[str, Dict[str, Dict[str, str]]]] = (
str, Dict[str, Dict[str, Dict[str, str]]] json.load(f)
] = json.load(f) )
with open(EFFECT_PATH / 'artifact_effect.json', "r", encoding='UTF-8') as f: with open(EFFECT_PATH / 'artifact_effect.json', "r", encoding='UTF-8') as f:
artifact_effect_map: Dict[str, Dict[str, Dict[str, str]]] = json.load(f) artifact_effect_map: Dict[str, Dict[str, Dict[str, str]]] = json.load(f)

View File

@ -67,7 +67,11 @@ async def get_artifacts_value(
) -> float: ) -> float:
if charName not in ATTR_MAP: if charName not in ATTR_MAP:
ATTR_MAP[charName] = ['攻击力', '暴击率', '暴击伤害'] ATTR_MAP[charName] = ['攻击力', '暴击率', '暴击伤害']
if subName in ATTR_MAP[charName] and subName in ['血量', '防御力', '攻击力']: if subName in ATTR_MAP[charName] and subName in [
'血量',
'防御力',
'攻击力',
]:
if subName == '血量': if subName == '血量':
base = (subValue / baseHp) * 100 base = (subValue / baseHp) * 100
elif subName == '防御力': elif subName == '防御力':

View File

@ -196,7 +196,9 @@ async def get_char_args(
if isinstance(char_data, str): if isinstance(char_data, str):
return char_data return char_data
else: else:
for i, s in enumerate(['生之花', '死之羽', '时之沙', '空之杯', '理之冠']): for i, s in enumerate(
['生之花', '死之羽', '时之沙', '空之杯', '理之冠']
):
if '赤沙' in part: if '赤沙' in part:
continue continue
if part[-1] == s[-1]: if part[-1] == s[-1]:
@ -216,7 +218,9 @@ async def get_single_percent(char_data: Dict, uid: str, num: int, best: List):
char = Character(char_data) char = Character(char_data)
await char.init_prop() await char.init_prop()
percent = float(char.percent.replace('%', '')) percent = float(char.percent.replace('%', ''))
logger.info(f'[查找最佳圣遗物] UID:{uid}{num}次迭代...毕业度为{percent}!') logger.info(
f'[查找最佳圣遗物] UID:{uid}{num}次迭代...毕业度为{percent}!'
)
best.append({'percent': percent, 'char_data': char.card_prop}) best.append({'percent': percent, 'char_data': char.card_prop})

View File

@ -711,9 +711,9 @@ class Character:
_ex = 10 + weaponAffix * 2 _ex = 10 + weaponAffix * 2
ex_effect.append(f'Q:dmgBonus+{_ex}') ex_effect.append(f'Q:dmgBonus+{_ex}')
elif self.char_name == '优菈': elif self.char_name == '优菈':
skill_effect = EXTRA_CHAR_LIST[self.char_name]['Q每层能量伤害'][ skill_effect = EXTRA_CHAR_LIST[self.char_name][
'value' 'Q每层能量伤害'
] ]['value']
attack_type = 'Q' attack_type = 'Q'
skill_level = prop[f'{attack_type}_skill_level'] - 1 skill_level = prop[f'{attack_type}_skill_level'] - 1
value = float(skill_effect[skill_level]) value = float(skill_effect[skill_level])

View File

@ -483,10 +483,12 @@ class Fight:
avg_dmg = ( avg_dmg = (
normal_dmg normal_dmg
if critrate < 0 if critrate < 0
else crit_dmg else (
crit_dmg
if critrate > 1 if critrate > 1
else crit_dmg * critrate + (1 - critrate) * normal_dmg else crit_dmg * critrate + (1 - critrate) * normal_dmg
) )
)
self.total_normal_dmg += normal_dmg self.total_normal_dmg += normal_dmg
self.total_avg_dmg += avg_dmg self.total_avg_dmg += avg_dmg

View File

@ -65,7 +65,9 @@ async def draw_enka_card(
else: else:
line1 = '刷新成功!' line1 = '刷新成功!'
line2 = f'UID {uid}请使用 查询{char_data_list[0]["avatarName"]} 命令进行查询!' line2 = (
f'UID {uid}请使用 查询{char_data_list[0]["avatarName"]} 命令进行查询!'
)
char_num = len(char_data_list) char_num = len(char_data_list)
if char_num <= 8: if char_num <= 8:
based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220 based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220

View File

@ -62,7 +62,13 @@ class DrawEventList:
# 跳过一部分活动 # 跳过一部分活动
flag = False flag = False
name_full = event_list[event]['nameFull']['CHS'] name_full = event_list[event]['nameFull']['CHS']
for ban_word in ['首充', '深境螺旋', '传说任务', '纪行', '更新修复']: for ban_word in [
'首充',
'深境螺旋',
'传说任务',
'纪行',
'更新修复',
]:
if ban_word in name_full: if ban_word in name_full:
flag = True flag = True
break break

View File

@ -62,7 +62,9 @@ async def send_refresh_gacha_info(bot: Bot, ev: Event):
if ev.command.startswith('强制'): if ev.command.startswith('强制'):
await bot.logger.info('[WARNING]本次为强制刷新') await bot.logger.info('[WARNING]本次为强制刷新')
is_force = True is_force = True
await bot.send(f'UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!') await bot.send(
f'UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!'
)
im = await save_gachalogs(uid, None, is_force) im = await save_gachalogs(uid, None, is_force)
await bot.send_option(im, [Button('🃏抽卡记录', '抽卡记录')]) await bot.send_option(im, [Button('🃏抽卡记录', '抽卡记录')])

View File

@ -34,7 +34,12 @@ async def import_gachalogs(history_url: str, type: str, uid: str) -> str:
if data_uid != uid: if data_uid != uid:
return f'该抽卡记录UID{data_uid}与你绑定UID{uid}不符合!' return f'该抽卡记录UID{data_uid}与你绑定UID{uid}不符合!'
raw_data = history_data['list'] raw_data = history_data['list']
result = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []} result = {
'新手祈愿': [],
'常驻祈愿': [],
'角色祈愿': [],
'武器祈愿': [],
}
for item in raw_data: for item in raw_data:
item['uid'] = uid item['uid'] = uid
item['item_id'] = '' item['item_id'] = ''

View File

@ -91,7 +91,12 @@ async def save_gachalogs(
if raw_data is None: if raw_data is None:
raw_data = await get_new_gachalog(uid, gachalogs_history, is_force) raw_data = await get_new_gachalog(uid, gachalogs_history, is_force)
else: else:
new_data = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []} new_data = {
'新手祈愿': [],
'常驻祈愿': [],
'角色祈愿': [],
'武器祈愿': [],
}
if gachalogs_history: if gachalogs_history:
for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']: for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']:
for item in raw_data[i]: for item in raw_data[i]:
@ -107,7 +112,12 @@ async def save_gachalogs(
if raw_data == {} or not raw_data: if raw_data == {} or not raw_data:
return SK_HINT return SK_HINT
temp_data = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []} temp_data = {
'新手祈愿': [],
'常驻祈愿': [],
'角色祈愿': [],
'武器祈愿': [],
}
for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']: for i in ['新手祈愿', '常驻祈愿', '角色祈愿', '武器祈愿']:
for item in raw_data[i]: for item in raw_data[i]:
if item not in temp_data[i]: if item not in temp_data[i]:

View File

@ -44,7 +44,9 @@ async def send_find_map_msg(bot: Bot, ev: Event):
resource_temp_path = MAP_DATA / f'{map_name}_{ev.text}.jpg' resource_temp_path = MAP_DATA / f'{map_name}_{ev.text}.jpg'
if resource_temp_path.exists(): if resource_temp_path.exists():
await bot.logger.info(f'本地已有{map_name}_{ev.text}的资源点,直接发送...') await bot.logger.info(
f'本地已有{map_name}_{ev.text}的资源点,直接发送...'
)
resource_temp = await convert_img(resource_temp_path) resource_temp = await convert_img(resource_temp_path)
await bot.send(resource_temp) await bot.send(resource_temp)
else: else:

View File

@ -35,7 +35,9 @@ async def all_daily_mihoyo_bbs_coin():
logger.exception(f'[米游币任务]执行失败: {user.uid}') logger.exception(f'[米游币任务]执行失败: {user.uid}')
im_failed += 1 im_failed += 1
im_failed_str += f'\n[米游币任务]执行失败: {user.uid}' im_failed_str += f'\n[米游币任务]执行失败: {user.uid}'
faild_im = f'\n以下为签到失败报告: {im_failed_str}' if im_failed_str != '' else '' faild_im = (
f'\n以下为签到失败报告: {im_failed_str}' if im_failed_str != '' else ''
)
im = f'今日获取mhycoin成功数量: {im_success},失败数量: {im_failed}{faild_im}' im = f'今日获取mhycoin成功数量: {im_success},失败数量: {im_failed}{faild_im}'
return im, im_private return im, im_private

View File

@ -128,7 +128,9 @@ class MihoyoBBSCoin:
self.headers, self.headers,
) )
if 'err' in data['message'] or data['retcode'] == -100: if 'err' in data['message'] or data['retcode'] == -100:
logger.error('获取任务列表失败, 你的cookie可能已过期, 请重新设置cookie。') logger.error(
'获取任务列表失败, 你的cookie可能已过期, 请重新设置cookie。'
)
return '你的Cookies已失效。' return '你的Cookies已失效。'
else: else:
self.Today_getcoins = data['data']['can_get_points'] self.Today_getcoins = data['data']['can_get_points']
@ -143,10 +145,14 @@ class MihoyoBBSCoin:
else: else:
# 如果第0个大于或等于62则直接判定任务没做 # 如果第0个大于或等于62则直接判定任务没做
if data['data']['states'][0]['mission_id'] >= 62: if data['data']['states'][0]['mission_id'] >= 62:
logger.info(f'新的一天, 今天可以获得{self.Today_getcoins}个米游币') logger.info(
f'新的一天, 今天可以获得{self.Today_getcoins}个米游币'
)
pass pass
else: else:
logger.info(f'似乎还有任务没完成, 今天还能获得{self.Today_getcoins}') logger.info(
f'似乎还有任务没完成, 今天还能获得{self.Today_getcoins}'
)
for i in data['data']['states']: for i in data['data']['states']:
# 58是讨论区签到 # 58是讨论区签到
if i['mission_id'] == 58: if i['mission_id'] == 58:

View File

@ -106,7 +106,9 @@ async def daily_get_draw():
if len(tasks) >= 1: if len(tasks) >= 1:
await asyncio.gather(*tasks) await asyncio.gather(*tasks)
delay = 50 + random.randint(3, 45) delay = 50 + random.randint(3, 45)
logger.info(f'[自动留影叙佳期] 已完成{len(tasks)}个用户, 等待{delay}秒进行下一次获取') logger.info(
f'[自动留影叙佳期] 已完成{len(tasks)}个用户, 等待{delay}秒进行下一次获取'
)
tasks.clear() tasks.clear()
await asyncio.sleep(delay) await asyncio.sleep(delay)

View File

@ -67,7 +67,9 @@ async def get_resin_text(uid: str) -> Union[str, bytes]:
remained_timed: str = seconds2hours( remained_timed: str = seconds2hours(
expedition['remained_time'] expedition['remained_time']
) )
expedition_info.append(f'{avatar_name} 剩余时间{remained_timed}') expedition_info.append(
f'{avatar_name} 剩余时间{remained_timed}'
)
if dailydata['transformer']['recovery_time']['reached']: if dailydata['transformer']['recovery_time']['reached']:
transformer_status = '可用' transformer_status = '可用'

View File

@ -16,5 +16,7 @@ async def send_download_resource_msg(bot: Bot, ev: Event):
async def startup(): async def startup():
logger.info('[资源文件下载] 正在检查与下载缺失的资源文件,可能需要较长时间,请稍等') logger.info(
'[资源文件下载] 正在检查与下载缺失的资源文件,可能需要较长时间,请稍等'
)
logger.info(f'[资源文件下载] {await download_all_resource()}') logger.info(f'[资源文件下载] {await download_all_resource()}')

View File

@ -14,7 +14,9 @@ sv_get_regtime = SV('查询注册时间')
sv_get_info = SV('查询原神信息') sv_get_info = SV('查询原神信息')
@sv_get_regtime.on_command(('原神注册时间', '注册时间', '查询注册时间'), block=True) @sv_get_regtime.on_command(
('原神注册时间', '注册时间', '查询注册时间'), block=True
)
async def regtime(bot: Bot, ev: Event): async def regtime(bot: Bot, ev: Event):
await bot.logger.info('开始执行[查询注册时间]') await bot.logger.info('开始执行[查询注册时间]')
uid = await get_uid(bot, ev) uid = await get_uid(bot, ev)

View File

@ -23,4 +23,6 @@ async def calc_reg_time(uid: str) -> Union[str, bytes]:
return f'UID{uid} 的注册时间为\n{regtime_date}' return f'UID{uid} 的注册时间为\n{regtime_date}'
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)
return '数据获取错误, 可尝试使用【刷新ck】或者发送【扫码登陆】以绑定CK。' return (
'数据获取错误, 可尝试使用【刷新ck】或者发送【扫码登陆】以绑定CK。'
)

View File

@ -66,7 +66,9 @@ async def send_daily_sign():
single['msg'], 'direct', qid, single['bot_id'], '', '' single['msg'], 'direct', qid, single['bot_id'], '', ''
) )
except Exception as e: except Exception as e:
logger.warning(f'[每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}') logger.warning(
f'[每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}'
)
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
logger.info('[每日全部签到]私聊推送完成') logger.info('[每日全部签到]私聊推送完成')
@ -75,7 +77,9 @@ async def send_daily_sign():
# 根据succee数判断是否为简洁推送 # 根据succee数判断是否为简洁推送
if group_msg_list[gid]['success'] >= 0: if group_msg_list[gid]['success'] >= 0:
report = ( report = (
'以下为签到失败报告:{}'.format(group_msg_list[gid]['push_message']) '以下为签到失败报告:{}'.format(
group_msg_list[gid]['push_message']
)
if group_msg_list[gid]['push_message'] != '' if group_msg_list[gid]['push_message'] != ''
else '' else ''
) )

View File

@ -54,22 +54,30 @@ async def sign_in(uid: str) -> str:
Header['x-rpc-challenge'] = ch Header['x-rpc-challenge'] = ch
Header['x-rpc-validate'] = vl Header['x-rpc-validate'] = vl
Header['x-rpc-seccode'] = f'{vl}|jordan' Header['x-rpc-seccode'] = f'{vl}|jordan'
logger.info(f'[签到] {uid} 已获取验证码, 等待时间{delay}') logger.info(
f'[签到] {uid} 已获取验证码, 等待时间{delay}'
)
await asyncio.sleep(delay) await asyncio.sleep(delay)
else: else:
delay = 605 + random.randint(1, 120) delay = 605 + random.randint(1, 120)
logger.info(f'[签到] {uid} 未获取验证码,等待{delay}秒后重试...') logger.info(
f'[签到] {uid} 未获取验证码,等待{delay}秒后重试...'
)
await asyncio.sleep(delay) await asyncio.sleep(delay)
continue continue
else: else:
logger.info('配置文件暂未开启[跳过无感验证],跳过本次签到任务...') logger.info(
'配置文件暂未开启[跳过无感验证],跳过本次签到任务...'
)
return '签到失败...出现验证码!' return '签到失败...出现验证码!'
# 成功签到! # 成功签到!
else: else:
if index == 0: if index == 0:
logger.info(f'[签到] {uid} 该用户无校验码!') logger.info(f'[签到] {uid} 该用户无校验码!')
else: else:
logger.info(f'[签到] [无感验证] {uid} 该用户重试 {index} 次验证成功!') logger.info(
f'[签到] [无感验证] {uid} 该用户重试 {index} 次验证成功!'
)
break break
elif (int(str(uid)[0]) > 5) and (sign_data['data']['code'] == 'ok'): elif (int(str(uid)[0]) > 5) and (sign_data['data']['code'] == 'ok'):
# 国际服签到无risk_code字段 # 国际服签到无risk_code字段
@ -106,7 +114,9 @@ async def sign_in(uid: str) -> str:
sign_missed -= 1 sign_missed -= 1
sign_missed = sign_info.get('sign_cnt_missed') or sign_missed sign_missed = sign_info.get('sign_cnt_missed') or sign_missed
im = f'{mes_im}!\n{get_im}\n本月漏签次数:{sign_missed}' im = f'{mes_im}!\n{get_im}\n本月漏签次数:{sign_missed}'
logger.info(f'[签到] {uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}') logger.info(
f'[签到] {uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}'
)
return im return im
@ -176,7 +186,9 @@ async def daily_sign():
delay = 1 delay = 1
else: else:
delay = 50 + random.randint(3, 45) delay = 50 + random.randint(3, 45)
logger.info(f'[签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到') logger.info(
f'[签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到'
)
tasks.clear() tasks.clear()
already = 0 already = 0
await asyncio.sleep(delay) await asyncio.sleep(delay)

View File

@ -182,7 +182,9 @@ async def draw_pay_img(
# 商品充值 UID # 商品充值 UID
drawer.text( drawer.text(
( (
int(185 + (195 - gs_font_15.getlength(f'充值到 UID{uid}')) / 2), int(
185 + (195 - gs_font_15.getlength(f'充值到 UID{uid}')) / 2
),
int( int(
120 120
- warning - warning

View File

@ -24,15 +24,35 @@ disnote = '''免责声明:
GOODS = { GOODS = {
0: { 0: {
'title': '创世结晶×60', 'title': '创世结晶×60',
'aliases': ['创世结晶x60', '结晶×60', '结晶x60', '创世结晶60', '结晶60'], 'aliases': [
'创世结晶x60',
'结晶×60',
'结晶x60',
'创世结晶60',
'结晶60',
],
}, },
1: { 1: {
'title': '创世结晶×300', 'title': '创世结晶×300',
'aliases': ['创世结晶x300', '结晶×300', '结晶x300', '创世结晶300', '结晶300', '30'], 'aliases': [
'创世结晶x300',
'结晶×300',
'结晶x300',
'创世结晶300',
'结晶300',
'30',
],
}, },
2: { 2: {
'title': '创世结晶×980', 'title': '创世结晶×980',
'aliases': ['创世结晶x980', '结晶×980', '结晶x980', '创世结晶980', '结晶980', '98'], 'aliases': [
'创世结晶x980',
'结晶×980',
'结晶x980',
'创世结晶980',
'结晶980',
'98',
],
}, },
3: { 3: {
'title': '创世结晶×1980', 'title': '创世结晶×1980',
@ -125,7 +145,9 @@ async def topup_(
if goods_id < len(fetchgoods_data): if goods_id < len(fetchgoods_data):
goods_data = fetchgoods_data[goods_id] goods_data = fetchgoods_data[goods_id]
else: else:
return await bot.send('商品不存在,最大为' + str(len(fetchgoods_data) - 1)) return await bot.send(
'商品不存在,最大为' + str(len(fetchgoods_data) - 1)
)
order = await mys_api.topup(uid, goods_data, method) order = await mys_api.topup(uid, goods_data, method)
if isinstance(order, int): if isinstance(order, int):
logger.warning(f'[充值] {group_id} {user_id} 出错!') logger.warning(f'[充值] {group_id} {user_id} 出错!')

View File

@ -16,7 +16,9 @@ async def send_updatelog_msg(bot: Bot, ev: Event):
await bot.send(im) await bot.send(im)
@sv_gs_config.on_fullmatch(('gs更新', 'gs强制更新', 'gs强行强制更新', 'gs全部更新')) @sv_gs_config.on_fullmatch(
('gs更新', 'gs强制更新', 'gs强行强制更新', 'gs全部更新')
)
async def send_update_msg(bot: Bot, ev: Event): async def send_update_msg(bot: Bot, ev: Event):
await bot.logger.info('[gs更新] 正在执行 ...') await bot.logger.info('[gs更新] 正在执行 ...')
level = 2 level = 2

View File

@ -130,7 +130,9 @@ async def weapon_wiki(name: str) -> str:
now = now[:-1] now = now[:-1]
rw_ef.append(now) rw_ef.append(now)
raw_effect = raw_effect.format(*rw_ef) raw_effect = raw_effect.format(*rw_ef)
effect = '\n' + '' + data['effectName'] + '' + ': ' + raw_effect effect = (
'\n' + '' + data['effectName'] + '' + ': ' + raw_effect
)
else: else:
effect = '' effect = ''
im = weapon_im.format(name, _type, star, info, atk, sub, effect) im = weapon_im.format(name, _type, star, info, atk, sub, effect)

View File

@ -28,7 +28,9 @@ async def scheduled_get_xk_data():
await save_all_abyss_rank() await save_all_abyss_rank()
@sv_get_abyss_database.on_fullmatch(('深渊概览', '深渊统计', '深渊使用率'), block=True) @sv_get_abyss_database.on_fullmatch(
('深渊概览', '深渊统计', '深渊使用率'), block=True
)
async def send_abyss_pic(bot: Bot, ev: Event): async def send_abyss_pic(bot: Bot, ev: Event):
await draw_xk_abyss_img() await draw_xk_abyss_img()
img = await convert_img(TOTAL_IMG) img = await convert_img(TOTAL_IMG)

View File

@ -66,7 +66,9 @@ async def draw_char_abyss_info(char_name: str) -> Union[bytes, str]:
# 基础文字部分 # 基础文字部分
img_draw = ImageDraw.Draw(_img) img_draw = ImageDraw.Draw(_img)
img_draw.text((450, 450), f'{char_name}的深渊统计', 'White', gs_font_40, 'mm') img_draw.text(
(450, 450), f'{char_name}的深渊统计', 'White', gs_font_40, 'mm'
)
# 绘图 # 绘图
r = 20 r = 20
@ -98,7 +100,9 @@ async def draw_char_abyss_info(char_name: str) -> Union[bytes, str]:
char_data_list.append(str(all_char_info['abyss']['avg_level'])) char_data_list.append(str(all_char_info['abyss']['avg_level']))
char_data_list.append(str(all_char_info['abyss']['avg_constellation'])) char_data_list.append(str(all_char_info['abyss']['avg_constellation']))
for index, i in enumerate(['使用率', '满星率', '出场率', '平均等级', '平均命座']): for index, i in enumerate(
['使用率', '满星率', '出场率', '平均等级', '平均命座']
):
_it = index * 161 _it = index * 161
img_draw.text((127 + _it, 618), i, (67, 46, 26), gs_font_30, 'mm') img_draw.text((127 + _it, 618), i, (67, 46, 26), gs_font_30, 'mm')
img_draw.text( img_draw.text(

View File

@ -20,7 +20,13 @@ from ..utils.map.GS_MAP_PATH import ( # noqa: E402
char_list: List[str] = [] char_list: List[str] = []
char_action = {} char_action = {}
INDEX_MAP = ['', 'A', 'E', 'Q'] INDEX_MAP = ['', 'A', 'E', 'Q']
attack_type_list = {'普通攻击': 'A', '重击': 'B', '下落攻击': 'C', '战技': 'E', '爆发': 'Q'} attack_type_list = {
'普通攻击': 'A',
'重击': 'B',
'下落攻击': 'C',
'战技': 'E',
'爆发': 'Q',
}
label_type_list = { label_type_list = {
'普通攻击': 'A', '普通攻击': 'A',
'重击': 'B', '重击': 'B',
@ -38,7 +44,11 @@ extra = {
'胡桃': {'A重击伤害': '蒸发', 'Q低血量时技能伤害': '蒸发'}, '胡桃': {'A重击伤害': '蒸发', 'Q低血量时技能伤害': '蒸发'},
'安柏': {'A满蓄力瞄准射击': ['融化', '蒸发']}, '安柏': {'A满蓄力瞄准射击': ['融化', '蒸发']},
'香菱': {'E喷火伤害': '蒸发', 'Q旋火轮伤害': '蒸发'}, '香菱': {'E喷火伤害': '蒸发', 'Q旋火轮伤害': '蒸发'},
'达达利亚': {'A满蓄力瞄准射击': '蒸发', 'Q技能伤害·近战': '蒸发', 'Q技能伤害·远程': '蒸发'}, '达达利亚': {
'A满蓄力瞄准射击': '蒸发',
'Q技能伤害·近战': '蒸发',
'Q技能伤害·远程': '蒸发',
},
'重云': {'Q技能伤害': '融化'}, '重云': {'Q技能伤害': '融化'},
'雷电将军': { '雷电将军': {
'E协同攻击伤害': '超激化', 'E协同攻击伤害': '超激化',
@ -79,11 +89,22 @@ extra = {
'Q最后一击伤害': '超激化', 'Q最后一击伤害': '超激化',
}, },
'北斗': {'Q闪雷伤害': '超激化'}, '北斗': {'Q闪雷伤害': '超激化'},
'赛诺': {'E冥祭伤害': '超激化', 'Q一段伤害': '超激化', 'Q重击伤害': '超激化'}, '赛诺': {
'纳西妲': {'E长按伤害': '蔓激化', 'E灭净三业伤害': ['蔓激化', '蔓激化·前台']}, 'E冥祭伤害': '超激化',
'Q一段伤害': '超激化',
'Q重击伤害': '超激化',
},
'纳西妲': {
'E长按伤害': '蔓激化',
'E灭净三业伤害': ['蔓激化', '蔓激化·前台'],
},
'旅行者(草)': {'Q草灯莲攻击伤害': '蔓激化'}, '旅行者(草)': {'Q草灯莲攻击伤害': '蔓激化'},
'夜兰': {'E伤害': '蒸发'}, '夜兰': {'E伤害': '蒸发'},
'艾尔海森': {'Q单次伤害': '蔓激化', 'E突进攻击伤害': '蔓激化', 'E1枚光幕攻击伤害': '蔓激化'}, '艾尔海森': {
'Q单次伤害': '蔓激化',
'E突进攻击伤害': '蔓激化',
'E1枚光幕攻击伤害': '蔓激化',
},
'迪希雅': { '迪希雅': {
'E净焰昂藏伤害': '蒸发', 'E净焰昂藏伤害': '蒸发',
'E剑域炽焰伤害': '蒸发', 'E剑域炽焰伤害': '蒸发',
@ -95,7 +116,9 @@ extra = {
'E玫瑰晶弹基础伤害': ['3层', '6层'], 'E玫瑰晶弹基础伤害': ['3层', '6层'],
}, },
} }
template = {'A重击伤害': {'name': 'A重击伤害', 'type': '', 'plus': 1, 'value': []}} template = {
'A重击伤害': {'name': 'A重击伤害', 'type': '', 'plus': 1, 'value': []}
}
def fill_label(label_name: str, index: int) -> str: def fill_label(label_name: str, index: int) -> str:
@ -221,13 +244,22 @@ def find_tag(labels: List, index: int, char: str, parameters: dict) -> dict:
# 特殊化处理 # 特殊化处理
if '心海' in char: if '心海' in char:
label_name = label_name.replace('提升', '提高') label_name = label_name.replace('提升', '提高')
label_name = label_name.replace('低空/高空坠地冲击伤害', '高空下落伤害') label_name = label_name.replace(
'低空/高空坠地冲击伤害', '高空下落伤害'
)
label_name = label_name.replace('技能', '') label_name = label_name.replace('技能', '')
# 提升指提升百分比 例如 E:dmgBouns+50% # 提升指提升百分比 例如 E:dmgBouns+50%
# 提高指提高固定值 例如 Q:addDmg+40%defense # 提高指提高固定值 例如 Q:addDmg+40%defense
label_keyword_hurt_list = ['一段', '壹阶', '贰阶', '叁阶', '肆阶', '四阶高压粉碎'] label_keyword_hurt_list = [
'一段',
'壹阶',
'贰阶',
'叁阶',
'肆阶',
'四阶高压粉碎',
]
if '炽焰箭' in label_name: if '炽焰箭' in label_name:
continue continue

View File

@ -125,7 +125,9 @@ async def panle2Json() -> None:
:说明: :说明:
访问DATA_PATH并转换数据为dmgMap.json 访问DATA_PATH并转换数据为dmgMap.json
''' '''
wb = openpyxl.load_workbook(str(DATA_PATH / '参考面板.xlsx'), data_only=True) wb = openpyxl.load_workbook(
str(DATA_PATH / '参考面板.xlsx'), data_only=True
)
sheet: Worksheet = wb.active # type: ignore sheet: Worksheet = wb.active # type: ignore
result = {} result = {}

View File

@ -7,15 +7,13 @@ from gsuid_core.utils.database.models import GsBind
@overload @overload
async def get_uid(bot: Bot, ev: Event) -> Optional[str]: async def get_uid(bot: Bot, ev: Event) -> Optional[str]: ...
...
@overload @overload
async def get_uid( async def get_uid(
bot: Bot, ev: Event, get_user_id: bool = True bot: Bot, ev: Event, get_user_id: bool = True
) -> Tuple[Optional[str], str]: ) -> Tuple[Optional[str], str]: ...
...
async def get_uid( async def get_uid(

View File

@ -8,23 +8,19 @@ from PIL import Image
@overload @overload
async def convert_img(img: Image.Image, is_base64: bool = False) -> bytes: async def convert_img(img: Image.Image, is_base64: bool = False) -> bytes: ...
...
@overload @overload
async def convert_img(img: Image.Image, is_base64: bool = True) -> str: async def convert_img(img: Image.Image, is_base64: bool = True) -> str: ...
...
@overload @overload
async def convert_img(img: bytes, is_base64: bool = False) -> str: async def convert_img(img: bytes, is_base64: bool = False) -> str: ...
...
@overload @overload
async def convert_img(img: Path, is_base64: bool = False) -> str: async def convert_img(img: Path, is_base64: bool = False) -> str: ...
...
async def convert_img( async def convert_img(