This commit is contained in:
qwerdvd 2023-09-06 10:45:08 +08:00
commit 6d1d4e656f
44 changed files with 1070 additions and 548 deletions

View File

@ -1,6 +1,5 @@
"""Mihomo.me api 包装
"""
from .models import MihomoData as MihomoData
from .requests import get_char_card_info as get_char_card_info
__all__ = ["requests", "MihomoData"]

View File

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import TypedDict, Union
from typing import Union, TypedDict
class MihomoData(TypedDict):

View File

@ -1,4 +1,4 @@
from typing import Any, Dict, List, TypedDict, Union
from typing import Any, Dict, List, Union, TypedDict
################
# 抽卡记录相关 #

View File

@ -1,8 +1,8 @@
import re
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid

View File

@ -1,17 +1,18 @@
from pathlib import Path
from typing import Optional, Union
from typing import Union, Optional
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import get_error
from gsuid_core.utils.image.image_tools import (
draw_pic_with_ring,
get_qq_avatar,
draw_pic_with_ring,
)
from ..sruid_utils.api.mys.models import AbyssAvatar
from .utils import get_icon
from ..utils.convert import GsCookie
from ..utils.image.convert import convert_img
from ..sruid_utils.api.mys.models import AbyssAvatar
from ..utils.fonts.starrail_fonts import (
sr_font_22,
sr_font_28,
@ -19,8 +20,6 @@ from ..utils.fonts.starrail_fonts import (
sr_font_34,
sr_font_42,
)
from ..utils.image.convert import convert_img
from .utils import get_icon
abyss_list = {
'1': '琥珀恩赐其一',

View File

@ -2,9 +2,8 @@ from io import BytesIO
from pathlib import Path
from typing import TypeVar
from aiohttp import ClientSession
from PIL import Image
from aiohttp import ClientSession
from gsuid_core.data_store import get_res_path
T = TypeVar("T")

View File

@ -3,24 +3,24 @@ from pathlib import Path
from typing import Tuple, cast
from PIL import Image
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV
from .to_card import api_to_card
from ..utils.convert import get_uid
from ..utils.sr_prefix import PREFIX
from ..utils.error_reply import UID_HINT
from ..utils.image.convert import convert_img
from ..utils.resource.RESOURCE_PATH import TEMP_PATH
from ..utils.sr_prefix import PREFIX
from .draw_char_img import cal, draw_char_info_img, get_char_data
from .to_card import api_to_card
from .draw_char_img import cal, get_char_data, draw_char_info_img
sv_char_info_config = SV('sr面板设置', pm=2)
sv_get_char_info = SV('sr面板查询', priority=10)
sv_get_sr_original_pic = SV('sr查看面板原图', priority=5)
sv_char_damage_cal = SV('sr伤害计算')
@sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算')
async def send_damage_msg(bot: Bot, ev: Event):
msg = ''.join(re.findall('[\u4e00-\u9fa5 ]', ev.text))

View File

@ -1,19 +1,35 @@
import re
import json
import math
import re
from pathlib import Path
from typing import Dict, Union
from mpmath import mp, nstr
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.image.convert import convert_img
from gsuid_core.utils.image.image_tools import draw_text_by_line
from .to_data import api_to_dict
from .effect.Role import RoleInstance
from .mono.Character import Character
from ..utils.error_reply import CHAR_HINT
from ..utils.excel.read_excel import light_cone_ranks
from ..utils.fonts.first_world import fw_font_28
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.map.SR_MAP_PATH import (
RelicId2Rarity,
AvatarRelicScore,
avatarId2Name,
avatarId2DamageType,
)
from ..utils.resource.RESOURCE_PATH import (
RELIC_PATH,
SKILL_PATH,
PLAYER_PATH,
WEAPON_PATH,
CHAR_PORTRAIT_PATH,
)
from ..utils.fonts.starrail_fonts import (
sr_font_20,
sr_font_23,
@ -23,23 +39,6 @@ from ..utils.fonts.starrail_fonts import (
sr_font_34,
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,
avatarId2DamageType,
avatarId2Name,
)
from ..utils.resource.RESOURCE_PATH import (
CHAR_PORTRAIT_PATH,
PLAYER_PATH,
RELIC_PATH,
SKILL_PATH,
WEAPON_PATH,
)
from .effect.Role import RoleInstance
from .mono.Character import Character
from .to_data import api_to_dict
Excel_path = Path(__file__).parent / 'effect'
with Path.open(Excel_path / 'Excel' / 'seele.json', encoding='utf-8') as f:
@ -118,7 +117,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
(620, 207), char.char_name, (255, 255, 255), sr_font_38, 'lm'
)
if hasattr(sr_font_38, 'getsize'):
char_name_len = sr_font_38.getsize(char.char_name)[0] # type: ignore
char_name_len = sr_font_38.getsize(char.char_name)[0] # type: ignore
else:
bbox = sr_font_38.getbbox(char.char_name)
char_name_len = bbox[2] - bbox[0]
@ -365,7 +364,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
'lm',
)
if hasattr(sr_font_34, 'getsize'):
weapon_name_len = sr_font_34.getsize( # type: ignore
weapon_name_len = sr_font_34.getsize( # type: ignore
char.equipment["equipmentName"]
)[0]
else:
@ -532,7 +531,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
if subName in ['攻击力', '生命值', '防御力', '速度']:
subValueStr = nstr(subValue, 3)
else:
subValueStr = nstr(subValue * 100, 3) + '%' # type: ignore
subValueStr = nstr(subValue * 100, 3) + '%' # type: ignore
subNameStr = subName.replace('百分比', '').replace('元素', '')
# 副词条文字颜色
relic_color = (255, 255, 255)
@ -584,7 +583,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
fw_font_28,
'mm',
)
if damage_len > 0:
damage_list = await cal(char_data)
# 写伤害
@ -595,7 +594,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
sr_font_26,
'lm',
)
char_img_draw.text(
(370, 2048),
'暴击值',
@ -603,7 +602,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
sr_font_26,
'lm',
)
char_img_draw.text(
(560, 2048),
'期望值',
@ -611,7 +610,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
sr_font_26,
'lm',
)
char_img_draw.text(
(750, 2048),
'满配辅助末日兽',
@ -653,7 +652,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
sr_font_26,
'lm',
)
# 写底层文字
char_img_draw.text(
(525, 2022 + bg_height),
@ -722,7 +721,13 @@ async def cal(char_data: Dict):
skill_info_list = []
if char.char_id in [1102, 1204, 1107, 1213, 1006]:
if char.char_id == 1213:
for skill_type in ['Normal', 'Normal1', 'Normal2', 'Normal3', 'Ultra']:
for skill_type in [
'Normal',
'Normal1',
'Normal2',
'Normal3',
'Ultra',
]:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)

