ruff format

This commit is contained in:
qwerdvd 2023-10-27 19:53:56 +08:00
parent d2d56a1c18
commit bdf5cc9358
No known key found for this signature in database
GPG Key ID: A3AF89C783404769
22 changed files with 469 additions and 358 deletions

View File

@ -12,11 +12,6 @@ repos:
hooks: hooks:
- id: isort - id: isort
- repo: https://github.com/psf/black
rev: 23.1.0
hooks:
- id: black
- repo: https://github.com/pycqa/flake8 - repo: https://github.com/pycqa/flake8
rev: 6.0.0 rev: 6.0.0
hooks: hooks:
@ -29,19 +24,7 @@ repos:
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version. # Ruff version.
rev: v0.0.289 rev: "v0.1.2"
hooks: hooks:
- id: ruff - id: ruff
args: [--fix, --exit-non-zero-on-fix] args: [--fix, --exit-non-zero-on-fix]
# - repo: https://github.com/pdm-project/pdm
# rev: 2.9.2
# hooks:
# - id: pdm-lock-check
# - repo: https://github.com/pdm-project/pdm
# rev: 2.9.2
# hooks:
# - id: pdm-export
# args: ["-o", "requirements.txt", "--without-hashes"]
# files: ^pdm.lock$

View File

@ -40,9 +40,9 @@ async def get_lightcone_data(
return None return None
async def get_character_index() -> Union[ async def get_character_index() -> (
Dict[str, HakushHsrCharacterIndex], None Union[Dict[str, HakushHsrCharacterIndex], None]
]: ):
async with AsyncClient( async with AsyncClient(
base_url='https://api.hakush.in/hsr/data', base_url='https://api.hakush.in/hsr/data',
headers=_HEADER, headers=_HEADER,
@ -54,9 +54,9 @@ async def get_character_index() -> Union[
return None return None
async def get_lightcone_index() -> Union[ async def get_lightcone_index() -> (
Dict[str, HakushHsrLightconeIndex], None Union[Dict[str, HakushHsrLightconeIndex], None]
]: ):
async with AsyncClient( async with AsyncClient(
base_url='https://api.hakush.in/hsr/data', base_url='https://api.hakush.in/hsr/data',
headers=_HEADER, headers=_HEADER,

View File

@ -1,60 +1,70 @@
# flake8: noqa # flake8: noqa
OLD_URL = "https://api-takumi.mihoyo.com" OLD_URL = 'https://api-takumi.mihoyo.com'
OS_OLD_URL = "https://api-os-takumi.mihoyo.com" OS_OLD_URL = 'https://api-os-takumi.mihoyo.com'
NEW_URL = "https://api-takumi-record.mihoyo.com" NEW_URL = 'https://api-takumi-record.mihoyo.com'
OS_URL = "https://sg-public-api.hoyolab.com" OS_URL = 'https://sg-public-api.hoyolab.com'
OS_INFO_URL = "https://bbs-api-os.hoyolab.com" OS_INFO_URL = 'https://bbs-api-os.hoyolab.com'
STAR_RAIL_SIGN_INFO_URL = f"{OLD_URL}/event/luna/info" STAR_RAIL_SIGN_INFO_URL = f'{OLD_URL}/event/luna/info'
STAR_RAIL_SIGN_INFO_URL_OS = f"{OS_URL}/event/luna/os/info" STAR_RAIL_SIGN_INFO_URL_OS = f'{OS_URL}/event/luna/os/info'
STAR_RAIL_SIGN_LIST_URL = f"{OLD_URL}/event/luna/home" STAR_RAIL_SIGN_LIST_URL = f'{OLD_URL}/event/luna/home'
STAR_RAIL_SIGN_LIST_URL_OS = f"{OS_URL}/event/luna/os/home" STAR_RAIL_SIGN_LIST_URL_OS = f'{OS_URL}/event/luna/os/home'
STAR_RAIL_SIGN_EXTRA_INFO_URL = f"{OLD_URL}/event/luna/extra_info" STAR_RAIL_SIGN_EXTRA_INFO_URL = f'{OLD_URL}/event/luna/extra_info'
STAR_RAIL_SIGN_EXTRA_REWARD_URL = f"{OLD_URL}/event/luna/extra_reward" STAR_RAIL_SIGN_EXTRA_REWARD_URL = f'{OLD_URL}/event/luna/extra_reward'
STAR_RAIL_SIGN_URL = f"{OLD_URL}/event/luna/sign" STAR_RAIL_SIGN_URL = f'{OLD_URL}/event/luna/sign'
STAR_RAIL_SIGN_URL_OS = f"{OS_URL}/event/luna/os/sign" STAR_RAIL_SIGN_URL_OS = f'{OS_URL}/event/luna/os/sign'
STAR_RAIL_MONTH_INFO_URL = f"{OLD_URL}/event/srledger/month_info" # 开拓阅历接口 STAR_RAIL_MONTH_INFO_URL = (
f'{OLD_URL}/event/srledger/month_info'
) # 开拓阅历接口
STAR_RAIL_MONTH_DETAIL_URL = ( STAR_RAIL_MONTH_DETAIL_URL = (
f"{OLD_URL}/event/srledger/month_detail" # 开拓阅历详情接口 f'{OLD_URL}/event/srledger/month_detail' # 开拓阅历详情接口
) )
STAR_RAIL_NOTE_URL = f"{NEW_URL}/game_record/app/hkrpg/api/note" # 实时便签接口 STAR_RAIL_NOTE_URL = (
STAR_RAIL_NOTE_URL_OS = f"{OS_INFO_URL}/game_record/hkrpg/api/note" # OS实时便签接口 f'{NEW_URL}/game_record/app/hkrpg/api/note'
STAR_RAIL_INDEX_URL = f"{NEW_URL}/game_record/app/hkrpg/api/index" # 角色橱窗接口 ) # 实时便签接口
STAR_RAIL_NOTE_URL_OS = (
f'{OS_INFO_URL}/game_record/hkrpg/api/note'
) # OS实时便签接口
STAR_RAIL_INDEX_URL = (
f'{NEW_URL}/game_record/app/hkrpg/api/index'
) # 角色橱窗接口
STAR_RAIL_INDEX_URL_OS = ( STAR_RAIL_INDEX_URL_OS = (
f"{OS_INFO_URL}/game_record/hkrpg/api/index" # OS角色橱窗接口 f'{OS_INFO_URL}/game_record/hkrpg/api/index' # OS角色橱窗接口
) )
STAR_RAIL_AVATAR_BASIC_URL = ( STAR_RAIL_AVATAR_BASIC_URL = (
f"{NEW_URL}/game_record/app/hkrpg/api/avatar/basic" # 全部角色接口 f'{NEW_URL}/game_record/app/hkrpg/api/avatar/basic' # 全部角色接口
) )
STAR_RAIL_ROLE_BASIC_INFO_URL = ( STAR_RAIL_ROLE_BASIC_INFO_URL = (
f"{NEW_URL}/game_record/app/hkrpg/api/role/basicInfo" # 角色基础信息接口 f'{NEW_URL}/game_record/app/hkrpg/api/role/basicInfo' # 角色基础信息接口
) )
STAR_RAIL_ROLE_BASIC_INFO_URL_OS = f"{OS_INFO_URL}/game_record/hkrpg/api/index" STAR_RAIL_ROLE_BASIC_INFO_URL_OS = f'{OS_INFO_URL}/game_record/hkrpg/api/index'
STAR_RAIL_AVATAR_INFO_URL = ( STAR_RAIL_AVATAR_INFO_URL = (
f"{NEW_URL}/game_record/app/hkrpg/api/avatar/info" # 角色详细信息接口 f'{NEW_URL}/game_record/app/hkrpg/api/avatar/info' # 角色详细信息接口
) )
STAR_RAIL_AVATAR_INFO_URL_OS = ( STAR_RAIL_AVATAR_INFO_URL_OS = (
f"{OS_INFO_URL}/game_record/hkrpg/api/avatar/info" # OS角色详细信息接口 f'{OS_INFO_URL}/game_record/hkrpg/api/avatar/info' # OS角色详细信息接口
) )
CHALLENGE_INFO_URL = f"{NEW_URL}/game_record/app/hkrpg/api/challenge" CHALLENGE_INFO_URL = f'{NEW_URL}/game_record/app/hkrpg/api/challenge'
CHALLENGE_INFO_URL_OS = f"{OS_INFO_URL}/game_record/hkrpg/api/challenge" CHALLENGE_INFO_URL_OS = f'{OS_INFO_URL}/game_record/hkrpg/api/challenge'
ROGUE_INFO_URL = f"{NEW_URL}/game_record/app/hkrpg/api/rogue" # 角色模拟宇宙信息接口 ROGUE_INFO_URL = (
f'{NEW_URL}/game_record/app/hkrpg/api/rogue'
) # 角色模拟宇宙信息接口
ROGUE_LOCUST_INFO_URL = ( ROGUE_LOCUST_INFO_URL = (
f"{NEW_URL}/game_record/app/hkrpg/api/rogue_locust" # 角色寰宇蝗灾信息接口 f'{NEW_URL}/game_record/app/hkrpg/api/rogue_locust' # 角色寰宇蝗灾信息接口
) )
STAR_RAIL_GACHA_LOG_URL = f"{OLD_URL}/common/gacha_record/api/getGachaLog" STAR_RAIL_GACHA_LOG_URL = f'{OLD_URL}/common/gacha_record/api/getGachaLog'
STAR_RAIL_GACHA_LOG_URL_OS = ( STAR_RAIL_GACHA_LOG_URL_OS = (
f"{OS_OLD_URL}/common/gacha_record/api/getGachaLog" f'{OS_OLD_URL}/common/gacha_record/api/getGachaLog'
) )
GET_FP_URL = "https://public-data-api.mihoyo.com/device-fp/api/getFp" GET_FP_URL = 'https://public-data-api.mihoyo.com/device-fp/api/getFp'
GET_FP_URL_OS = "https://sg-public-data-api.hoyoverse.com/device-fp/api/getFp" GET_FP_URL_OS = 'https://sg-public-data-api.hoyoverse.com/device-fp/api/getFp'
# CREATE_QRCODE = f'{OLD_URL}/event/bbs_sign_reward/gen_auth_code' # CREATE_QRCODE = f'{OLD_URL}/event/bbs_sign_reward/gen_auth_code'
STAR_RAIL_WIDGRT_URL = f"{NEW_URL}/game_record/app/hkrpg/aapi/widget" STAR_RAIL_WIDGRT_URL = f'{NEW_URL}/game_record/app/hkrpg/aapi/widget'
_API = locals() _API = locals()

View File

@ -2,10 +2,10 @@ import copy
from typing import Dict, List from typing import Dict, List
from gsuid_core.logger import logger from gsuid_core.logger import logger
import math
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar from ..Base.model import DamageInstanceAvatar, DamageInstanceSkill
from ..Role import calculate_heal, calculate_damage, calculate_shield from ..Role import calculate_damage, calculate_heal, calculate_shield
class Seele(BaseAvatar): class Seele(BaseAvatar):
@ -117,7 +117,9 @@ class Seele(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist4[2] += damage3 damagelist4[2] += damage3
skill_info_list.append({'name': '银狼降防终结技', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '银狼降防终结技', 'damagelist': damagelist4}
)
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
@ -148,7 +150,9 @@ class JingYuan(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('【神君】下回合的攻击段数大于等于6段, 则其下回合的暴击伤害提高25%') logger.info(
'【神君】下回合的攻击段数大于等于6段, 则其下回合的暴击伤害提高25%'
)
self.extra_ability_attribute['CriticalDamageBase'] = 0.25 self.extra_ability_attribute['CriticalDamageBase'] = 0.25
logger.info('施放战技后, 暴击率提升10%') logger.info('施放战技后, 暴击率提升10%')
self.extra_ability_attribute['CriticalChanceBase'] = 0.1 self.extra_ability_attribute['CriticalChanceBase'] = 0.1
@ -223,7 +227,9 @@ class JingYuan(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist4[2] += damage3 damagelist4[2] += damage3
skill_info_list.append({'name': '10层神君伤害', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '10层神君伤害', 'damagelist': damagelist4}
)
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
@ -249,7 +255,9 @@ class Welt(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('施放终结技时, 有100%基础概率使目标受到的伤害提高12%, 持续2回合。') logger.info(
'施放终结技时, 有100%基础概率使目标受到的伤害提高12%, 持续2回合。'
)
self.extra_ability_attribute['DmgRatio'] = 0.12 self.extra_ability_attribute['DmgRatio'] = 0.12
logger.info('对被弱点击破的敌方目标造成的伤害提高20') logger.info('对被弱点击破的敌方目标造成的伤害提高20')
self.extra_ability_attribute['AllDamageAddedRatio'] = 0.20 self.extra_ability_attribute['AllDamageAddedRatio'] = 0.20
@ -333,7 +341,9 @@ class Welt(BaseAvatar):
damagelist4[1] = damagelist1[1] + damagelist4[1] damagelist4[1] = damagelist1[1] + damagelist4[1]
damagelist4[2] = damagelist1[2] + damagelist4[2] damagelist4[2] = damagelist1[2] + damagelist4[2]
damagelist4[2] += damage3 damagelist4[2] += damage3
skill_info_list.append({'name': '强化普攻', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '强化普攻', 'damagelist': damagelist4}
)
skill_multiplier = (self.Skill_num('BPSkill', 'BPSkill') / 3) * 0.8 skill_multiplier = (self.Skill_num('BPSkill', 'BPSkill') / 3) * 0.8
damagelist5 = await calculate_damage( damagelist5 = await calculate_damage(
@ -349,7 +359,9 @@ class Welt(BaseAvatar):
damagelist5[1] = damagelist2[1] + damagelist5[1] damagelist5[1] = damagelist2[1] + damagelist5[1]
damagelist5[2] = damagelist2[2] + damagelist5[2] damagelist5[2] = damagelist2[2] + damagelist5[2]
damagelist5[2] += damage3 damagelist5[2] += damage3
skill_info_list.append({'name': '强化战技', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '强化战技', 'damagelist': damagelist5}
)
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
@ -378,7 +390,9 @@ class Danhengil(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%') logger.info(
'对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%'
)
self.extra_ability_attribute['CriticalDamageBase'] = 0.24 self.extra_ability_attribute['CriticalDamageBase'] = 0.24
async def getdamage( async def getdamage(
@ -410,15 +424,14 @@ class Danhengil(BaseAvatar):
for i in range(1, 3): for i in range(1, 3):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus[ add_attr_bonus['AllDamageAddedRatio'] = (
'AllDamageAddedRatio' damage_buff * injury_add
] = damage_buff * injury_add + add_attr_bonus.get( + add_attr_bonus.get('AllDamageAddedRatio', 0)
'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -454,15 +467,14 @@ class Danhengil(BaseAvatar):
for i in range(1, 4): for i in range(1, 4):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus[ add_attr_bonus['AllDamageAddedRatio'] = (
'AllDamageAddedRatio' damage_buff * injury_add
] = damage_buff * injury_add + add_attr_bonus.get( + add_attr_bonus.get('AllDamageAddedRatio', 0)
'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -498,20 +510,19 @@ class Danhengil(BaseAvatar):
for i in range(1, 6): for i in range(1, 6):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus[ add_attr_bonus['AllDamageAddedRatio'] = (
'AllDamageAddedRatio' damage_buff * injury_add
] = damage_buff * injury_add + add_attr_bonus.get( + add_attr_bonus.get('AllDamageAddedRatio', 0)
'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
elif i >= 4: elif i >= 4:
critical_buff = (i - 3) * critical_damage_add critical_buff = (i - 3) * critical_damage_add
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -547,20 +558,19 @@ class Danhengil(BaseAvatar):
for i in range(1, 8): for i in range(1, 8):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus[ add_attr_bonus['AllDamageAddedRatio'] = (
'AllDamageAddedRatio' damage_buff * injury_add
] = damage_buff * injury_add + add_attr_bonus.get( + add_attr_bonus.get('AllDamageAddedRatio', 0)
'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
elif i >= 4: elif i >= 4:
critical_buff = (i - 3) * critical_damage_add critical_buff = (i - 3) * critical_damage_add
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -596,15 +606,14 @@ class Danhengil(BaseAvatar):
for _ in range(1, 4): for _ in range(1, 4):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, 10) damage_buff = min(max_buff, 10)
add_attr_bonus[ add_attr_bonus['AllDamageAddedRatio'] = (
'AllDamageAddedRatio' damage_buff * injury_add
] = damage_buff * injury_add + add_attr_bonus.get( + add_attr_bonus.get('AllDamageAddedRatio', 0)
'AllDamageAddedRatio', 0
) )
critical_buff = 4 * critical_damage_add critical_buff = 4 * critical_damage_add
add_attr_bonus[ add_attr_bonus['CriticalDamageBase'] = (
'CriticalDamageBase' critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -666,17 +675,16 @@ class Argenti(BaseAvatar):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
talent_cc_add = self.Skill_num('Talent', 'Talent') talent_cc_add = self.Skill_num('Talent', 'Talent')
attribute_bonus[ attribute_bonus['CriticalChanceBase'] = (
'CriticalChanceBase' talent_cc_add * 10 + attribute_bonus.get('CriticalChanceBase', 0)
] = talent_cc_add * 10 + attribute_bonus.get('CriticalChanceBase', 0) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
attribute_bonus['CriticalDamageBase'] = 0.08 + attribute_bonus.get( attribute_bonus['CriticalDamageBase'] = 0.08 + attribute_bonus.get(
'CriticalDamageBase', 0 'CriticalDamageBase', 0
) )
attribute_bonus[ attribute_bonus['CriticalChanceBase'] = (
'CriticalChanceBase' talent_cc_add * 2
] = talent_cc_add * 2 + attribute_bonus.get( + attribute_bonus.get('CriticalChanceBase', 0)
'CriticalChanceBase', 0
) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
@ -1108,7 +1116,9 @@ class Kafka(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist4[2] += damage3 damagelist4[2] += damage3
skill_info_list.append({'name': '单次持续伤害', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '单次持续伤害', 'damagelist': damagelist4}
)
# 计算追加攻击伤害 # 计算追加攻击伤害
skill_multiplier = self.Skill_num('Talent', 'Talent') skill_multiplier = self.Skill_num('Talent', 'Talent')
@ -1372,7 +1382,9 @@ class Fuxuan(BaseAvatar):
0.05, 0.05,
133, 133,
) )
skill_info_list.append({'name': '终结技治疗', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '终结技治疗', 'damagelist': damagelist3}
)
return skill_info_list return skill_info_list
@ -1668,7 +1680,9 @@ class Qingque(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist2[2] += damage3 damagelist2[2] += damage3
skill_info_list.append({'name': '杠上开花!', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '杠上开花!', 'damagelist': damagelist2}
) # noqa: RUF001
# 计算终结技伤害 # 计算终结技伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
@ -2012,7 +2026,9 @@ class Guinaifen(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist4[2] += damage3 damagelist4[2] += damage3
skill_info_list.append({'name': '单次持续伤害', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '单次持续伤害', 'damagelist': damagelist4}
)
return skill_info_list return skill_info_list
@ -2091,7 +2107,9 @@ class Gepard(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '终结技(护盾)', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '终结技(护盾)', 'damagelist': damagelist3}
)
return skill_info_list return skill_info_list
@ -2175,7 +2193,9 @@ class Luocha(BaseAvatar):
skill_num, skill_num,
1, 1,
) )
skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '战技治疗量', 'damagelist': damagelist3}
)
if self.avatar_rank >= 2: if self.avatar_rank >= 2:
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
add_attr_bonus['HealRatioBase'] = ( add_attr_bonus['HealRatioBase'] = (
@ -2190,7 +2210,10 @@ class Luocha(BaseAvatar):
1, 1,
) )
skill_info_list.append( skill_info_list.append(
{'name': '战技治疗量(生命<50%)(2魂)', 'damagelist': damagelist4} {
'name': '战技治疗量(生命<50%)(2魂)',
'damagelist': damagelist4,
}
) )
damagelist5 = await calculate_shield( damagelist5 = await calculate_shield(
@ -2201,7 +2224,10 @@ class Luocha(BaseAvatar):
1, 1,
) )
skill_info_list.append( skill_info_list.append(
{'name': '战技护盾量(生命>50%)(2魂)', 'damagelist': damagelist5} {
'name': '战技护盾量(生命>50%)(2魂)',
'damagelist': damagelist5,
}
) )
# 计算天赋治疗量 # 计算天赋治疗量
@ -2215,7 +2241,9 @@ class Luocha(BaseAvatar):
skill_num, skill_num,
1, 1,
) )
skill_info_list.append({'name': '天赋治疗量', 'damagelist': damagelist6}) skill_info_list.append(
{'name': '天赋治疗量', 'damagelist': damagelist6}
)
# 计算技能树额外能力治疗量 # 计算技能树额外能力治疗量
damagelist7 = await calculate_heal( damagelist7 = await calculate_heal(
@ -2226,7 +2254,9 @@ class Luocha(BaseAvatar):
93, 93,
1, 1,
) )
skill_info_list.append({'name': '技能树治疗量', 'damagelist': damagelist7}) skill_info_list.append(
{'name': '技能树治疗量', 'damagelist': damagelist7}
)
return skill_info_list return skill_info_list
@ -2299,7 +2329,9 @@ class Bailu(BaseAvatar):
for i in range(1, 3): for i in range(1, 3):
beilv = 1 - (i * 0.15) beilv = 1 - (i * 0.15)
damagelist2[0] = damagelist2[0] + heal_num * beilv damagelist2[0] = damagelist2[0] + heal_num * beilv
skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '战技治疗量', 'damagelist': damagelist2}
)
# 计算终结技治疗量 # 计算终结技治疗量
skill_multiplier = self.Skill_num('Ultra', 'Ultra') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
@ -2311,7 +2343,9 @@ class Bailu(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '终结技治疗量', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '终结技治疗量', 'damagelist': damagelist3}
)
# 计算天赋生息治疗量 # 计算天赋生息治疗量
skill_multiplier = self.Skill_num('Talent', 'Talent') skill_multiplier = self.Skill_num('Talent', 'Talent')
@ -2419,7 +2453,9 @@ class Lynx(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '战技治疗量', 'damagelist': damagelist2}
)
damagelist3 = [] damagelist3 = []
damagelist3.append(hp_add) damagelist3.append(hp_add)
skill_info_list.append( skill_info_list.append(
@ -2436,7 +2472,9 @@ class Lynx(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '终结技治疗量', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '终结技治疗量', 'damagelist': damagelist4}
)
# 计算天赋治疗量 # 计算天赋治疗量
skill_multiplier = self.Skill_num('Talent', 'Talent') skill_multiplier = self.Skill_num('Talent', 'Talent')
@ -2448,7 +2486,9 @@ class Lynx(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '天赋缓回治疗量', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '天赋缓回治疗量', 'damagelist': damagelist5}
)
# 计算天赋求生反应治疗量 # 计算天赋求生反应治疗量
skill_multiplier = self.Skill_num( skill_multiplier = self.Skill_num(
@ -2548,7 +2588,9 @@ class Natasha(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '战技治疗量', 'damagelist': damagelist2}
)
# 计算战技缓回治疗量 # 计算战技缓回治疗量
skill_multiplier = self.Skill_num('BPSkill', 'BPSkill1') skill_multiplier = self.Skill_num('BPSkill', 'BPSkill1')
@ -2560,7 +2602,9 @@ class Natasha(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '战技缓回治疗量', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '战技缓回治疗量', 'damagelist': damagelist3}
)
# 计算终结技治疗量 # 计算终结技治疗量
skill_multiplier = self.Skill_num('Ultra', 'Ultra') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
@ -2572,7 +2616,9 @@ class Natasha(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '终结技治疗量', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '终结技治疗量', 'damagelist': damagelist4}
)
return skill_info_list return skill_info_list
@ -2637,7 +2683,9 @@ class Mar7th(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '战技护盾量', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '战技护盾量', 'damagelist': damagelist2}
)
# 计算终结技 # 计算终结技
skill_multiplier = self.Skill_num('Ultra', 'Ultra') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
@ -2691,6 +2739,7 @@ class Mar7th(BaseAvatar):
return skill_info_list return skill_info_list
class Bronya(BaseAvatar): class Bronya(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2730,10 +2779,18 @@ class Bronya(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
#终结技增加伤害 # 终结技增加伤害
attribute_bonus['AttackAddedRatio'] = attribute_bonus.get('AttackAddedRatio', 0) + self.Skill_num('Ultra', 'Ultra_A') attribute_bonus['AttackAddedRatio'] = attribute_bonus.get(
add_critical_damage_base = (attribute_bonus.get('CriticalDamageBase', 0) * self.Skill_num('Ultra', 'Ultra')) + self.Skill_num('Ultra', 'Ultra_G') 'AttackAddedRatio', 0
attribute_bonus['CriticalDamageBase'] = attribute_bonus.get('CriticalDamageBase', 0) + add_critical_damage_base ) + self.Skill_num('Ultra', 'Ultra_A')
add_critical_damage_base = (
attribute_bonus.get('CriticalDamageBase', 0)
* self.Skill_num('Ultra', 'Ultra')
) + self.Skill_num('Ultra', 'Ultra_G')
attribute_bonus['CriticalDamageBase'] = (
attribute_bonus.get('CriticalDamageBase', 0)
+ add_critical_damage_base
)
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
@ -2754,10 +2811,13 @@ class Bronya(BaseAvatar):
critical_damage_base_str = add_critical_damage_base * 100 critical_damage_base_str = add_critical_damage_base * 100
damagelist2 = [] damagelist2 = []
damagelist2.append(critical_damage_base_str) damagelist2.append(critical_damage_base_str)
skill_info_list.append({'name': '终结技提升爆伤(%)', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '终结技提升爆伤(%)', 'damagelist': damagelist2}
)
return skill_info_list return skill_info_list
class Yukong(BaseAvatar): class Yukong(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2797,10 +2857,16 @@ class Yukong(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
#终结技增加伤害 # 终结技增加伤害
attribute_bonus['AttackAddedRatio'] = attribute_bonus.get('AttackAddedRatio', 0) + self.Skill_num('BPSkill', 'BPSkill') attribute_bonus['AttackAddedRatio'] = attribute_bonus.get(
attribute_bonus['CriticalChanceBase'] = attribute_bonus.get('CriticalChanceBase', 0) + self.Skill_num('Ultra', 'Ultra_CC') 'AttackAddedRatio', 0
attribute_bonus['CriticalDamageBase'] = attribute_bonus.get('CriticalDamageBase', 0) + self.Skill_num('Ultra', 'Ultra_CD') ) + self.Skill_num('BPSkill', 'BPSkill')
attribute_bonus['CriticalChanceBase'] = attribute_bonus.get(
'CriticalChanceBase', 0
) + self.Skill_num('Ultra', 'Ultra_CC')
attribute_bonus['CriticalDamageBase'] = attribute_bonus.get(
'CriticalDamageBase', 0
) + self.Skill_num('Ultra', 'Ultra_CD')
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
@ -2846,6 +2912,7 @@ class Yukong(BaseAvatar):
return skill_info_list return skill_info_list
class Sushang(BaseAvatar): class Sushang(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2862,9 +2929,13 @@ class Sushang(BaseAvatar):
pass pass
def eidolons(self): def eidolons(self):
self.eidolon_attribute['SpeedAddedRatio'] = self.Skill_num('Talent', 'Talent') self.eidolon_attribute['SpeedAddedRatio'] = self.Skill_num(
'Talent', 'Talent'
)
if self.avatar_rank >= 6: if self.avatar_rank >= 6:
self.eidolon_attribute['SpeedAddedRatio'] = self.Skill_num('Talent', 'Talent') * 2 self.eidolon_attribute['SpeedAddedRatio'] = (
self.Skill_num('Talent', 'Talent') * 2
)
def extra_ability(self): def extra_ability(self):
self.extra_ability_attribute['jianshiDmgAdd'] = 0.2 self.extra_ability_attribute['jianshiDmgAdd'] = 0.2
@ -2899,7 +2970,7 @@ class Sushang(BaseAvatar):
damagelist1[2] += damage3 damagelist1[2] += damage3
skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) skill_info_list.append({'name': '普攻', 'damagelist': damagelist1})
#计算剑势附加伤害 # 计算剑势附加伤害
skill_multiplier = self.Skill_num('BPSkill', 'BPSkill_F') skill_multiplier = self.Skill_num('BPSkill', 'BPSkill_F')
damagelist2 = await calculate_damage( damagelist2 = await calculate_damage(
base_attr, base_attr,
@ -2943,7 +3014,9 @@ class Sushang(BaseAvatar):
damagelist4[2] += damage3 + damagelist2[2] * 3 damagelist4[2] += damage3 + damagelist2[2] * 3
skill_info_list.append({'name': '强化战技', 'damagelist': damagelist4}) skill_info_list.append({'name': '强化战技', 'damagelist': damagelist4})
skill_info_list.append({'name': '剑势附加伤害', 'damagelist': damagelist2}) skill_info_list.append(
{'name': '剑势附加伤害', 'damagelist': damagelist2}
)
# 计算终结技伤害 # 计算终结技伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
@ -2961,6 +3034,7 @@ class Sushang(BaseAvatar):
return skill_info_list return skill_info_list
class AvatarDamage: class AvatarDamage:
@classmethod @classmethod
def create( def create(

View File

@ -1,9 +1,9 @@
import json import json
from typing import Dict
from pathlib import Path from pathlib import Path
from typing import Dict
from ..Base.WeaponBase import BaseWeapon
from ..Base.model import DamageInstanceWeapon from ..Base.model import DamageInstanceWeapon
from ..Base.WeaponBase import BaseWeapon
path = Path(__file__).parent.parent path = Path(__file__).parent.parent
with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f: with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f:
@ -269,16 +269,19 @@ class BeforeDawn(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
bp_skill_dmg_add = attribute_bonus.get('BPSkillDmgAdd', 0) bp_skill_dmg_add = attribute_bonus.get('BPSkillDmgAdd', 0)
attribute_bonus['BPSkillDmgAdd'] = bp_skill_dmg_add + ( attribute_bonus['BPSkillDmgAdd'] = (
weapon_effect['23010']['Param']['e_dmg'][self.weapon_rank - 1] bp_skill_dmg_add
+ (weapon_effect['23010']['Param']['e_dmg'][self.weapon_rank - 1])
) )
ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0) ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0)
attribute_bonus['UltraDmgAdd'] = ultra_dmg_add + ( attribute_bonus['UltraDmgAdd'] = (
weapon_effect['23010']['Param']['r_dmg'][self.weapon_rank - 1] ultra_dmg_add
+ (weapon_effect['23010']['Param']['r_dmg'][self.weapon_rank - 1])
) )
talent_dmg_add = attribute_bonus.get('TalentDmgAdd', 0) talent_dmg_add = attribute_bonus.get('TalentDmgAdd', 0)
attribute_bonus['TalentDmgAdd'] = talent_dmg_add + ( attribute_bonus['TalentDmgAdd'] = (
weapon_effect['23010']['Param']['t_dmg'][self.weapon_rank - 1] talent_dmg_add
+ (weapon_effect['23010']['Param']['t_dmg'][self.weapon_rank - 1])
) )
return attribute_bonus return attribute_bonus
@ -492,11 +495,14 @@ class GeniusesRepose(BaseWeapon):
): ):
if await self.check(): if await self.check():
critical_chance_base = attribute_bonus.get('CriticalDamageBase', 0) critical_chance_base = attribute_bonus.get('CriticalDamageBase', 0)
attribute_bonus['CriticalDamageBase'] = critical_chance_base + ( attribute_bonus['CriticalDamageBase'] = (
critical_chance_base
+ (
weapon_effect['21020']['Param']['CriticalDamageBase'][ weapon_effect['21020']['Param']['CriticalDamageBase'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -518,8 +524,9 @@ class MaketheWorldClamor(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0) ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0)
attribute_bonus['UltraDmgAdd'] = ultra_dmg_add + ( attribute_bonus['UltraDmgAdd'] = (
weapon_effect['21013']['Param']['r_dmg'][self.weapon_rank - 1] ultra_dmg_add
+ (weapon_effect['21013']['Param']['r_dmg'][self.weapon_rank - 1])
) )
return attribute_bonus return attribute_bonus
@ -544,8 +551,13 @@ class TheBirthoftheSelf(BaseWeapon):
): ):
if await self.check(): if await self.check():
talent_dmg_add = attribute_bonus.get('TalentDmgAdd', 0) talent_dmg_add = attribute_bonus.get('TalentDmgAdd', 0)
attribute_bonus['TalentDmgAdd'] = talent_dmg_add + ( attribute_bonus['TalentDmgAdd'] = (
weapon_effect['21006']['Param']['t_dmg'][self.weapon_rank - 1] talent_dmg_add
+ (
weapon_effect['21006']['Param']['t_dmg'][
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
return attribute_bonus return attribute_bonus
@ -1473,12 +1485,14 @@ class CollapsingSky(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
normal_dmg_add = attribute_bonus.get('NormalDmgAdd', 0) normal_dmg_add = attribute_bonus.get('NormalDmgAdd', 0)
attribute_bonus['NormalDmgAdd'] = normal_dmg_add + ( attribute_bonus['NormalDmgAdd'] = (
weapon_effect['20002']['Param']['a_dmg'][self.weapon_rank - 1] normal_dmg_add
+ (weapon_effect['20002']['Param']['a_dmg'][self.weapon_rank - 1])
) )
bp_skill_dmg_add = attribute_bonus.get('BPSkillDmgAdd', 0) bp_skill_dmg_add = attribute_bonus.get('BPSkillDmgAdd', 0)
attribute_bonus['BPSkillDmgAdd'] = bp_skill_dmg_add + ( attribute_bonus['BPSkillDmgAdd'] = (
weapon_effect['20002']['Param']['e_dmg'][self.weapon_rank - 1] bp_skill_dmg_add
+ (weapon_effect['20002']['Param']['e_dmg'][self.weapon_rank - 1])
) )
return attribute_bonus return attribute_bonus
@ -1631,8 +1645,9 @@ class DataBank(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0) ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0)
attribute_bonus['UltraDmgAdd'] = ultra_dmg_add + ( attribute_bonus['UltraDmgAdd'] = (
weapon_effect['20006']['Param']['r_dmg'][self.weapon_rank - 1] ultra_dmg_add
+ (weapon_effect['20006']['Param']['r_dmg'][self.weapon_rank - 1])
) )
return attribute_bonus return attribute_bonus
@ -1670,13 +1685,14 @@ class Thisbodyisasword(BaseWeapon):
resistance_penetration = attribute_bonus.get( resistance_penetration = attribute_bonus.get(
'AllDamageResistancePenetration', 0 'AllDamageResistancePenetration', 0
) )
attribute_bonus[ attribute_bonus['AllDamageResistancePenetration'] = (
'AllDamageResistancePenetration' resistance_penetration
] = resistance_penetration + ( + (
weapon_effect['23014']['Param']['ResistancePenetration'][ weapon_effect['23014']['Param']['ResistancePenetration'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -1748,7 +1764,7 @@ class WorrisomeBlissf(BaseWeapon):
return attribute_bonus return attribute_bonus
# 片刻留在眼底 # 片刻, 留在眼底
class AnInstanceBeforeAGaze(BaseWeapon): class AnInstanceBeforeAGaze(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1756,7 +1772,7 @@ class AnInstanceBeforeAGaze(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者施放终结技时根据装备者的能量上限提高装备者终结技造成的伤害每点能量提高0.36%最多计入180点。 # 当装备者施放终结技时, 根据装备者的能量上限, 提高装备者终结技造成的伤害: 每点能量提高0.36%, 最多计入180点。
return True return True
async def weapon_ability( async def weapon_ability(
@ -1787,7 +1803,7 @@ class TimeWaitsforNoOne(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者对我方目标提供治疗时记录治疗量。当任意我方目标施放攻击后根据记录治疗量的36%对随机1个受到攻击的敌方目标造成基于装备者属性的附加伤害 # 当装备者对我方目标提供治疗时,记录治疗量。当任意我方目标施放攻击后,根据记录治疗量的36%,对随机1个受到攻击的敌方目标造成基于装备者属性的附加伤害
pass pass
async def weapon_ability( async def weapon_ability(
@ -1807,7 +1823,7 @@ class EchoesoftheCoffin(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者施放终结技后使我方全体速度提高12点持续1回合。 # 当装备者施放终结技后,使我方全体速度提高12点,持续1回合。
return True return True
async def weapon_ability( async def weapon_ability(
@ -1818,8 +1834,13 @@ class EchoesoftheCoffin(BaseWeapon):
): ):
if await self.check(): if await self.check():
speed_delta = attribute_bonus.get('SpeedDelta', 0) speed_delta = attribute_bonus.get('SpeedDelta', 0)
attribute_bonus['SpeedDelta'] = speed_delta + ( attribute_bonus['SpeedDelta'] = (
weapon_effect['23008']['Param']['speed'][self.weapon_rank - 1] speed_delta
+ (
weapon_effect['23008']['Param']['speed'][
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
@ -1832,7 +1853,7 @@ class NightofFright(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者为我方目标提供治疗时使该目标的攻击力提高2.3%该效果最多叠加5层 # 当装备者为我方目标提供治疗时,使该目标的攻击力提高2.3%,该效果最多叠加5层
return True return True
async def weapon_ability( async def weapon_ability(
@ -1874,11 +1895,14 @@ class PostOpConversation(BaseWeapon):
): ):
if await self.check(): if await self.check():
Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0) Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0)
attribute_bonus['Ultra_HealRatioBase'] = Ultra_HealRatioBase + ( attribute_bonus['Ultra_HealRatioBase'] = (
Ultra_HealRatioBase
+ (
weapon_effect['21000']['Param']['Ultra_HealRatioBase'][ weapon_effect['21000']['Param']['Ultra_HealRatioBase'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -1910,7 +1934,7 @@ class PerfectTiming(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 使装备者的治疗量提高提高数值等同于效果抵抗的33%最多使治疗量提高15%。 # 使装备者的治疗量提高, 提高数值等同于效果抵抗的33%, 最多使治疗量提高15%。
return True return True
async def weapon_ability( async def weapon_ability(
@ -1965,7 +1989,7 @@ class WarmthShortensColdNights(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 施放普攻或战技后为我方全体回复等同于各自生命上限2%的生命值。 # 施放普攻或战技后, 为我方全体回复等同于各自生命上限2%的生命值。
pass pass
async def weapon_ability( async def weapon_ability(
@ -1977,7 +2001,7 @@ class WarmthShortensColdNights(BaseWeapon):
return attribute_bonus return attribute_bonus
# 嘿我在这儿 # 嘿,我在这儿
class HeyOverHere(BaseWeapon): class HeyOverHere(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1985,7 +2009,7 @@ class HeyOverHere(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者施放战技时治疗量提高16%持续2回合。 # 当装备者施放战技时, 治疗量提高16%,持续2回合。
return True return True
async def weapon_ability( async def weapon_ability(
@ -1996,11 +2020,14 @@ class HeyOverHere(BaseWeapon):
): ):
if await self.check(): if await self.check():
HealRatioBase = attribute_bonus.get('HealRatioBase', 0) HealRatioBase = attribute_bonus.get('HealRatioBase', 0)
attribute_bonus['HealRatioBase'] = HealRatioBase + ( attribute_bonus['HealRatioBase'] = (
HealRatioBase
+ (
weapon_effect['22001']['Param']['HealRatioBase'][ weapon_effect['22001']['Param']['HealRatioBase'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -2012,7 +2039,7 @@ class Cornucopia(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 装备者施放战技和终结技时治疗量提高12%。 # 装备者施放战技和终结技时, 治疗量提高12%。
return True return True
async def weapon_ability( async def weapon_ability(
@ -2023,21 +2050,25 @@ class Cornucopia(BaseWeapon):
): ):
if await self.check(): if await self.check():
Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0) Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0)
attribute_bonus['Ultra_HealRatioBase'] = Ultra_HealRatioBase + ( attribute_bonus['Ultra_HealRatioBase'] = (
Ultra_HealRatioBase
+ (
weapon_effect['20001']['Param']['HealRatioBase'][ weapon_effect['20001']['Param']['HealRatioBase'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
BPSkill_HealRatioBase = attribute_bonus.get( BPSkill_HealRatioBase = attribute_bonus.get(
'BPSkill_HealRatioBase', 0 'BPSkill_HealRatioBase', 0
) )
attribute_bonus[ attribute_bonus['BPSkill_HealRatioBase'] = (
'BPSkill_HealRatioBase' BPSkill_HealRatioBase
] = BPSkill_HealRatioBase + ( + (
weapon_effect['20001']['Param']['HealRatioBase'][ weapon_effect['20001']['Param']['HealRatioBase'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -2049,7 +2080,7 @@ class FineFruit(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 战斗开始时立即为我方全体恢复6点能量。 # 战斗开始时, 立即为我方全体恢复6点能量。
pass pass
async def weapon_ability( async def weapon_ability(
@ -2069,7 +2100,7 @@ class Multiplication(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 战斗开始时立即为我方全体恢复6点能量。 # 战斗开始时, 立即为我方全体恢复6点能量。
pass pass
async def weapon_ability( async def weapon_ability(
@ -2089,7 +2120,7 @@ class ButtheBattleIsnotOver(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者施放战技后使下一个行动的我方【其他目标】造成的伤害提高30% # 当装备者施放战技后, 使下一个行动的我方【其他目标】造成的伤害提高30%
pass pass
async def weapon_ability( async def weapon_ability(
@ -2109,7 +2140,7 @@ class MemoriesofthePast(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 装备者施放攻击后额外恢复4点能量 # 装备者施放攻击后, 额外恢复4点能量
pass pass
async def weapon_ability( async def weapon_ability(
@ -2129,7 +2160,7 @@ class PlanetaryRendezvous(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当我方目标造成与装备者相同属性的伤害时造成的伤害提高12%。 # 当我方目标造成与装备者相同属性的伤害时, 造成的伤害提高12%。
pass pass
async def weapon_ability( async def weapon_ability(
@ -2139,15 +2170,18 @@ class PlanetaryRendezvous(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
all_damage_added_ratio = attribute_bonus.get('AllDamageAddedRatio', 0) all_damage_added_ratio = attribute_bonus.get('AllDamageAddedRatio', 0)
attribute_bonus['AllDamageAddedRatio'] = all_damage_added_ratio + ( attribute_bonus['AllDamageAddedRatio'] = (
all_damage_added_ratio
+ (
weapon_effect['21011']['Param']['AllDamageAddedRatio'][ weapon_effect['21011']['Param']['AllDamageAddedRatio'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
# 舞!舞!舞! # 舞! 舞! 舞!
class DanceDanceDance(BaseWeapon): class DanceDanceDance(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2155,7 +2189,7 @@ class DanceDanceDance(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者施放终结技后我方全体行动提前16%。 # 当装备者施放终结技后, 我方全体行动提前16%。
pass pass
async def weapon_ability( async def weapon_ability(
@ -2195,7 +2229,7 @@ class CarvetheMoonWeavetheClouds(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 在战斗开始时以及当装备者回合开始时随机生效1个效果 # 在战斗开始时以及当装备者回合开始时,随机生效1个效果
# 使我方全体攻击力提高10% # 使我方全体攻击力提高10%
# 使我方全体暴击伤害提高12% # 使我方全体暴击伤害提高12%
# 暂时固定只算攻击 # 暂时固定只算攻击
@ -2208,11 +2242,14 @@ class CarvetheMoonWeavetheClouds(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0) AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0)
attribute_bonus['AttackAddedRatio'] = AttackAddedRatio + ( attribute_bonus['AttackAddedRatio'] = (
AttackAddedRatio
+ (
weapon_effect['21032']['Param']['AttackAddedRatio'][ weapon_effect['21032']['Param']['AttackAddedRatio'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -2224,7 +2261,7 @@ class Chorus(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 进入战斗后使我方全体的攻击力提高8% # 进入战斗后,使我方全体的攻击力提高8%
pass pass
async def weapon_ability( async def weapon_ability(
@ -2234,11 +2271,14 @@ class Chorus(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0) AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0)
attribute_bonus['AttackAddedRatio'] = AttackAddedRatio + ( attribute_bonus['AttackAddedRatio'] = (
AttackAddedRatio
+ (
weapon_effect['20005']['Param']['AttackAddedRatio'][ weapon_effect['20005']['Param']['AttackAddedRatio'][
self.weapon_rank - 1 self.weapon_rank - 1
] ]
) )
)
return attribute_bonus return attribute_bonus
@ -2250,7 +2290,7 @@ class MeshingCogs(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 使装备者施放攻击或受到攻击后额外恢复4点能量 # 使装备者施放攻击或受到攻击后,额外恢复4点能量
pass pass
async def weapon_ability( async def weapon_ability(
@ -2270,7 +2310,7 @@ class Mediation(BaseWeapon):
super().__init__(weapon) super().__init__(weapon)
async def check(self): async def check(self):
# 当装备者施放终结技后使我方全体速度提高12点持续1回合。 # 当装备者施放终结技后,使我方全体速度提高12点,持续1回合。
return True return True
async def weapon_ability( async def weapon_ability(
@ -2281,8 +2321,13 @@ class Mediation(BaseWeapon):
): ):
if await self.check(): if await self.check():
speed_delta = attribute_bonus.get('SpeedDelta', 0) speed_delta = attribute_bonus.get('SpeedDelta', 0)
attribute_bonus['SpeedDelta'] = speed_delta + ( attribute_bonus['SpeedDelta'] = (
weapon_effect['20019']['Param']['speed'][self.weapon_rank - 1] speed_delta
+ (
weapon_effect['20019']['Param']['speed'][
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus

View File

@ -5,29 +5,14 @@ import textwrap
from pathlib import Path from pathlib import Path
from typing import Dict, Union from typing import Dict, Union
from PIL import Image, ImageDraw
from gsuid_core.logger import logger from gsuid_core.logger import logger
from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.convert import convert_img
from gsuid_core.utils.image.image_tools import draw_text_by_line from gsuid_core.utils.image.image_tools import draw_text_by_line
from PIL import Image, ImageDraw
from .to_data import api_to_dict
from ..utils.error_reply import CHAR_HINT from ..utils.error_reply import CHAR_HINT
from .cal_damage import cal_info, cal_char_info
from ..utils.fonts.first_world import fw_font_28
from ..utils.excel.read_excel import light_cone_ranks from ..utils.excel.read_excel import light_cone_ranks
from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name from ..utils.fonts.first_world import fw_font_28
from ..utils.map.SR_MAP_PATH import (
RelicId2Rarity,
AvatarRelicScore,
avatarId2Name,
)
from ..utils.resource.RESOURCE_PATH import (
RELIC_PATH,
SKILL_PATH,
PLAYER_PATH,
WEAPON_PATH,
CHAR_PORTRAIT_PATH,
)
from ..utils.fonts.starrail_fonts import ( from ..utils.fonts.starrail_fonts import (
sr_font_18, sr_font_18,
sr_font_20, sr_font_20,
@ -38,6 +23,21 @@ from ..utils.fonts.starrail_fonts import (
sr_font_34, sr_font_34,
sr_font_38, sr_font_38,
) )
from ..utils.map.name_covert import alias_to_char_name, name_to_avatar_id
from ..utils.map.SR_MAP_PATH import (
AvatarRelicScore,
RelicId2Rarity,
avatarId2Name,
)
from ..utils.resource.RESOURCE_PATH import (
CHAR_PORTRAIT_PATH,
PLAYER_PATH,
RELIC_PATH,
SKILL_PATH,
WEAPON_PATH,
)
from .cal_damage import cal_char_info, cal_info
from .to_data import api_to_dict
Excel_path = Path(__file__).parent / 'damage' Excel_path = Path(__file__).parent / 'damage'
with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:

View File

@ -130,7 +130,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] in PieceName_ilst[i]: if part[-1] in PieceName_ilst[i]:

View File

@ -96,18 +96,18 @@ class Character:
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value
if set_property != '': if set_property != '':
self.add_attr[ self.add_attr[set_property] = (
set_property set_value + self.add_attr.get(set_property, 0)
] = set_value + self.add_attr.get(set_property, 0) )
if count == 4: if count == 4:
status_add = RelicSetSkill.RelicSet[str(set_id)]['4'] status_add = RelicSetSkill.RelicSet[str(set_id)]['4']
if status_add: if status_add:
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value
if set_property != '': if set_property != '':
self.add_attr[ self.add_attr[set_property] = (
set_property set_value + self.add_attr.get(set_property, 0)
] = set_value + self.add_attr.get(set_property, 0) )
# logger.info(json.dumps(self.base_attributes)) # logger.info(json.dumps(self.base_attributes))
# logger.info(json.dumps(self.add_attr)) # logger.info(json.dumps(self.add_attr))

View File

@ -54,7 +54,9 @@ async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0):
return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255))) return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255)))
else: else:
line1 = f'UID {uid} 刷新成功' line1 = f'UID {uid} 刷新成功'
line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板' line2 = (
f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板'
)
char_num = len(char_data_list) char_num = len(char_data_list)
if char_num <= 4: if char_num <= 4:
based_w, based_h = 1380, 926 based_w, based_h = 1380, 926

View File

@ -8,7 +8,9 @@ from gsuid_core.utils.plugins_config.models import (
) )
CONIFG_DEFAULT: Dict[str, GSC] = { CONIFG_DEFAULT: Dict[str, GSC] = {
'SignTime': GsListStrConfig('每晚签到时间设置', '每晚米游社签到时间设置(时,分)', ['0', '38']), 'SignTime': GsListStrConfig(
'每晚签到时间设置', '每晚米游社签到时间设置(时,分)', ['0', '38']
),
'SignReportSimple': GsBoolConfig( 'SignReportSimple': GsBoolConfig(
'简洁签到报告', '简洁签到报告',
'开启后可以大大减少每日签到报告字数', '开启后可以大大减少每日签到报告字数',

View File

@ -39,6 +39,8 @@ async def get_gachalog_by_link(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, gacha_url, None, is_force) im = await save_gachalogs(uid, gacha_url, None, is_force)
return await bot.send(im) return await bot.send(im)

View File

@ -1,13 +1,13 @@
from gsuid_core.sv import SV
from gsuid_core.bot import Bot from gsuid_core.bot import Bot
from gsuid_core.models import Event from gsuid_core.models import Event
from gsuid_core.sv import SV
from gsuid_core.utils.database.models import GsUser
from .note_text import award
from ..utils.api import get_sqla
from ..utils.convert import get_uid from ..utils.convert import get_uid
from ..utils.sr_prefix import PREFIX
from ..utils.error_reply import UID_HINT from ..utils.error_reply import UID_HINT
from ..utils.sr_prefix import PREFIX
from .draw_note_card import draw_note_img from .draw_note_card import draw_note_img
from .note_text import award
sv_get_monthly_data = SV('sr查询月历') sv_get_monthly_data = SV('sr查询月历')
@ -15,8 +15,7 @@ sv_get_monthly_data = SV('sr查询月历')
# 群聊内 每月统计 功能 # 群聊内 每月统计 功能
@sv_get_monthly_data.on_fullmatch(f'{PREFIX}每月统计') @sv_get_monthly_data.on_fullmatch(f'{PREFIX}每月统计')
async def send_monthly_data(bot: Bot, ev: Event): async def send_monthly_data(bot: Bot, ev: Event):
sqla = get_sqla(ev.bot_id) sr_uid = await GsUser.get_bind_sruid(ev.user_id)
sr_uid = await sqla.get_bind_sruid(ev.user_id)
if sr_uid is None: if sr_uid is None:
return UID_HINT return UID_HINT
await bot.send(await award(sr_uid)) await bot.send(await award(sr_uid))

View File

@ -3,7 +3,7 @@ from datetime import datetime
from ..utils.mys_api import mys_api from ..utils.mys_api import mys_api
from ..utils.error_reply import get_error from ..utils.error_reply import get_error
month_im = '''============== month_im = """==============
SR_UID:{} SR_UID:{}
============== ==============
本日获取星琼:{} 本日获取星琼:{}
@ -19,7 +19,7 @@ SR_UID:{}
上月获取星轨通票&星轨专票:{} 上月获取星轨通票&星轨专票:{}
============== ==============
星琼收入组成: 星琼收入组成:
{}==============''' {}=============="""
async def award(uid) -> str: async def award(uid) -> str:

View File

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

View File

@ -65,7 +65,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'[SR每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}') logger.warning(
f'[SR每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}'
)
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
logger.info('[SR每日全部签到]私聊推送完成') logger.info('[SR每日全部签到]私聊推送完成')
@ -74,7 +76,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

@ -57,11 +57,15 @@ async def sign_in(sr_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'[SR签到] {sr_uid} 已获取验证码, 等待时间{delay}') logger.info(
f'[SR签到] {sr_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'[SR签到] {sr_uid} 未获取验证码,等待{delay}秒后重试...') logger.info(
f'[SR签到] {sr_uid} 未获取验证码,等待{delay}秒后重试...'
)
await asyncio.sleep(delay) await asyncio.sleep(delay)
continue continue
logger.info('配置文件暂未开启[跳过无感验证],结束本次任务...') logger.info('配置文件暂未开启[跳过无感验证],结束本次任务...')
@ -70,7 +74,9 @@ async def sign_in(sr_uid: str) -> str:
if index == 0: if index == 0:
logger.info(f'[SR签到] {sr_uid} 该用户无校验码!') logger.info(f'[SR签到] {sr_uid} 该用户无校验码!')
else: else:
logger.info(f'[SR签到] [无感验证] {sr_uid} 该用户重试 {index} 次验证成功!') logger.info(
f'[SR签到] [无感验证] {sr_uid} 该用户重试 {index} 次验证成功!'
)
break break
if (int(str(sr_uid)[0]) > 5) and (sign_data.code == 'ok'): if (int(str(sr_uid)[0]) > 5) and (sign_data.code == 'ok'):
# 国际服签到无risk_code字段 # 国际服签到无risk_code字段
@ -103,7 +109,9 @@ async def sign_in(sr_uid: str) -> str:
sign_missed -= 1 sign_missed -= 1
sign_missed = sign_info.sign_cnt_missed or sign_missed sign_missed = sign_info.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'[SR签到] {sr_uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}') logger.info(
f'[SR签到] {sr_uid} 签到完成, 结果: {mes_im}, 漏签次数: {sign_missed}'
)
return im return im
@ -163,7 +171,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'[SR签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到') logger.info(
f'[SR签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到'
)
tasks.clear() tasks.clear()
already = 0 already = 0
await asyncio.sleep(delay) await asyncio.sleep(delay)

View File

@ -5,12 +5,12 @@ from gsuid_core.logger import logger
from ..utils.mys_api import mys_api from ..utils.mys_api import mys_api
from ..utils.error_reply import get_error from ..utils.error_reply import get_error
daily_im = '''*数据刷新可能存在一定延迟,请以当前游戏实际数据为准 daily_im = """*数据刷新可能存在一定延迟,请以当前游戏实际数据为准
============== ==============
开拓力:{}/{}{} 开拓力:{}/{}{}
委托执行: 委托执行:
总数/完成/上限:{}/{}/{} 总数/完成/上限:{}/{}/{}
{}''' {}"""
def seconds2hours(seconds: int) -> str: def seconds2hours(seconds: int) -> str:

View File

@ -2,11 +2,11 @@ from typing import List
from gsuid_core.models import Message from gsuid_core.models import Message
CK_QRCODE_LOGIN = '''先发送【绑定uidxxx】绑定UID, CK_QRCODE_LOGIN = """先发送【绑定uidxxx】绑定UID,
然后发送扫码登陆, 使用米游社APP扫码完成绑定, [或者]选择以下方法 然后发送扫码登陆, 使用米游社APP扫码完成绑定, [或者]选择以下方法
''' """
CK_CONSOLE = '''var cookie = document.cookie; CK_CONSOLE = """var cookie = document.cookie;
var Str_Num = cookie.indexOf('_MHYUUID='); var Str_Num = cookie.indexOf('_MHYUUID=');
cookie = '添加 ' + cookie.substring(Str_Num); cookie = '添加 ' + cookie.substring(Str_Num);
var ask = confirm('Cookie:' + cookie + '\\n\\n按确认,然后粘贴发送给机器人'); var ask = confirm('Cookie:' + cookie + '\\n\\n按确认,然后粘贴发送给机器人');
@ -16,21 +16,21 @@ if (ask == true) {
} else { } else {
msg = 'Cancel' msg = 'Cancel'
} }
''' """
CK_URL = '''1.复制上面全部代码,然后打开下面的网站 CK_URL = """1.复制上面全部代码,然后打开下面的网站
https://bbs.mihoyo.com/ys/obc/?bbs_presentation_style=no_header(国服) https://bbs.mihoyo.com/ys/obc/?bbs_presentation_style=no_header(国服)
https://www.hoyolab.com/home(国际服) https://www.hoyolab.com/home(国际服)
2.在页面上右键检查或者Ctrl+Shift+i 2.在页面上右键检查或者Ctrl+Shift+i
3.选择控制台(Console),粘贴,回车,在弹出的窗口点确认(点完自动复制) 3.选择控制台(Console),粘贴,回车,在弹出的窗口点确认(点完自动复制)
4.然后在和机器人的私聊窗口,粘贴发送即可 4.然后在和机器人的私聊窗口,粘贴发送即可
''' """
SK_URL = '''如果想获取SK,操作方法和上面一致,网址更换为 SK_URL = """如果想获取SK,操作方法和上面一致,网址更换为
http://user.mihoyo.com/(国服) http://user.mihoyo.com/(国服)
登陆后,进入控制台粘贴代码 登陆后,进入控制台粘贴代码
然后在和机器人的私聊窗口,粘贴发送即可 然后在和机器人的私聊窗口,粘贴发送即可
''' """
async def get_ck_help() -> List[Message]: async def get_ck_help() -> List[Message]:

View File

@ -15,12 +15,12 @@ from gsuid_core.segment import MessageSegment
from ..utils.api import get_sqla from ..utils.api import get_sqla
from ..utils.mys_api import mys_api from ..utils.mys_api import mys_api
disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。 disnote = """免责声明:您将通过扫码完成获取米游社sk以及ck。
本Bot将不会保存您的登录状态 本Bot将不会保存您的登录状态
我方仅提供米游社查询及相关游戏内容服务 我方仅提供米游社查询及相关游戏内容服务
若您的账号封禁被盗等处罚与我方无关 若您的账号封禁被盗等处罚与我方无关
害怕风险请勿扫码! 害怕风险请勿扫码!
''' """
def get_qrcode_base64(url): def get_qrcode_base64(url):

View File

@ -2,19 +2,19 @@ from typing import Union
UID_HINT = '你还没有绑定过uid哦!\n请使用[sr绑定uid123456]命令绑定!' UID_HINT = '你还没有绑定过uid哦!\n请使用[sr绑定uid123456]命令绑定!'
MYS_HINT = '你还没有绑定过mysid哦!\n请使用[绑定mys1234]命令绑定!' MYS_HINT = '你还没有绑定过mysid哦!\n请使用[绑定mys1234]命令绑定!'
CK_HINT = '''你还没有绑定过Cookie哦!发送【ck帮助】获取帮助! CK_HINT = """你还没有绑定过Cookie哦!发送【ck帮助】获取帮助!
警告:绑定Cookie可能会带来未知的账号风险,请确保信任机器人管理员''' 警告:绑定Cookie可能会带来未知的账号风险,请确保信任机器人管理员"""
CHAR_HINT = '您的支援/星海同行角色没有{}的数据哦!\n请先把{}放入支援/星海同行中再使用【sr强制刷新】命令来缓存数据进行查询! !' CHAR_HINT = '您的支援/星海同行角色没有{}的数据哦!\n请先把{}放入支援/星海同行中再使用【sr强制刷新】命令来缓存数据进行查询! !'
VERIFY_HINT = '''出现验证码! VERIFY_HINT = """出现验证码!
如已绑定CK: 请至米游社软件->我的->我的角色处解锁验证码 如已绑定CK: 请至米游社软件->我的->我的角色处解锁验证码
(可使用[gs关闭推送]命令关闭体力推送以减少出现验证码风险) (可使用[gs关闭推送]命令关闭体力推送以减少出现验证码风险)
如未绑定CK: 可联系管理员使用[gs清除缓存]命令 如未绑定CK: 可联系管理员使用[gs清除缓存]命令
''' """
SK_HINT = '你还没有绑定过Stoken或者Stoken已失效~\n请群聊发送 [扫码登陆] 或加好友私聊Bot [添加]后跟SK格式 以绑定SK' SK_HINT = '你还没有绑定过Stoken或者Stoken已失效~\n请群聊发送 [扫码登陆] 或加好友私聊Bot [添加]后跟SK格式 以绑定SK'
UPDATE_HINT = '''更新失败!更多错误信息请查看控制台... UPDATE_HINT = """更新失败!更多错误信息请查看控制台...
>> 可以尝试使用 >> 可以尝试使用
>> [gs强制更新](危险) >> [gs强制更新](危险)
>> [gs强行强制更新](超级危险)!''' >> [gs强行强制更新](超级危险)!"""
def get_error(retcode: Union[int, str]) -> str: def get_error(retcode: Union[int, str]) -> str:

View File

@ -2,33 +2,33 @@ import asyncio
from pathlib import Path from pathlib import Path
from typing import Dict, List, Tuple, Union from typing import Dict, List, Tuple, Union
from bs4 import BeautifulSoup from aiohttp import ClientTimeout, TCPConnector
from msgspec import json as msgjson
from gsuid_core.logger import logger
from aiohttp.client import ClientSession from aiohttp.client import ClientSession
from aiohttp import TCPConnector, ClientTimeout from bs4 import BeautifulSoup
from gsuid_core.logger import logger
from gsuid_core.utils.download_resource.download_core import find_fastest_url
from gsuid_core.utils.download_resource.download_file import download from gsuid_core.utils.download_resource.download_file import download
from gsuid_core.utils.download_resource.download_core import check_url from msgspec import json as msgjson
from .download_url import download_file from .download_url import download_file
from .RESOURCE_PATH import ( from .RESOURCE_PATH import (
WIKI_PATH, CHAR_ICON_PATH,
CHAR_PORTRAIT_PATH,
CHAR_PREVIEW_PATH,
CONSUMABLE_PATH,
ELEMENT_PATH,
GUIDE_CHARACTER_PATH,
GUIDE_LIGHT_CONE_PATH,
GUIDE_PATH, GUIDE_PATH,
RELIC_PATH, RELIC_PATH,
RESOURCE_PATH,
SKILL_PATH, SKILL_PATH,
WEAPON_PATH, WEAPON_PATH,
ELEMENT_PATH,
RESOURCE_PATH,
CHAR_ICON_PATH,
WIKI_ROLE_PATH,
CONSUMABLE_PATH,
WIKI_RELIC_PATH,
CHAR_PREVIEW_PATH,
CHAR_PORTRAIT_PATH,
GUIDE_CHARACTER_PATH,
WIKI_LIGHT_CONE_PATH, WIKI_LIGHT_CONE_PATH,
GUIDE_LIGHT_CONE_PATH,
WIKI_MATERIAL_FOR_ROLE, WIKI_MATERIAL_FOR_ROLE,
WIKI_PATH,
WIKI_RELIC_PATH,
WIKI_ROLE_PATH,
) )
with Path.open( with Path.open(
@ -40,30 +40,6 @@ with Path.open(
) )
async def find_fastest_url(urls: Dict[str, str]):
tasks = []
for tag in urls:
tasks.append(asyncio.create_task(check_url(tag, urls[tag])))
results: list[
tuple[str, str, float] | BaseException
] = await asyncio.gather(*tasks, return_exceptions=True)
fastest_tag = ''
fastest_url = ''
fastest_time = float('inf')
for result in results:
if isinstance(result, BaseException):
continue
tag, url, elapsed_time = result
if elapsed_time < fastest_time:
fastest_url = url
fastest_time = elapsed_time
fastest_tag = tag
return fastest_tag, fastest_url
async def check_speed(): async def check_speed():
logger.info('[GsCore资源下载]测速中...') logger.info('[GsCore资源下载]测速中...')
@ -171,7 +147,9 @@ async def download_all_file_from_cos():
or not Path.stat(path).st_size or not Path.stat(path).st_size
or not is_diff or not is_diff
): ):
logger.info(f'[cos]开始下载[{resource_type}]_[{name}]...') logger.info(
f'[cos]开始下载[{resource_type}]_[{name}]...'
)
temp_num += 1 temp_num += 1
if isinstance(url, int): if isinstance(url, int):
logger.error( logger.error(
@ -209,7 +187,9 @@ async def download_all_file_from_cos():
await _download(TASKS) await _download(TASKS)
await _download(TASKS) await _download(TASKS)
if count := len(failed_list): if count := len(failed_list):
logger.error(f'[cos]仍有{count}个文件未下载,请使用命令 `下载全部资源` 重新下载') logger.error(
f'[cos]仍有{count}个文件未下载,请使用命令 `下载全部资源` 重新下载'
)
async def _get_url(url: str, sess: ClientSession): async def _get_url(url: str, sess: ClientSession):
@ -236,7 +216,9 @@ async def download_all_file(
pre_data = content_bs.find_all('pre')[0] pre_data = content_bs.find_all('pre')[0]
data_list = pre_data.find_all('a') data_list = pre_data.find_all('a')
size_list = list(content_bs.strings) size_list = list(content_bs.strings)
logger.info(f'{TAG} 数据库 {endpoint} 中存在 {len(data_list)} 个内容!') logger.info(
f'{TAG} 数据库 {endpoint} 中存在 {len(data_list)} 个内容!'
)
temp_num = 0 temp_num = 0
for index, data in enumerate(data_list): for index, data in enumerate(data_list):

View File

@ -1,11 +1,3 @@
[tool.black]
line-length = 79
target-version = ["py38", "py39", "py310", "py311"]
include = '\.pyi?$'
skip-string-normalization = true
extend-exclude = '''
'''
[tool.isort] [tool.isort]
profile = "black" profile = "black"
line_length = 79 line_length = 79
@ -40,7 +32,6 @@ secondary = true
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
flake8 = "^6.0.0" flake8 = "^6.0.0"
black = "^23.1.0"
isort = "^5.12.0" isort = "^5.12.0"
pre-commit = "^2.21.0" pre-commit = "^2.21.0"
pycln = "^2.1.2" pycln = "^2.1.2"
@ -80,6 +71,7 @@ select = [
"Q", # flake8-quotes "Q", # flake8-quotes
] ]
ignore = [ ignore = [
"ISC",
"PLR2004", "PLR2004",
"A003", "A003",
"E501", "E501",
@ -101,4 +93,6 @@ target-version = "py38"
[tool.ruff.flake8-quotes] [tool.ruff.flake8-quotes]
inline-quotes = "single" inline-quotes = "single"
multiline-quotes = "single"
[tool.ruff.format]
quote-style = "single"