From 2c7c61188ab009719410620d3e672a523dacbdef Mon Sep 17 00:00:00 2001 From: qwerdvd <105906879+qwerdvd@users.noreply.github.com> Date: Wed, 27 Dec 2023 13:43:17 +0800 Subject: [PATCH] fix up! --- starrail_damage_cal/cal_damage.py | 24 +- starrail_damage_cal/exception.py | 28 +- starrail_damage_cal/mihomo/models.py | 2 +- starrail_damage_cal/mihomo/requests.py | 12 +- starrail_damage_cal/to_data.py | 5 +- test/test.json | 681 ++++++++++++------------- 6 files changed, 380 insertions(+), 372 deletions(-) diff --git a/starrail_damage_cal/cal_damage.py b/starrail_damage_cal/cal_damage.py index 1c1e2f3..6eb8c8b 100644 --- a/starrail_damage_cal/cal_damage.py +++ b/starrail_damage_cal/cal_damage.py @@ -49,10 +49,12 @@ class DamageCal: char_id_list, char_data_dict = await api_to_dict(uid) if isinstance(char_id_list, str): - raise MihomoRequestError + msg = "char_id_list is str" + raise MihomoRequestError(msg) if char_data_dict is None: - raise MihomoRequestError + msg = "char_data_dict is None" + raise MihomoRequestError(msg) if char_id not in char_id_list: raise NotInCharacterShowcaseError @@ -72,10 +74,12 @@ class DamageCal: char_id_list, char_data_dict = await api_to_dict(mihomo_raw=mihomo_data) if isinstance(char_id_list, str): - raise MihomoRequestError + msg = "char_id_list is str" + raise MihomoRequestError(msg) if char_data_dict is None: - raise MihomoRequestError + msg = "char_data_dict is None" + raise MihomoRequestError(msg) if char_id not in char_id_list: raise NotInCharacterShowcaseError @@ -89,10 +93,12 @@ class DamageCal: char_id_list, char_data_dict = await api_to_dict(mihomo_raw=mihomo_data) if isinstance(char_id_list, str): - raise MihomoRequestError + msg = "char_id_list is str" + raise MihomoRequestError(msg) if char_data_dict is None: - raise MihomoRequestError + msg = "char_data_dict is None" + raise MihomoRequestError(msg) damage_dict = {} @@ -107,10 +113,12 @@ class DamageCal: char_id_list, char_data_dict = await api_to_dict(uid=uid) if isinstance(char_id_list, str): - raise MihomoRequestError + msg = "char_id_list is str" + raise MihomoRequestError(msg) if char_data_dict is None: - raise MihomoRequestError + msg = "char_data_dict is None" + raise MihomoRequestError(msg) damage_dict = {} diff --git a/starrail_damage_cal/exception.py b/starrail_damage_cal/exception.py index 6a38245..33f4da2 100644 --- a/starrail_damage_cal/exception.py +++ b/starrail_damage_cal/exception.py @@ -1,9 +1,12 @@ +from typing import Union + + class UidNotfoundError(Exception): def __init__(self, uid: str): self.uid = uid def __str__(self): - return repr(self.uid) + return self.uid class CharNameError(Exception): @@ -11,11 +14,28 @@ class CharNameError(Exception): self.char_name = char_name def __str__(self): - return repr(self.char_name) + return self.char_name + + +class MihomoModelError(Exception): + def __init__(self, exce: Union[Exception, str]): + self.exce = exce.args[0] if isinstance(exce, Exception) else exce + + def __str__(self): + return self.exce + + +class MihomoQueueTimeoutError(Exception): + def __str__(self): + return "Mihomo queue timeout, please try again later." class MihomoRequestError(Exception): - pass + def __init__(self, exce: Union[Exception, str]): + self.exce = exce.args[0] if isinstance(exce, Exception) else exce + + def __str__(self): + return self.exce class NotInCharacterShowcaseError(Exception): @@ -27,4 +47,4 @@ class CharacterShowcaseNotOpenError(Exception): self.uid = uid def __str__(self): - return repr(self.uid) + return self.uid diff --git a/starrail_damage_cal/mihomo/models.py b/starrail_damage_cal/mihomo/models.py index cc2fb02..748a0ef 100644 --- a/starrail_damage_cal/mihomo/models.py +++ b/starrail_damage_cal/mihomo/models.py @@ -47,11 +47,11 @@ class Challenge(Struct): class PlayerSpaceInfo(Struct): - challengeInfo: Challenge maxRogueChallengeScore: int equipmentCount: int avatarCount: int achievementCount: int + challengeInfo: Union[int, None] = None class PlayerDetailInfo(Struct): diff --git a/starrail_damage_cal/mihomo/requests.py b/starrail_damage_cal/mihomo/requests.py index 33c4e8f..c65bc2a 100644 --- a/starrail_damage_cal/mihomo/requests.py +++ b/starrail_damage_cal/mihomo/requests.py @@ -1,10 +1,13 @@ from __future__ import annotations +import json from pathlib import Path +import msgspec from httpx import AsyncClient from msgspec import convert +from starrail_damage_cal.exception import MihomoModelError, MihomoQueueTimeoutError from starrail_damage_cal.mihomo.models import MihomoData _HEADER = {"User-Agent": "StarRailDamageCal/"} @@ -25,4 +28,11 @@ async def get_char_card_info( path.mkdir(parents=True, exist_ok=True) with Path.open(path / f"{uid!s}.json", "w") as file: file.write(req.text) - return convert(req.json(), type=MihomoData) + try: + return convert(req.json(), type=MihomoData) + except msgspec.ValidationError as e: + if req.text == '{"detail":"Queue timeout"}': + raise MihomoQueueTimeoutError from e + raise MihomoModelError(e) from e + except json.decoder.JSONDecodeError as e: + raise MihomoModelError(e) from e diff --git a/starrail_damage_cal/to_data.py b/starrail_damage_cal/to_data.py index 594bb3e..889b988 100644 --- a/starrail_damage_cal/to_data.py +++ b/starrail_damage_cal/to_data.py @@ -43,10 +43,7 @@ async def api_to_dict( if not mihomo_raw: if not uid: raise KeyError - try: - sr_data = await get_char_card_info(uid) - except Exception as e: # noqa: BLE001 - raise MihomoRequestError from e + sr_data = await get_char_card_info(uid) else: sr_data = mihomo_raw diff --git a/test/test.json b/test/test.json index 84b7d64..7ed7495 100644 --- a/test/test.json +++ b/test/test.json @@ -1,399 +1,142 @@ { "detailInfo": { - "level": 69, "worldLevel": 6, - "nickname": "qwerdvd", - "headIcon": 201102, + "level": 70, + "friendCount": 53, + "nickname": "\u5c0f\u590f", "avatarDetailList": [ { + "level": 80, + "skillTreeList": [ + { "pointId": 1212001, "level": 6 }, + { "pointId": 1212002, "level": 10 }, + { "pointId": 1212003, "level": 10 }, + { "pointId": 1212004, "level": 10 }, + { "pointId": 1212007, "level": 1 }, + { "pointId": 1212101, "level": 1 }, + { "pointId": 1212102, "level": 1 }, + { "pointId": 1212103, "level": 1 }, + { "pointId": 1212201, "level": 1 }, + { "pointId": 1212202, "level": 1 }, + { "pointId": 1212203, "level": 1 }, + { "pointId": 1212204, "level": 1 }, + { "pointId": 1212205, "level": 1 }, + { "pointId": 1212206, "level": 1 }, + { "pointId": 1212207, "level": 1 }, + { "pointId": 1212208, "level": 1 }, + { "pointId": 1212209, "level": 1 }, + { "pointId": 1212210, "level": 1 } + ], "relicList": [ { - "mainAffixId": 1, - "tid": 61021, + "tid": 61041, "type": 1, "subAffixList": [ - { "affixId": 3, "cnt": 1 }, - { "affixId": 5, "cnt": 3, "step": 5 }, - { "affixId": 6, "cnt": 1, "step": 1 }, - { "affixId": 8, "cnt": 3, "step": 4 } + { "affixId": 5, "cnt": 3, "step": 4 }, + { "affixId": 8, "cnt": 3, "step": 3 }, + { "affixId": 9, "cnt": 1, "step": 2 }, + { "affixId": 11, "cnt": 1, "step": 1 } ], + "mainAffixId": 1, "level": 15 }, { - "mainAffixId": 1, - "tid": 61022, + "tid": 61042, "type": 2, "subAffixList": [ - { "affixId": 3, "cnt": 2, "step": 4 }, - { "affixId": 5, "cnt": 2, "step": 4 }, - { "affixId": 8, "cnt": 3, "step": 3 }, - { "affixId": 10, "cnt": 1, "step": 1 } + { "affixId": 6, "cnt": 1, "step": 1 }, + { "affixId": 8, "cnt": 2, "step": 1 }, + { "affixId": 9, "cnt": 2, "step": 1 }, + { "affixId": 11, "cnt": 3, "step": 3 } ], + "mainAffixId": 1, "level": 15 }, { - "mainAffixId": 5, - "tid": 61023, + "tid": 61043, "type": 3, "subAffixList": [ - { "affixId": 1, "cnt": 1, "step": 1 }, - { "affixId": 5, "cnt": 3, "step": 4 }, - { "affixId": 6, "cnt": 2, "step": 1 }, - { "affixId": 8, "cnt": 2, "step": 2 } + { "affixId": 1, "cnt": 1 }, + { "affixId": 3, "cnt": 1 }, + { "affixId": 5, "cnt": 5, "step": 6 }, + { "affixId": 11, "cnt": 1, "step": 2 } ], + "mainAffixId": 5, "level": 15 }, { - "mainAffixId": 2, - "tid": 61024, + "tid": 61044, "type": 4, "subAffixList": [ - { "affixId": 1, "cnt": 1, "step": 2 }, - { "affixId": 4, "cnt": 3, "step": 3 }, - { "affixId": 8, "cnt": 3, "step": 4 }, - { "affixId": 12, "cnt": 1, "step": 2 } + { "affixId": 3, "cnt": 2, "step": 2 }, + { "affixId": 4, "cnt": 2, "step": 3 }, + { "affixId": 5, "cnt": 2, "step": 2 }, + { "affixId": 8, "cnt": 2 } ], + "mainAffixId": 4, "level": 15 }, { - "mainAffixId": 10, "tid": 63095, "type": 5, "subAffixList": [ - { "affixId": 3, "cnt": 2, "step": 2 }, - { "affixId": 9, "cnt": 2, "step": 3 }, - { "affixId": 10, "cnt": 2, "step": 1 }, - { "affixId": 12, "cnt": 2, "step": 2 } + { "affixId": 4, "cnt": 2, "step": 4 }, + { "affixId": 5, "cnt": 3, "step": 5 }, + { "affixId": 6, "cnt": 1, "step": 2 }, + { "affixId": 9, "cnt": 3, "step": 2 } ], + "mainAffixId": 6, "level": 15 }, { - "mainAffixId": 4, "tid": 63096, "type": 6, "subAffixList": [ - { "affixId": 2, "cnt": 2, "step": 1 }, - { "affixId": 8, "cnt": 2, "step": 1 }, - { "affixId": 9, "cnt": 1, "step": 1 }, - { "affixId": 12, "cnt": 3, "step": 3 } - ], - "level": 15 - } - ], - "equipment": { "tid": 23015, "promotion": 6, "rank": 1, "level": 80 }, - "level": 80, - "avatarId": 1213, - "promotion": 6, - "skillTreeList": [ - { "pointId": 1213001, "level": 6 }, - { "pointId": 1213002, "level": 10 }, - { "pointId": 1213003, "level": 10 }, - { "pointId": 1213004, "level": 10 }, - { "pointId": 1213007, "level": 1 }, - { "pointId": 1213101, "level": 1 }, - { "pointId": 1213102, "level": 1 }, - { "pointId": 1213103, "level": 1 }, - { "pointId": 1213201, "level": 1 }, - { "pointId": 1213202, "level": 1 }, - { "pointId": 1213203, "level": 1 }, - { "pointId": 1213204, "level": 1 }, - { "pointId": 1213205, "level": 1 }, - { "pointId": 1213206, "level": 1 }, - { "pointId": 1213207, "level": 1 }, - { "pointId": 1213208, "level": 1 }, - { "pointId": 1213209, "level": 1 }, - { "pointId": 1213210, "level": 1 } - ] - }, - { - "relicList": [ - { - "mainAffixId": 1, - "tid": 61081, - "type": 1, - "subAffixList": [ - { "affixId": 8, "cnt": 1 }, + { "affixId": 1, "cnt": 2, "step": 1 }, + { "affixId": 8, "cnt": 2, "step": 3 }, { "affixId": 9, "cnt": 2, "step": 3 }, - { "affixId": 11, "cnt": 2, "step": 3 }, - { "affixId": 12, "cnt": 3, "step": 3 } + { "affixId": 11, "cnt": 2, "step": 3 } ], - "level": 15 - }, - { - "mainAffixId": 1, - "tid": 61082, - "type": 2, - "subAffixList": [ - { "affixId": 1, "cnt": 3, "step": 4 }, - { "affixId": 3, "cnt": 3, "step": 5 }, - { "affixId": 5, "cnt": 1, "step": 2 }, - { "affixId": 12, "cnt": 1, "step": 2 } - ], - "level": 15 - }, - { "mainAffixId": 4, - "tid": 61083, - "type": 3, - "subAffixList": [ - { "affixId": 3, "cnt": 2, "step": 1 }, - { "affixId": 4, "cnt": 3, "step": 2 }, - { "affixId": 5, "cnt": 1, "step": 2 }, - { "affixId": 10, "cnt": 2, "step": 2 } - ], - "level": 15 - }, - { - "mainAffixId": 2, - "tid": 61084, - "type": 4, - "subAffixList": [ - { "affixId": 3, "cnt": 4, "step": 6 }, - { "affixId": 4, "cnt": 1, "step": 2 }, - { "affixId": 7, "cnt": 1, "step": 1 }, - { "affixId": 10, "cnt": 2, "step": 1 } - ], - "level": 15 - }, - { - "mainAffixId": 3, - "tid": 63035, - "type": 5, - "exp": 830, - "subAffixList": [ - { "affixId": 5, "cnt": 2, "step": 3 }, - { "affixId": 8, "cnt": 1 }, - { "affixId": 9, "cnt": 2, "step": 1 }, - { "affixId": 10, "cnt": 1, "step": 2 } - ], - "level": 11 - }, - { - "mainAffixId": 2, - "tid": 63036, - "type": 6, - "subAffixList": [ - { "affixId": 2, "cnt": 3, "step": 5 }, - { "affixId": 5, "cnt": 1, "step": 2 }, - { "affixId": 8, "cnt": 2, "step": 2 }, - { "affixId": 12, "cnt": 2, "step": 4 } - ], "level": 15 } ], - "equipment": { "tid": 22000, "promotion": 6, "rank": 5, "level": 80 }, - "level": 80, - "avatarId": 1006, - "rank": 1, + "avatarId": 1212, "promotion": 6, - "pos": 1, - "skillTreeList": [ - { "pointId": 1006001, "level": 6 }, - { "pointId": 1006002, "level": 10 }, - { "pointId": 1006003, "level": 10 }, - { "pointId": 1006004, "level": 10 }, - { "pointId": 1006007, "level": 1 }, - { "pointId": 1006101, "level": 1 }, - { "pointId": 1006102, "level": 1 }, - { "pointId": 1006103, "level": 1 }, - { "pointId": 1006201, "level": 1 }, - { "pointId": 1006202, "level": 1 }, - { "pointId": 1006203, "level": 1 }, - { "pointId": 1006204, "level": 1 }, - { "pointId": 1006205, "level": 1 }, - { "pointId": 1006206, "level": 1 }, - { "pointId": 1006207, "level": 1 }, - { "pointId": 1006208, "level": 1 }, - { "pointId": 1006209, "level": 1 }, - { "pointId": 1006210, "level": 1 } - ] - }, - { - "relicList": [ - { - "mainAffixId": 1, - "tid": 61081, - "type": 1, - "subAffixList": [ - { "affixId": 4, "cnt": 2, "step": 3 }, - { "affixId": 8, "cnt": 2, "step": 2 }, - { "affixId": 9, "cnt": 3, "step": 4 }, - { "affixId": 12, "cnt": 1 } - ], - "level": 15 - }, - { - "mainAffixId": 1, - "tid": 61082, - "type": 2, - "subAffixList": [ - { "affixId": 6, "cnt": 1, "step": 2 }, - { "affixId": 8, "cnt": 2, "step": 2 }, - { "affixId": 9, "cnt": 2, "step": 2 }, - { "affixId": 10, "cnt": 3, "step": 1 } - ], - "level": 15 - }, - { - "mainAffixId": 5, - "tid": 61083, - "type": 3, - "subAffixList": [ - { "affixId": 3, "cnt": 2, "step": 4 }, - { "affixId": 5, "cnt": 3, "step": 1 }, - { "affixId": 6, "cnt": 1 }, - { "affixId": 8, "cnt": 2, "step": 3 } - ], - "level": 15 - }, - { - "mainAffixId": 2, - "tid": 61084, - "type": 4, - "subAffixList": [ - { "affixId": 1, "cnt": 2, "step": 3 }, - { "affixId": 7, "cnt": 3, "step": 3 }, - { "affixId": 11, "cnt": 2, "step": 3 }, - { "affixId": 12, "cnt": 1, "step": 2 } - ], - "level": 15 - }, - { - "mainAffixId": 9, - "tid": 63065, - "type": 5, - "subAffixList": [ - { "affixId": 2, "cnt": 2, "step": 2 }, - { "affixId": 3, "cnt": 1 }, - { "affixId": 8, "cnt": 3, "step": 6 }, - { "affixId": 12, "cnt": 2, "step": 1 } - ], - "level": 15 - }, - { - "mainAffixId": 4, - "tid": 63066, - "type": 6, - "subAffixList": [ - { "affixId": 2, "cnt": 1, "step": 2 }, - { "affixId": 3, "cnt": 2, "step": 4 }, - { "affixId": 8, "cnt": 5, "step": 6 }, - { "affixId": 11, "cnt": 1, "step": 2 } - ], - "level": 15 - } - ], - "equipment": { "tid": 24001, "promotion": 6, "rank": 5, "level": 80 }, - "level": 80, - "avatarId": 1102, - "promotion": 6, - "pos": 2, - "skillTreeList": [ - { "pointId": 1102001, "level": 6 }, - { "pointId": 1102002, "level": 10 }, - { "pointId": 1102003, "level": 10 }, - { "pointId": 1102004, "level": 10 }, - { "pointId": 1102007, "level": 1 }, - { "pointId": 1102101, "level": 1 }, - { "pointId": 1102102, "level": 1 }, - { "pointId": 1102103, "level": 1 }, - { "pointId": 1102201, "level": 1 }, - { "pointId": 1102202, "level": 1 }, - { "pointId": 1102203, "level": 1 }, - { "pointId": 1102204, "level": 1 }, - { "pointId": 1102205, "level": 1 }, - { "pointId": 1102206, "level": 1 }, - { "pointId": 1102207, "level": 1 }, - { "pointId": 1102208, "level": 1 }, - { "pointId": 1102209, "level": 1 }, - { "pointId": 1102210, "level": 1 } - ] + "equipment": { "tid": 24000, "level": 80, "promotion": 6, "rank": 5 } } ], + "recordInfo": { + "avatarCount": 29, + "achievementCount": 378, + "maxRogueChallengeScore": 8, + "equipmentCount": 151 + }, + "uid": 102840119, + "isDisplayAvatar": true, "assistAvatarDetail": { - "relicList": [ - { - "mainAffixId": 1, - "tid": 61021, - "type": 1, - "subAffixList": [ - { "affixId": 3, "cnt": 1 }, - { "affixId": 5, "cnt": 3, "step": 5 }, - { "affixId": 6, "cnt": 1, "step": 1 }, - { "affixId": 8, "cnt": 3, "step": 4 } - ], - "level": 15 - }, - { - "mainAffixId": 1, - "tid": 61022, - "type": 2, - "subAffixList": [ - { "affixId": 3, "cnt": 2, "step": 4 }, - { "affixId": 5, "cnt": 2, "step": 4 }, - { "affixId": 8, "cnt": 3, "step": 3 }, - { "affixId": 10, "cnt": 1, "step": 1 } - ], - "level": 15 - }, - { - "mainAffixId": 5, - "tid": 61023, - "type": 3, - "subAffixList": [ - { "affixId": 1, "cnt": 1, "step": 1 }, - { "affixId": 5, "cnt": 3, "step": 4 }, - { "affixId": 6, "cnt": 2, "step": 1 }, - { "affixId": 8, "cnt": 2, "step": 2 } - ], - "level": 15 - }, - { - "mainAffixId": 2, - "tid": 61024, - "type": 4, - "subAffixList": [ - { "affixId": 1, "cnt": 1, "step": 2 }, - { "affixId": 4, "cnt": 3, "step": 3 }, - { "affixId": 8, "cnt": 3, "step": 4 }, - { "affixId": 12, "cnt": 1, "step": 2 } - ], - "level": 15 - }, - { - "mainAffixId": 10, - "tid": 63095, - "type": 5, - "subAffixList": [ - { "affixId": 3, "cnt": 2, "step": 2 }, - { "affixId": 9, "cnt": 2, "step": 3 }, - { "affixId": 10, "cnt": 2, "step": 1 }, - { "affixId": 12, "cnt": 2, "step": 2 } - ], - "level": 15 - }, - { - "mainAffixId": 4, - "tid": 63096, - "type": 6, - "subAffixList": [ - { "affixId": 2, "cnt": 2, "step": 1 }, - { "affixId": 8, "cnt": 2, "step": 1 }, - { "affixId": 9, "cnt": 1, "step": 1 }, - { "affixId": 12, "cnt": 3, "step": 3 } - ], - "level": 15 - } - ], - "equipment": { "tid": 23015, "promotion": 6, "rank": 1, "level": 80 }, "level": 80, - "avatarId": 1213, - "promotion": 6, "skillTreeList": [ + { "pointId": 1005001, "level": 5 }, + { "pointId": 1005002, "level": 9 }, + { "pointId": 1005003, "level": 8 }, + { "pointId": 1005004, "level": 9 }, + { "pointId": 1005007, "level": 1 }, + { "pointId": 1005101, "level": 1 }, + { "pointId": 1005102, "level": 1 }, + { "pointId": 1005103, "level": 1 }, + { "pointId": 1005201, "level": 1 }, + { "pointId": 1005202, "level": 1 }, + { "pointId": 1005203, "level": 1 }, + { "pointId": 1005204, "level": 1 }, + { "pointId": 1005205, "level": 1 }, + { "pointId": 1005206, "level": 1 }, + { "pointId": 1005207, "level": 1 }, + { "pointId": 1005210, "level": 1 }, { "pointId": 1213001, "level": 6 }, - { "pointId": 1213002, "level": 10 }, + { "pointId": 1213002, "level": 9 }, { "pointId": 1213003, "level": 10 }, - { "pointId": 1213004, "level": 10 }, + { "pointId": 1213004, "level": 9 }, { "pointId": 1213007, "level": 1 }, { "pointId": 1213101, "level": 1 }, { "pointId": 1213102, "level": 1 }, @@ -407,19 +150,249 @@ { "pointId": 1213207, "level": 1 }, { "pointId": 1213208, "level": 1 }, { "pointId": 1213209, "level": 1 }, - { "pointId": 1213210, "level": 1 } - ] + { "pointId": 1213210, "level": 1 }, + { "pointId": 1205001, "level": 6 }, + { "pointId": 1205002, "level": 10 }, + { "pointId": 1205003, "level": 9 }, + { "pointId": 1205004, "level": 7 }, + { "pointId": 1205007, "level": 1 }, + { "pointId": 1205101, "level": 1 }, + { "pointId": 1205102, "level": 1 }, + { "pointId": 1205103, "level": 1 }, + { "pointId": 1205201, "level": 1 }, + { "pointId": 1205202, "level": 1 }, + { "pointId": 1205203, "level": 1 }, + { "pointId": 1205205, "level": 1 }, + { "pointId": 1205206, "level": 1 }, + { "pointId": 1205207, "level": 1 }, + { "pointId": 1205208, "level": 1 }, + { "pointId": 1205209, "level": 1 }, + { "pointId": 1205210, "level": 1 } + ], + "relicList": [ + { + "tid": 61091, + "type": 1, + "subAffixList": [ + { "affixId": 2, "cnt": 2, "step": 1 }, + { "affixId": 5, "cnt": 2, "step": 2 }, + { "affixId": 8, "cnt": 2, "step": 2 }, + { "affixId": 11, "cnt": 2, "step": 1 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 61092, + "type": 2, + "subAffixList": [ + { "affixId": 5, "cnt": 1, "step": 2 }, + { "affixId": 8, "cnt": 3, "step": 4 }, + { "affixId": 10, "cnt": 3, "step": 4 }, + { "affixId": 11, "cnt": 2, "step": 3 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 61093, + "type": 3, + "subAffixList": [ + { "affixId": 3, "cnt": 1, "step": 2 }, + { "affixId": 7, "cnt": 3, "step": 4 }, + { "affixId": 8, "cnt": 2, "step": 4 }, + { "affixId": 10, "cnt": 3, "step": 2 } + ], + "mainAffixId": 2, + "level": 15 + }, + { + "tid": 61094, + "type": 4, + "subAffixList": [ + { "affixId": 2, "cnt": 2, "step": 1 }, + { "affixId": 3, "cnt": 2, "step": 1 }, + { "affixId": 5, "cnt": 3, "step": 3 }, + { "affixId": 10, "cnt": 1, "step": 2 } + ], + "mainAffixId": 4, + "level": 15 + }, + { + "tid": 63015, + "type": 5, + "subAffixList": [ + { "affixId": 1, "cnt": 1, "step": 2 }, + { "affixId": 2, "cnt": 3, "step": 4 }, + { "affixId": 3, "cnt": 1 }, + { "affixId": 5, "cnt": 3, "step": 3 } + ], + "mainAffixId": 7, + "level": 15 + }, + { + "tid": 63016, + "type": 6, + "subAffixList": [ + { "affixId": 2, "cnt": 3, "step": 4 }, + { "affixId": 4, "cnt": 2, "step": 3 }, + { "affixId": 6, "cnt": 2, "step": 1 }, + { "affixId": 9, "cnt": 1, "step": 2 } + ], + "mainAffixId": 4, + "level": 15 + }, + { + "tid": 61021, + "type": 1, + "subAffixList": [ + { "affixId": 5, "cnt": 4, "step": 4 }, + { "affixId": 7, "cnt": 1 }, + { "affixId": 8, "cnt": 2, "step": 3 }, + { "affixId": 9, "cnt": 2 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 61022, + "type": 2, + "subAffixList": [ + { "affixId": 1, "cnt": 1, "step": 1 }, + { "affixId": 3, "cnt": 2 }, + { "affixId": 9, "cnt": 4, "step": 3 }, + { "affixId": 12, "cnt": 2, "step": 2 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 61023, + "type": 3, + "subAffixList": [ + { "affixId": 1, "cnt": 2, "step": 2 }, + { "affixId": 2, "cnt": 1 }, + { "affixId": 3, "cnt": 4, "step": 2 }, + { "affixId": 5, "cnt": 1 } + ], + "mainAffixId": 5, + "level": 15 + }, + { + "tid": 61024, + "type": 4, + "subAffixList": [ + { "affixId": 1, "cnt": 1, "step": 2 }, + { "affixId": 8, "cnt": 4, "step": 4 }, + { "affixId": 10, "cnt": 1 }, + { "affixId": 11, "cnt": 2, "step": 1 } + ], + "mainAffixId": 2, + "level": 15 + }, + { + "tid": 63095, + "type": 5, + "subAffixList": [ + { "affixId": 8, "cnt": 3, "step": 3 }, + { "affixId": 10, "cnt": 2, "step": 4 }, + { "affixId": 11, "cnt": 2, "step": 4 }, + { "affixId": 12, "cnt": 1, "step": 2 } + ], + "mainAffixId": 10, + "level": 15 + }, + { + "tid": 63096, + "type": 6, + "subAffixList": [ + { "affixId": 6, "cnt": 1, "step": 1 }, + { "affixId": 8, "cnt": 1, "step": 1 }, + { "affixId": 9, "cnt": 3, "step": 5 }, + { "affixId": 11, "cnt": 3, "step": 5 } + ], + "mainAffixId": 4, + "level": 15 + }, + { + "tid": 61131, + "type": 1, + "subAffixList": [ + { "affixId": 6, "cnt": 2, "step": 2 }, + { "affixId": 8, "cnt": 4, "step": 3 }, + { "affixId": 9, "cnt": 1, "step": 2 }, + { "affixId": 10, "cnt": 1 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 61132, + "type": 2, + "subAffixList": [ + { "affixId": 6, "cnt": 5, "step": 4 }, + { "affixId": 8, "cnt": 1, "step": 1 }, + { "affixId": 9, "cnt": 2, "step": 3 }, + { "affixId": 12, "cnt": 1 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 61133, + "type": 3, + "subAffixList": [ + { "affixId": 1, "cnt": 1, "step": 1 }, + { "affixId": 3, "cnt": 4, "step": 3 }, + { "affixId": 5, "cnt": 2, "step": 2 }, + { "affixId": 6, "cnt": 2, "step": 1 } + ], + "mainAffixId": 5, + "level": 15 + }, + { + "tid": 61134, + "type": 4, + "subAffixList": [ + { "affixId": 1, "cnt": 2, "step": 2 }, + { "affixId": 5, "cnt": 3, "step": 3 }, + { "affixId": 9, "cnt": 2, "step": 2 }, + { "affixId": 12, "cnt": 2, "step": 1 } + ], + "mainAffixId": 1, + "level": 15 + }, + { + "tid": 63065, + "type": 5, + "subAffixList": [ + { "affixId": 1, "cnt": 2, "step": 1 }, + { "affixId": 3, "cnt": 2, "step": 2 }, + { "affixId": 4, "cnt": 2, "step": 4 }, + { "affixId": 8, "cnt": 2, "step": 4 } + ], + "mainAffixId": 8, + "level": 15 + }, + { + "tid": 63066, + "type": 6, + "subAffixList": [ + { "affixId": 1, "cnt": 3, "step": 2 }, + { "affixId": 2, "cnt": 1 }, + { "affixId": 5, "cnt": 1 }, + { "affixId": 8, "cnt": 4, "step": 6 } + ], + "mainAffixId": 3, + "level": 15 + } + ], + "avatarId": 1205, + "promotion": 6, + "equipment": { "tid": 23009, "level": 80, "promotion": 6, "rank": 1 }, + "pos": 2 }, - "friendCount": 18, - "recordInfo": { - "achievementCount": 276, - "avatarCount": 24, - "maxRogueChallengeScore": 7, - "challengeInfo": { "noneScheduleMaxLevel": 16 }, - "equipmentCount": 154 - }, - "uid": 100086290, - "platform": "PC", - "isDisplayAvatar": true + "platform": "IOS", + "headIcon": 200107 } }