View File

@ -1,14 +1,10 @@
from typing import List
from mpmath import mp
from gsuid_core.logger import logger
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Base.model import (
DamageInstanceAvatar,
DamageInstanceSkill,
)
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
mp.dps = 14
@ -16,13 +12,15 @@ mp.dps = 14
class Seele(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
@ -36,20 +34,23 @@ class Seele(BaseAvatar):
def extra_ability(self):
# 额外能力 割裂 抗性穿透提高20
self.extra_ability_attribute[
'QuantumResistancePenetration'
] = mp.mpf(0.2)
self.extra_ability_attribute['QuantumResistancePenetration'] = mp.mpf(
0.2
)
class JingYuan(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
@ -64,24 +65,23 @@ class JingYuan(BaseAvatar):
def extra_ability(self):
logger.info('额外能力')
logger.info('【神君】下回合的攻击段数大于等于6段则其下回合的暴击伤害提高25%')
self.extra_ability_attribute[
'CriticalDamageBase'
] = mp.mpf(0.25)
self.extra_ability_attribute['CriticalDamageBase'] = mp.mpf(0.25)
logger.info('施放战技后暴击率提升10%')
self.extra_ability_attribute[
'CriticalChanceBase'
] = mp.mpf(0.1)
self.extra_ability_attribute['CriticalChanceBase'] = mp.mpf(0.1)
class Clara(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
@ -92,23 +92,22 @@ class Clara(BaseAvatar):
def extra_ability(self):
logger.info('额外能力')
logger.info('史瓦罗的反击造成的伤害提高30%')
self.extra_ability_attribute[
'TalentDmgAdd'
] = mp.mpf(0.3)
self.extra_ability_attribute[
'UltraDmgAdd'
] = mp.mpf(0.3)
self.extra_ability_attribute['TalentDmgAdd'] = mp.mpf(0.3)
self.extra_ability_attribute['UltraDmgAdd'] = mp.mpf(0.3)
class Danhengil(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
@ -125,49 +124,49 @@ class Danhengil(BaseAvatar):
def extra_ability(self):
logger.info('额外能力')
logger.info('对拥有虚数属性弱点的敌方目标造成伤害时暴击伤害提高24%')
self.extra_ability_attribute[
'CriticalDamageBase'
] = mp.mpf(0.24)
self.extra_ability_attribute['CriticalDamageBase'] = mp.mpf(0.24)
class Silverwolf(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
def eidolons(self):
if self.avatar_rank >= 6:
self.extra_ability_attribute[
'AllDamageAddedRatio'
] = mp.mpf(1)
self.extra_ability_attribute['AllDamageAddedRatio'] = mp.mpf(1)
def extra_ability(self):
logger.info('额外能力')
logger.info('战技降抗')
logger.info('战技使目标全属性抗性降低的效果额外降低3%')
enemy_status_resistance = self.BPSkill_d() + 0.03
self.extra_ability_attribute[
'QuantumResistancePenetration'
] = mp.mpf(enemy_status_resistance)
self.extra_ability_attribute['QuantumResistancePenetration'] = mp.mpf(
enemy_status_resistance
)
logger.info('终结技降防')
ultra_defence = self.Ultra_d()
logger.info('天赋降防')
talent_defence = self.Talent()
ignore_defence = ultra_defence + talent_defence
self.extra_ability_attribute[
'ignore_defence'
] = mp.mpf(ignore_defence)
self.extra_ability_attribute['ignore_defence'] = mp.mpf(ignore_defence)
class Avatar:
@classmethod
def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def create(
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
if char.id_ == 1006:
return Silverwolf(char, skills)
if char.id_ == 1213:

View File

@ -1,13 +1,13 @@
import json
from abc import abstractmethod
from pathlib import Path
from typing import List
from pathlib import Path
from abc import abstractmethod
from mpmath import mp
from ....utils.excel.read_excel import AvatarPromotion
from .model import DamageInstanceAvatar, DamageInstanceSkill
from .SkillBase import BaseSkills
from ....utils.excel.read_excel import AvatarPromotion
from .model import DamageInstanceSkill, DamageInstanceAvatar
path = Path(__file__).parent.parent
with Path.open(path / 'Excel' / 'seele.json', encoding='utf-8') as f:
@ -18,7 +18,9 @@ mp.dps = 14
class BaseAvatarBuff:
@classmethod
def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def create(
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
cls.extra_ability_id = []
if char.extra_ability:
for extra_ability in char.extra_ability:
@ -39,7 +41,9 @@ class BaseAvatarBuff:
class BaseAvatar:
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
self.Skill = BaseSkills.create(char=char, skills=skills)
self.Buff = BaseAvatarBuff.create(char=char, skills=skills)
self.avatar_id = char.id_
@ -89,21 +93,21 @@ class BaseAvatar:
def Skill_Info(self, skill_type):
skill_info = skill_dict[str(self.avatar_id)]['skilllist'][skill_type]
return skill_info
def Normalnum(self, skill_type):
return mp.mpf(
skill_dict[str(self.avatar_id)][skill_type][
self.Skill.Normal_.level - 1
]
)
def Normal(self):
return mp.mpf(
skill_dict[str(self.avatar_id)]['Normal'][
self.Skill.Normal_.level - 1
]
)
def BPSkill(self):
return mp.mpf(
skill_dict[str(self.avatar_id)]['BPSkill'][
@ -122,33 +126,37 @@ class BaseAvatar:
return mp.mpf(
skill_dict[str(self.avatar_id)]['Maze'][self.Skill.Maze_.level - 1]
)
def Talent(self):
return mp.mpf(
skill_dict[str(self.avatar_id)]['Talent'][self.Skill.Talent_.level - 1]
skill_dict[str(self.avatar_id)]['Talent'][
self.Skill.Talent_.level - 1
]
)
def BPSkill_d(self):
return mp.mpf(
skill_dict[str(self.avatar_id)]['BPSkill_D'][
self.Skill.BPSkill_.level - 1
]
)
def Ultra_d(self):
return mp.mpf(
skill_dict[str(self.avatar_id)]['Ultra_D'][
self.Skill.Ultra_.level - 1
]
)
def Talent_add(self):
if self.avatar_id in [1102]:
return mp.mpf(
skill_dict[str(self.avatar_id)]['Talent'][self.Skill.Talent_.level - 1]
skill_dict[str(self.avatar_id)]['Talent'][
self.Skill.Talent_.level - 1
]
)
else:
return mp.mpf(0)
def Ultra_Use(self):
return skill_dict[str(self.avatar_id)]['Ultra_Use'][0]
return skill_dict[str(self.avatar_id)]['Ultra_Use'][0]

View File

@ -1,12 +1,11 @@
from abc import abstractmethod
from typing import Dict
from abc import abstractmethod
from mpmath import mp
from gsuid_core.logger import logger
from ....utils.map.SR_MAP_PATH import RelicSetSkill
from .model import DamageInstanceRelic
from ....utils.map.SR_MAP_PATH import RelicSetSkill
mp.dps = 14
@ -22,10 +21,7 @@ class SingleRelic:
def get_attribute_(self):
# MainAffix
if (
self.raw_relic.MainAffix.Property
in self.relic_attribute_bonus
):
if self.raw_relic.MainAffix.Property in self.relic_attribute_bonus:
self.relic_attribute_bonus[
self.raw_relic.MainAffix.Property
] += mp.mpf(self.raw_relic.MainAffix.Value)

View File

@ -1,10 +1,10 @@
import json
from pathlib import Path
from typing import List
from pathlib import Path
from mpmath import mp
from .model import DamageInstanceAvatar, DamageInstanceSkill
from .model import DamageInstanceSkill, DamageInstanceAvatar
mp.dps = 14
@ -28,7 +28,9 @@ class BaseSkills:
Talent_: SingleSkill
@classmethod
def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
def create(
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
for skill in skills:
skill_attack_type = skill.skillAttackType
if skill_attack_type == 'Normal':

View File

@ -1,11 +1,11 @@
from abc import abstractmethod
from typing import Dict
from abc import abstractmethod
from mpmath import mp
from .model import DamageInstanceWeapon
from ....utils.excel.read_excel import EquipmentPromotion
from ....utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty
from .model import DamageInstanceWeapon
mp.dps = 14

View File

@ -218,6 +218,64 @@
0.50000000044703484
]
}
},
"21001": {
"Param": {
"AllDamageAddedRatio": [
0.12000000022351742,
0.1500000002793968,
0.1800000003352761,
0.210000003911555,
0.24000000044703484
]
}
},
"21022": {
"Param": {
"AllDamageAddedRatio": [
0.16000000022351742,
0.2050000002793968,
0.2400000003352761,
0.2850000003911555,
0.32000000044703484
]
}
},
"21015": {
"Param": {
"ignore_defence": [
0.12000000022351742,
0.1300000002793968,
0.1400000003352761,
0.1500000003911555,
0.16000000044703484
]
}
},
"23004": {
"Param": {
"AllDamageAddedRatio": [
0.2400000000745058,
0.28000000009313226,
0.32000000011175871,
0.36000000013038516,
0.4000000001490116
],
"A2_StatusProbability": [
0.18000000022351742,
0.2100000002793968,
0.2400000003352761,
0.2700000003911555,
0.30000000044703484
],
"A2_AttackAddedRatio": [
0.2400000000745058,
0.28000000009313226,
0.32000000011175871,
0.36000000013038516,
0.4000000001490116
]
}
},
"23007": {
"Param": {
@ -236,6 +294,24 @@
0.20000000044703484
]
}
},
"23006": {
"Param": {
"SpeedAddedRatio": [
0.04800000022351742,
0.0560000002793968,
0.0640000003352761,
0.0720000003911555,
0.0800000044703484
],
"AllDamageAddedRatio": [
0.2400000000745058,
0.28000000009313226,
0.32000000011175871,
0.36000000013038516,
0.4000000001490116
]
}
},
"21020": {
"Param": {

View File

@ -1,12 +1,12 @@
from collections import Counter
from typing import Dict, List
from collections import Counter
from gsuid_core.logger import logger
from mpmath import mp
from gsuid_core.logger import logger
from ..Base.model import DamageInstanceRelic
from ..Base.RelicBase import BaseRelicSetSkill, SingleRelic
from ..utils import merge_attribute
from ..Base.model import DamageInstanceRelic
from ..Base.RelicBase import SingleRelic, BaseRelicSetSkill
class Relic101(BaseRelicSetSkill):
@ -173,6 +173,7 @@ class Relic108(BaseRelicSetSkill):
)
return attribute_bonus
class Relic109(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
@ -193,6 +194,7 @@ class Relic109(BaseRelicSetSkill):
)
return attribute_bonus
class Relic110(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
@ -259,6 +261,49 @@ class Relic112(BaseRelicSetSkill):
return attribute_bonus
class Relic113(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
self._count = count
async def check(self, base_attr: Dict, attribute_bonus: Dict):
'''
当装备者受到攻击或被我方目标消耗生命值后暴击率提高8%持续2回合该效果最多叠加2层
'''
logger.info('Relic113 check success')
return True
async def set_skill_ability(self, base_attr: Dict, attribute_bonus: Dict):
if self.pieces4 and await self.check(base_attr, attribute_bonus):
logger.info('当装备者受到攻击或被我方目标消耗生命值后')
critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0)
attribute_bonus['CriticalChanceBase'] = (
critical_chance_base + mp.mpf(0.08000000009313226) * 2
)
return attribute_bonus
class Relic114(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
self._count = count
async def check(self, base_attr: Dict, attribute_bonus: Dict):
'''
当装备者对我方目标施放终结技时我方全体速度提高12%持续1回合该效果无法叠加
'''
logger.info('Relic114 check success')
return True
async def set_skill_ability(self, base_attr: Dict, attribute_bonus: Dict):
if self.pieces4 and await self.check(base_attr, attribute_bonus):
speed_added_ratio = attribute_bonus.get('SpeedAddedRatio', 0)
attribute_bonus['SpeedAddedRatio'] = speed_added_ratio + mp.mpf(
0.12000000011175871
)
return attribute_bonus
class Relic301(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
@ -334,7 +379,7 @@ class Relic304(BaseRelicSetSkill):
备者的效果命中大于等于50%
'''
merged_attr = await merge_attribute(base_attr, attribute_bonus)
if merged_attr['StatusProbability'] >= mp.mpf(0.5000000004656613):
if merged_attr['StatusResistanceBase'] >= mp.mpf(0.5000000004656613):
logger.info('Relic306 check success')
return True
return None
@ -440,6 +485,7 @@ class Relic308(BaseRelicSetSkill):
logger.info('ModifyActionDelay')
return attribute_bonus
class Relic309(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
@ -466,6 +512,30 @@ class Relic309(BaseRelicSetSkill):
)
return attribute_bonus
class Relic310(BaseRelicSetSkill):
def __init__(self, set_id: int, count: int):
super().__init__(set_id, count)
async def check(self, base_attr: Dict, attribute_bonus: Dict):
'''
当装备者的效果抵抗大于等于30%我方全体暴击伤害提高10%
'''
merged_attr = await merge_attribute(base_attr, attribute_bonus)
if merged_attr['StatusResistanceBase'] >= mp.mpf(0.3):
logger.info('Relic310 check success')
return True
return None
async def set_skill_ability(self, base_attr: Dict, attribute_bonus: Dict):
if self.pieces2 and await self.check(base_attr, attribute_bonus):
critical_damage_base = attribute_bonus.get('CriticalDamageBase', 0)
attribute_bonus[
'CriticalDamageBase'
] = critical_damage_base + mp.mpf(0.10000000018626451)
return attribute_bonus
class RelicSet:
HEAD: SingleRelic
HAND: SingleRelic
@ -543,6 +613,10 @@ class RelicSet:
cls.SetSkill.append(Relic111(set_id, count))
elif set_id == 112:
cls.SetSkill.append(Relic112(set_id, count))
elif set_id == 113:
cls.SetSkill.append(Relic113(set_id, count))
elif set_id == 114:
cls.SetSkill.append(Relic114(set_id, count))
elif set_id == 301:
cls.SetSkill.append(Relic301(set_id, count))
elif set_id == 302:
@ -561,5 +635,7 @@ class RelicSet:
cls.SetSkill.append(Relic308(set_id, count))
elif set_id == 309:
cls.SetSkill.append(Relic309(set_id, count))
elif set_id == 310:
cls.SetSkill.append(Relic310(set_id, count))
else:
raise Exception(f'Unknow SetId: {set_id}')

View File

@ -1,12 +1,12 @@
from gsuid_core.logger import logger
from mpmath import mp
from gsuid_core.logger import logger
from ..mono.Character import Character
from .Avatar.Avatar import Avatar
from .Weapon.Weapon import Weapon
from .utils import merge_attribute
from ..mono.Character import Character
from .Base.model import DamageInstance
from .Relic.Relic import RelicSet, SingleRelic
from .utils import merge_attribute
from .Weapon.Weapon import Weapon
mp.dps = 14
@ -115,44 +115,22 @@ class RoleInstance:
raise Exception('attribute_bonus is None')
for attribute in self.weapon.__dict__['weapon_attribute']:
if attribute in self.attribute_bonus:
self.attribute_bonus[
attribute
] += self.weapon.__dict__['weapon_attribute'][attribute]
self.attribute_bonus[attribute] += self.weapon.__dict__[
'weapon_attribute'
][attribute]
else:
self.attribute_bonus[
attribute
] = self.weapon.__dict__['weapon_attribute'][attribute]
self.attribute_bonus[attribute] = self.weapon.__dict__[
'weapon_attribute'
][attribute]
async def cal_damage(self, skill_type):
logger.info('base_attr')
logger.info(self.base_attr)
logger.info('attribute_bonus')
logger.info(self.attribute_bonus)
# 检查武器战斗生效的buff
logger.info('检查武器战斗生效的buff')
Ultra_Use = self.avatar.Ultra_Use()
logger.info('Ultra_Use')
logger.info(Ultra_Use)
if self.attribute_bonus is None:
raise Exception('attribute_bonus is None')
self.attribute_bonus = await self.weapon.weapon_ability(
Ultra_Use, self.base_attr, self.attribute_bonus
)
logger.info(self.attribute_bonus)
logger.info('检查遗器套装战斗生效的buff')
for set_skill in self.relic_set.SetSkill:
self.attribute_bonus = await set_skill.set_skill_ability(
self.base_attr, self.attribute_bonus
)
if self.attribute_bonus is None:
raise Exception('attribute_bonus is None')
merged_attr = await merge_attribute(
self.base_attr, self.attribute_bonus
)
skill_info = self.avatar.Skill_Info(skill_type)
# 技能区
skill_info = self.avatar.Skill_Info(skill_type)
if skill_type == 'Normal':
skill_multiplier = self.avatar.Normal()
elif skill_type == 'BPSkill':
@ -160,7 +138,10 @@ class RoleInstance:
elif skill_type == 'Ultra':
if self.raw_data.avatar.id_ == 1107:
skill_multiplier = self.avatar.Talent() + self.avatar.Ultra()
elif self.raw_data.avatar.id_ == 1006 and self.raw_data.avatar.rank >= 4:
elif (
self.raw_data.avatar.id_ == 1006
and self.raw_data.avatar.rank >= 4
):
skill_multiplier = self.avatar.Ultra() + 1
else:
skill_multiplier = self.avatar.Ultra()
@ -172,13 +153,59 @@ class RoleInstance:
skill_type = 'Normal'
else:
raise Exception('skill type error')
logger.info(f'技能区总: {skill_multiplier}')
skill_info_list = []
#技能类型为攻击
# 检查武器战斗生效的buff
logger.info('检查武器战斗生效的buff')
Ultra_Use = self.avatar.Ultra_Use()
logger.info('Ultra_Use')
logger.info(Ultra_Use)
if self.attribute_bonus is None:
raise Exception('attribute_bonus is None')
self.attribute_bonus = await self.weapon.weapon_ability(
Ultra_Use, self.base_attr, self.attribute_bonus
)
logger.info(self.attribute_bonus)
# 检查是否有对某一个技能的属性加成
logger.info('检查是否有对某一个技能的属性加成')
for attr in self.attribute_bonus:
# 攻击加成
if attr.__contains__('AttackAddedRatio'):
attr_name = attr.split('AttackAddedRatio')[0]
if attr_name == skill_type:
attack_added_ratio = self.attribute_bonus.get(
'AttackAddedRatio', 0
)
self.attribute_bonus[
'AttackAddedRatio'
] = attack_added_ratio + mp.mpf(self.attribute_bonus[attr])
# 效果命中加成
if attr.__contains__('StatusProbabilityBase'):
attr_name = attr.split('StatusProbabilityBase')[0]
if attr_name == skill_type:
status_probability = self.attribute_bonus.get(
'StatusProbabilityBase', 0
)
self.attribute_bonus[
'StatusProbabilityBase'
] = status_probability + mp.mpf(self.attribute_bonus[attr])
logger.info(self.attribute_bonus)
logger.info('检查遗器套装战斗生效的buff')
for set_skill in self.relic_set.SetSkill:
self.attribute_bonus = await set_skill.set_skill_ability(
self.base_attr, self.attribute_bonus
)
if self.attribute_bonus is None:
raise Exception('attribute_bonus is None')
merged_attr = await merge_attribute(
self.base_attr, self.attribute_bonus
)
# 技能类型为攻击
if skill_info[0] == 'attack':
skill_multiplier = skill_multiplier/skill_info[2]
skill_multiplier = skill_multiplier / skill_info[2]
logger.info(f'技能区单段: {skill_multiplier}')
attack = merged_attr['attack']
logger.info(f'攻击力: {attack}')
@ -195,11 +222,13 @@ class RoleInstance:
enemy_status_resistance = merged_attr[attr]
resistance_area = 1 - (0 - enemy_status_resistance)
if self.raw_data.avatar.id_ == 1213:
if skill_info[2] == 7:
if skill_info[2] == 7:
Normal_Penetration = merged_attr.get(
'Normal_ImaginaryResistancePenetration', 0
)
resistance_area = resistance_area - (0 - Normal_Penetration)
resistance_area = resistance_area - (
0 - Normal_Penetration
)
logger.info(f'抗性区: {resistance_area}')
# 防御区
@ -211,7 +240,9 @@ class RoleInstance:
ignore_defence = 1 - merged_attr[attr]
break
logger.info(f'ignore_defence {ignore_defence}')
enemy_defence = (self.avatar.avatar_level * 10 + 200) * ignore_defence
enemy_defence = (
self.avatar.avatar_level * 10 + 200
) * ignore_defence
defence_multiplier = (self.avatar.avatar_level * 10 + 200) / (
self.avatar.avatar_level * 10 + 200 + enemy_defence
)
@ -236,7 +267,10 @@ class RoleInstance:
for attr in merged_attr:
if attr.__contains__('AddedRatio'):
attr_name = attr.split('AddedRatio')[0]
if attr_name == self.avatar.avatar_element or attr_name == 'AllDamage':
if (
attr_name == self.avatar.avatar_element
or attr_name == 'AllDamage'
):
logger.info(
f'{attr}{self.avatar.avatar_element} '
f'{merged_attr[attr]} 伤害加成'
@ -246,7 +280,7 @@ class RoleInstance:
injury_area += merged_attr[attr]
injury_area += 1
logger.info(f'增伤区: {injury_area}')
# 易伤区
logger.info('检查是否有易伤加成')
logger.info(f'{merged_attr}')
@ -263,7 +297,7 @@ class RoleInstance:
damage_ratio += merged_attr[attr]
damage_ratio = damage_ratio + 1
logger.info(f'易伤: {damage_ratio}')
# 爆伤区
logger.info('检查是否有爆伤加成')
logger.info(f'{merged_attr}')
@ -280,12 +314,12 @@ class RoleInstance:
critical_damage_base += merged_attr[attr]
critical_damage = critical_damage_base + 1
logger.info(f'暴伤: {critical_damage}')
# 暴击区
# 暴击区
critical_chance_base = min(1, merged_attr['CriticalChanceBase'])
logger.info(f'暴击: {critical_chance_base}')
#期望伤害
# 期望伤害
qiwang_damage = (critical_chance_base * critical_damage_base) + 1
logger.info(f'暴击期望: {qiwang_damage}')
damage_cd_z = 0
@ -294,7 +328,7 @@ class RoleInstance:
attack_tz = 0
injury_add = 0
critical_damage_add = 0
for i in range(1, skill_info[2]+1):
for i in range(1, skill_info[2] + 1):
logger.info(f'段数: {i}')
injury_add = 0
critical_damage_add = 0
@ -303,18 +337,17 @@ class RoleInstance:
critical_damage_add = self.avatar.BPSkill()
normal_buff = merged_attr.get('Normal_buff', 0)
if i >= 4:
normal_buff = min(4, int(normal_buff + (i-3)))
normal_buff = min(4, int(normal_buff + (i - 3)))
if normal_buff >= 1:
critical_damage_add = normal_buff * critical_damage_add
atk_buff = merged_attr.get('Atk_buff', 0)
atk_buff = min(10, int((i - 1)*(atk_buff + 1)))
atk_buff = min(10, int((i - 1) * (atk_buff + 1)))
injury_add = atk_buff * injury_add
qiwang_damage = (
(critical_chance_base *
(critical_damage_base + critical_damage_add))
+ 1
)
critical_chance_base
* (critical_damage_base + critical_damage_add)
) + 1
damage_cd = (
attack
* skill_multiplier
@ -337,11 +370,14 @@ class RoleInstance:
* qiwang_damage
)
damage_qw_z += damage_qw
attr_value_tz: float= self.base_attr.get('attack', 0)
attack_tz = attr_value_tz + attr_value_tz * (
1 + self.attribute_bonus['AttackAddedRatio'] + 2.144
) + self.attribute_bonus['AttackDelta']
attr_value_tz: float = self.base_attr.get('attack', 0)
attack_tz = (
attr_value_tz
+ attr_value_tz
* (1 + self.attribute_bonus['AttackAddedRatio'] + 2.144)
+ self.attribute_bonus['AttackDelta']
)
injury_add_tz = 0
if self.avatar.avatar_element == 'Imaginary':
injury_add_tz = 0.12
@ -356,12 +392,9 @@ class RoleInstance:
* (critical_damage + critical_damage_add + 1.594)
* 10
)
damage_tz_z += damage_tz
logger.info(
f'{skill_info[1]}{i}段 暴击伤害: {damage_cd} 期望伤害{damage_qw}'
)
if self.avatar.avatar_element == 'Thunder':
element_area = 0
damage_tz_fj = (

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@ from typing import Dict
async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
# hp attack defence need base_value and add_value
merged_attr = {}
attr_list = ['attack', 'defence', 'hp', 'speed']
for attribute in attribute_bonus:
if (
attribute.__contains__('Attack')
@ -13,14 +14,16 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
):
if attribute.__contains__('Delta'):
attr = attribute.split('Delta')[0].lower()
attr_value = merged_attr.get(attr, 0)
merged_attr[attr] = attr_value + attribute_bonus[attribute]
if attr in attr_list:
attr_value = merged_attr.get(attr, 0)
merged_attr[attr] = attr_value + attribute_bonus[attribute]
elif attribute.__contains__('AddedRatio'):
attr = attribute.split('AddedRatio')[0].lower()
attr_value = merged_attr.get(attr, 0)
merged_attr[attr] = attr_value + base_attr[attr] * (
1 + attribute_bonus[attribute]
)
if attr in attr_list:
attr_value = merged_attr.get(attr, 0)
merged_attr[attr] = attr_value + base_attr[attr] * (
1 + attribute_bonus[attribute]
)
else:
raise Exception(f'attribute error {attribute}')
elif attribute.__contains__('Base'):
@ -49,5 +52,5 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
attr_value = base_attr.get(attribute, 0)
merged_attr[attribute] = attr_value + attribute_bonus[attribute]
else:
raise Exception(f'attribute error {attribute}')
continue
return merged_attr

View File

@ -1,11 +1,11 @@
import json
from collections import Counter
from typing import Dict
from collections import Counter
from loguru import logger
from mpmath import mp
from loguru import logger
from ...utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty, RelicSetSkill
from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty
mp.dps = 14

View File

@ -4,13 +4,13 @@ from typing import List, Union
from PIL import Image, ImageDraw
from ..utils.fonts.first_world import fw_font_28
from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58
from ..utils.image.convert import convert_img
from ..utils.map.name_covert import avatar_id_to_char_star
from ..utils.map.SR_MAP_PATH import avatarId2Name
from ..utils.resource.RESOURCE_PATH import CHAR_ICON_PATH, CHAR_PREVIEW_PATH
from .to_data import api_to_dict
from ..utils.image.convert import convert_img
from ..utils.fonts.first_world import fw_font_28
from ..utils.map.SR_MAP_PATH import avatarId2Name
from ..utils.map.name_covert import avatar_id_to_char_star
from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58
from ..utils.resource.RESOURCE_PATH import CHAR_ICON_PATH, CHAR_PREVIEW_PATH
half_color = (255, 255, 255, 120)
first_color = (29, 29, 29)
@ -39,9 +39,7 @@ async def api_to_card(uid: str) -> Union[str, bytes]:
return await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1)
async def draw_enka_card(
uid: str, char_list: List, showfrom: int = 0
):
async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0):
char_data_list = []
if 1102 in char_list:
char_list.remove(1102)

View File

@ -1,36 +1,36 @@
import json
from pathlib import Path
from typing import List, Optional, Union
from typing import List, Union, Optional
from httpx import ReadTimeout
from mpmath import mp
from httpx import ReadTimeout
from ..utils.error_reply import UID_HINT
from ..sruid_utils.api.mihomo import MihomoData
from ..sruid_utils.api.mihomo.models import Avatar
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
from ..sruid_utils.api.mihomo.requests import get_char_card_info
from ..utils.error_reply import UID_HINT
# from gsuid_core.utils.api.minigg.request import get_weapon_info
from .cal_value import cal_relic_sub_affix, cal_relic_main_affix
from ..utils.excel.read_excel import AvatarPromotion, EquipmentPromotion
from ..utils.map.SR_MAP_PATH import (
EquipmentID2Name,
EquipmentID2Rarity,
SetId2Name,
ItemId2Name,
Property2Name,
RelicId2SetId,
SetId2Name,
avatarId2DamageType,
avatarId2EnName,
EquipmentID2Name,
EquipmentID2Rarity,
rankId2Name,
skillId2Name,
avatarId2Name,
skillId2Effect,
avatarId2EnName,
avatarId2Rarity,
characterSkillTree,
rankId2Name,
skillId2AttackType,
skillId2Effect,
skillId2Name,
avatarId2DamageType,
)
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
# from gsuid_core.utils.api.minigg.request import get_weapon_info
from .cal_value import cal_relic_main_affix, cal_relic_sub_affix
mp.dps = 14
@ -65,9 +65,7 @@ async def api_to_dict(
PlayerDetailInfo = sr_data['detailInfo']
path = PLAYER_PATH / str(sr_uid)
path.mkdir(parents=True, exist_ok=True)
with Path.open(
path / f'{sr_uid!s}.json', 'w', encoding='UTF-8'
) as file:
with Path.open(path / f'{sr_uid!s}.json', 'w', encoding='UTF-8') as file:
json.dump(PlayerDetailInfo, file, ensure_ascii=False)
with Path.open(path / 'rawData.json', 'w', encoding='UTF-8') as file:
json.dump(sr_data, file, ensure_ascii=False)
@ -334,9 +332,7 @@ async def get_data(char: Avatar, sr_data: MihomoData, sr_uid: str):
char_data['equipmentInfo'] = equipment_info
with Path.open(
path / f'{avatarName}.json', 'w', encoding='UTF-8'
) as file:
with Path.open(path / f'{avatarName}.json', 'w', encoding='UTF-8') as file:
json.dump(char_data, file, ensure_ascii=False)
return char_data, avatarName

View File

@ -1,12 +1,12 @@
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV
from ..utils.convert import get_uid
from ..utils.error_reply import UID_HINT
from ..utils.sr_prefix import PREFIX
from .draw_gachalogs import draw_gachalogs_img
from ..utils.error_reply import UID_HINT
from .get_gachalogs import save_gachalogs
from .draw_gachalogs import draw_gachalogs_img
sv_gacha_log = SV('sr抽卡记录')
sv_get_gachalog_by_link = SV('sr导入抽卡链接', area='DIRECT')

View File

@ -1,18 +1,24 @@
import json
import asyncio
import datetime
import json
from pathlib import Path
from typing import List, Tuple, Union
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.image.image_tools import (
draw_pic_with_ring,
get_color_bg,
get_qq_avatar,
draw_pic_with_ring,
)
from ..utils.image.convert import convert_img
from ..utils.map.name_covert import name_to_avatar_id, name_to_weapon_id
from ..utils.resource.RESOURCE_PATH import (
PLAYER_PATH,
WEAPON_PATH,
CHAR_ICON_PATH,
)
from ..utils.fonts.starrail_fonts import (
sr_font_20,
sr_font_24,
@ -20,13 +26,6 @@ from ..utils.fonts.starrail_fonts import (
sr_font_38,
sr_font_40,
)
from ..utils.image.convert import convert_img
from ..utils.map.name_covert import name_to_avatar_id, name_to_weapon_id
from ..utils.resource.RESOURCE_PATH import (
CHAR_ICON_PATH,
PLAYER_PATH,
WEAPON_PATH,
)
TEXT_PATH = Path(__file__).parent / 'texture2d'
EMO_PATH = Path(__file__).parent / 'texture2d' / 'emo'

View File

@ -1,9 +1,9 @@
import asyncio
import json
from datetime import datetime
import asyncio
from pathlib import Path
from typing import Dict, Optional
from urllib import parse
from datetime import datetime
from typing import Dict, Optional
from ..utils.mys_api import mys_api
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH

View File

@ -1,17 +1,16 @@
import json
from datetime import datetime
from pathlib import Path
from typing import Union
from datetime import datetime
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from ..utils.error_reply import get_error
from ..utils.fonts.starrail_fonts import sr_font_20, sr_font_28, sr_font_34
from ..utils.image.convert import convert_img
from ..utils.mys_api import mys_api
from ..utils.error_reply import get_error
from ..utils.image.convert import convert_img
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
from ..utils.fonts.starrail_fonts import sr_font_20, sr_font_28, sr_font_34
TEXT_PATH = Path(__file__).parent / 'texture2d'
@ -242,7 +241,9 @@ async def draw_note_img(sr_uid: str) -> Union[bytes, str]:
if last_monthly_data:
pie_image = Image.new("RGBA", (2100, 2100), color=(255, 255, 255, 0))
pie_image_draw = ImageDraw.Draw(pie_image)
for _index, i in enumerate(last_monthly_data['month_data']['group_by']):
for _index, i in enumerate(
last_monthly_data['month_data']['group_by']
):
pie_image_draw.pieslice(
xy,
temp,

View File

@ -1,7 +1,7 @@
from datetime import datetime
from ..utils.error_reply import get_error
from ..utils.mys_api import mys_api
from ..utils.error_reply import get_error
month_im = """==============
SR_UID:{}

View File

@ -1,8 +1,8 @@
import re
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid

View File

@ -1,30 +1,29 @@
import math
from pathlib import Path
from typing import List, Optional, Union
from typing import List, Union, Optional
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import get_error
from gsuid_core.utils.image.image_tools import (
draw_pic_with_ring,
get_qq_avatar,
draw_pic_with_ring,
)
from .utils import get_icon
from ..utils.convert import GsCookie
from ..utils.image.convert import convert_img
from ..sruid_utils.api.mys.models import (
RogueAvatar,
RogueBuffitems,
RogueMiracles,
RogueBuffitems,
)
from ..utils.convert import GsCookie
from ..utils.fonts.starrail_fonts import (
sr_font_22,
sr_font_28,
sr_font_34,
sr_font_42,
)
from ..utils.image.convert import convert_img
from .utils import get_icon
TEXT_PATH = Path(__file__).parent / 'texture2D'
white_color = (255, 255, 255)

View File

@ -2,9 +2,8 @@ from io import BytesIO
from pathlib import Path
from typing import TypeVar
from aiohttp import ClientSession
from PIL import Image
from aiohttp import ClientSession
from gsuid_core.data_store import get_res_path
T = TypeVar("T")

View File

@ -1,16 +1,15 @@
import asyncio
from pathlib import Path
from typing import Dict, List, Optional, Union
from typing import Dict, List, Union, Optional
from PIL import Image, ImageDraw
from gsuid_core.utils.error_reply import get_error
from ..sruid_utils.api.mys.models import AvatarListItem, RoleBasicInfo, Stats
from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_36
from ..utils.image.convert import convert_img
from ..utils.mys_api import mys_api
from .utils import get_icon, wrap_list
from ..utils.image.convert import convert_img
from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_36
from ..sruid_utils.api.mys.models import Stats, RoleBasicInfo, AvatarListItem
TEXT_PATH = Path(__file__).parent / 'texture2D'
@ -226,7 +225,7 @@ async def draw_role_card(sr_uid: str) -> Union[bytes, str]:
# 绘制总图
img1, img2 = await asyncio.gather(
*[
_draw_card_1(sr_uid, role_basic_info, stats), # type: ignore
_draw_card_1(sr_uid, role_basic_info, stats), # type: ignore
_draw_card_2(avatars, equips),
]
)

View File

@ -1,10 +1,9 @@
from io import BytesIO
from pathlib import Path
from typing import Generator, List, TypeVar
from typing import List, TypeVar, Generator
from aiohttp import ClientSession
from PIL import Image
from aiohttp import ClientSession
from gsuid_core.data_store import get_res_path
T = TypeVar("T")

View File

@ -1,14 +1,14 @@
import asyncio
import random
import asyncio
from copy import deepcopy
from gsuid_core.gss import gss
from gsuid_core.logger import logger
from gsuid_core.utils.plugins_config.gs_config import core_plugins_config
from ..starrailuid_config.sr_config import srconfig
from ..utils.api import get_sqla
from ..utils.mys_api import mys_api
from ..starrailuid_config.sr_config import srconfig
private_msg_list = {}
group_msg_list = {}
@ -49,7 +49,9 @@ async def sign_in(sr_uid: str) -> str:
if core_plugins_config.get_config('CaptchaPass').data:
gt = sign_data['gt']
ch = sign_data['challenge']
vl, ch = await mys_api._pass(gt, ch, Header) # noqa: SLF001
vl, ch = await mys_api._pass(
gt, ch, Header
) # noqa: SLF001
if vl:
delay = 1
Header['x-rpc-challenge'] = ch

View File

@ -5,12 +5,14 @@ from typing import Optional
import aiohttp
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from ..utils.api import get_sqla
from ..utils.mys_api import mys_api
from ..utils.image.convert import convert_img
from ..sruid_utils.api.mys.models import Expedition
from ..starrailuid_config.sr_config import srconfig
from ..utils.api import get_sqla
from ..utils.image.image_tools import get_simple_bg
from ..utils.fonts.starrail_fonts import (
sr_font_22,
sr_font_24,
@ -18,9 +20,6 @@ from ..utils.fonts.starrail_fonts import (
sr_font_36,
sr_font_50,
)
from ..utils.image.convert import convert_img
from ..utils.image.image_tools import get_simple_bg
from ..utils.mys_api import mys_api
use_widget = srconfig.get_config('WidgetResin').data

View File

@ -3,10 +3,10 @@ from typing import Dict
from gsuid_core.gss import gss
from gsuid_core.logger import logger
from ..sruid_utils.api.mys.models import DailyNoteData
from ..starrailuid_config.sr_config import srconfig
from ..utils.api import get_sqla
from ..utils.mys_api import mys_api
from ..starrailuid_config.sr_config import srconfig
from ..sruid_utils.api.mys.models import DailyNoteData
MR_NOTICE = '\n可发送[srmr]或者[sr每日]来查看更多信息!\n'

View File

@ -2,8 +2,8 @@ from typing import List
from gsuid_core.logger import logger
from ..utils.error_reply import get_error
from ..utils.mys_api import mys_api
from ..utils.error_reply import get_error
daily_im = """*数据刷新可能存在一定延迟,请以当前游戏实际数据为准
==============

View File

@ -1,12 +1,12 @@
from typing import List
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV
from ..utils.api import get_sqla
from ..utils.message import send_diff_msg
from ..utils.sr_prefix import PREFIX
from ..utils.message import send_diff_msg
from .draw_user_card import get_user_card
sv_user_config = SV('sr用户管理', pm=2)

View File

@ -1,10 +1,10 @@
from http.cookies import SimpleCookie
from pathlib import Path
from typing import Dict, List
from http.cookies import SimpleCookie
from ..utils.api import get_sqla
from ..utils.error_reply import UID_HINT
from ..utils.mys_api import mys_api
from ..utils.error_reply import UID_HINT
pic_path = Path(__file__).parent / 'pic'
id_list = [
@ -79,7 +79,6 @@ async def refresh_ck_by_uid_list(bot_id: str, uid_dict: Dict) -> str:
return f'{s_im}\n{f_im}' if f_im else s_im
async def deal_ck(bot_id: str, mes: str, user_id: str, mode: str = 'PIC'):
im = await _deal_ck(bot_id, mes, user_id)
if mode == 'PIC':
@ -236,10 +235,8 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
'Cookies和Stoken属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!'
)
im_list.append(
'如果需要【sr开启自动签到】和【sr开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。'
'\n例如:绑定uid123456789。'
'如果需要【sr开启自动签到】和【sr开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。'
'\n例如:绑定uid123456789。'
)
im_list.append('你可以使用命令【sr绑定信息】检查你的账号绑定情况!')
return '\n'.join(im_list)

View File

@ -1,5 +1,5 @@
# from pathlib import Path
from typing import Optional, Tuple
from typing import Tuple, Optional
from PIL import Image

View File

@ -1,16 +1,15 @@
import asyncio
import base64
import io
import json
import base64
import asyncio
from http.cookies import SimpleCookie
from typing import Any, List, Literal, Tuple, Union
from typing import Any, List, Tuple, Union, Literal
import qrcode
from qrcode.constants import ERROR_CORRECT_L
from gsuid_core.bot import Bot
from gsuid_core.logger import logger
from gsuid_core.models import Event
from gsuid_core.logger import logger
from qrcode.constants import ERROR_CORRECT_L
from gsuid_core.segment import MessageSegment
from ..utils.api import get_sqla
@ -25,7 +24,7 @@ disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。
def get_qrcode_base64(url):
qr = qrcode.QRCode( # type: ignore
qr = qrcode.QRCode( # type: ignore
version=1,
error_correction=ERROR_CORRECT_L,
box_size=10,

View File

@ -1,14 +1,14 @@
import re
from typing import Optional, Tuple, Union, overload
from typing import Tuple, Union, Optional, overload
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.utils.api.mys.models import IndexData
from ..sruid_utils.api.mys.models import AbyssData, RogueData
from .api import get_sqla
from .error_reply import VERIFY_HINT
from .mys_api import mys_api
from .error_reply import VERIFY_HINT
from ..sruid_utils.api.mys.models import AbyssData, RogueData
@overload

View File

@ -1,6 +1,6 @@
from base64 import b64encode
from io import BytesIO
from pathlib import Path
from base64 import b64encode
from typing import Union, overload
import aiofiles
@ -96,7 +96,7 @@ def get_str_size(
line += i
if hasattr(font, 'getsize'):
size, _ = font.getsize(line) # type: ignore
size, _ = font.getsize(line) # type: ignore
else:
size, _, _, _ = font.getbbox(line)
if size >= limit:

View File

@ -156,7 +156,9 @@ for skill in AvatarSkillConfig:
for avatar_property in AvatarPropertyConfig:
PropertyType = AvatarPropertyConfig[avatar_property]['PropertyType']
PropertyName = AvatarPropertyConfig[avatar_property]['PropertyName']
PropertyNameHash = AvatarPropertyConfig[avatar_property]['PropertyNameFilter']['Hash']
PropertyNameHash = AvatarPropertyConfig[avatar_property][
'PropertyNameFilter'
]['Hash']
for item in TextMapCN:
if str(item) == str(PropertyNameHash):
Property_Name = TextMapCN[item]
@ -180,7 +182,11 @@ for set_group in RelicSetConfig:
for character in characters:
char_id = characters[character]['id']
characterSkillTree[str(char_id)] = {} if str(char_id) not in characterSkillTree else characterSkillTree[str(char_id)]
characterSkillTree[str(char_id)] = (
{}
if str(char_id) not in characterSkillTree
else characterSkillTree[str(char_id)]
)
skill_tree_list = characters[character]['skill_trees']
for skill in skill_tree_list:
skill_tree = character_skill_trees[skill]
@ -191,8 +197,14 @@ for set_ in RelicSetSkillConfig:
for item in RelicSetSkillConfig[set_]:
set_id = RelicSetSkillConfig[set_][item]['SetID']
property_list = RelicSetSkillConfig[set_][item]['PropertyList']
RelicSetSkill[set_] = {} if set_ not in RelicSetSkill else RelicSetSkill[set_]
RelicSetSkill[set_][item] = {} if item not in RelicSetSkill[set_] else RelicSetSkill[set_][item]
RelicSetSkill[set_] = (
{} if set_ not in RelicSetSkill else RelicSetSkill[set_]
)
RelicSetSkill[set_][item] = (
{}
if item not in RelicSetSkill[set_]
else RelicSetSkill[set_][item]
)
for property_ in property_list:
property_id = property_['NAOGDGBJNOJ']
property_value = property_['MBOHKHKHFPD']['Value']
@ -234,7 +246,9 @@ Property2Name = json.dumps(Property2Name, ensure_ascii=False)
Relic2SetId = json.dumps(Relic2SetId, ensure_ascii=False)
SetId2Name = json.dumps(SetId2Name, ensure_ascii=False)
characterSkillTree = json.dumps(characterSkillTree, ensure_ascii=False)
EquipmentID2AbilityProperty = json.dumps(EquipmentID2AbilityProperty, ensure_ascii=False)
EquipmentID2AbilityProperty = json.dumps(
EquipmentID2AbilityProperty, ensure_ascii=False
)
RelicSetSkill = json.dumps(RelicSetSkill, ensure_ascii=False)
skillId2AttackType = json.dumps(skillId2AttackType, ensure_ascii=False)
EquipmentID2Rarity = json.dumps(EquipmentID2Rarity, ensure_ascii=False)

View File

@ -2,13 +2,12 @@ import asyncio
from pathlib import Path
from typing import Dict, List, Tuple, Union
from aiohttp.client import ClientSession
from msgspec import json as msgjson
from gsuid_core.logger import logger
from aiohttp.client import ClientSession
from .download_url import download_file
from .RESOURCE_PATH import GUIDE_PATH, RESOURCE_PATH, WIKI_PATH
from .RESOURCE_PATH import WIKI_PATH, GUIDE_PATH, RESOURCE_PATH
with Path.open(
Path(__file__).parent / 'resource_map.json', encoding='UTF-8'

View File

@ -1,12 +1,11 @@
from typing import Optional, Tuple
from typing import Tuple, Optional
import aiofiles
from gsuid_core.logger import logger
from aiohttp.client import ClientSession
from aiohttp.client_exceptions import ClientConnectorError
from gsuid_core.logger import logger
from .RESOURCE_PATH import GUIDE_PATH, RESOURCE_PATH, WIKI_PATH
from .RESOURCE_PATH import WIKI_PATH, GUIDE_PATH, RESOURCE_PATH
PATHDICT = {
'resource': RESOURCE_PATH,