diff --git a/README.md b/README.md index dd870a4..dae3fee 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ⚙️[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID) Core 0.5.5 +# ⚙️[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID) Core 0.6.1 [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?&labelColor=ef8336)](https://pycqa.github.io/isort/) diff --git a/gsuid_core/utils/api/mys/api.py b/gsuid_core/utils/api/mys/api.py index adf537f..09a294e 100644 --- a/gsuid_core/utils/api/mys/api.py +++ b/gsuid_core/utils/api/mys/api.py @@ -118,6 +118,7 @@ CALCULATE_INFO_URL_OS = ( # 新版素材计算器 COMPUTE_URL = f'{GS_BASE}/event/e20200928calculate/v3/batch_compute' POETRY_ABYSS_URL = f'{RECORD_BASE}/game_record/app/genshin/api/role_combat' +ACHI_URL = f'{RECORD_BASE}/game_record/app/genshin/api/achievement' # 获取米游社内的角色信息 mysid -> uid MIHOYO_BBS_PLAYER_INFO_URL = ( diff --git a/gsuid_core/utils/api/mys/models.py b/gsuid_core/utils/api/mys/models.py index 4a24e3e..e8032d5 100644 --- a/gsuid_core/utils/api/mys/models.py +++ b/gsuid_core/utils/api/mys/models.py @@ -1214,3 +1214,12 @@ class PoetryAbyssDatas(TypedDict): data: List[PoetryAbyssData] is_unlock: bool links: PoetryAbyssLinks + + +class AchievementData(TypedDict): + name: str + id: str + percentage: int + finish_num: int + show_percent: bool + icon: str diff --git a/gsuid_core/utils/api/mys/request.py b/gsuid_core/utils/api/mys/request.py index 51c6838..85d3f3f 100644 --- a/gsuid_core/utils/api/mys/request.py +++ b/gsuid_core/utils/api/mys/request.py @@ -22,6 +22,7 @@ from .models import ( CalculateInfo, DailyNoteData, CharDetailData, + AchievementData, PoetryAbyssDatas, ) @@ -77,6 +78,32 @@ class MysApi(SignMysApi): return cast(BsIndex, data['data']) return data + async def get_achievement_info( + self, uid: str + ) -> Union[List[AchievementData], int]: + server_id = self.RECOGNIZE_SERVER.get(uid[0]) + HEADER = deepcopy(self._HEADER) + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck + + data = await self._mys_request( + self.MAPI['ACHI_URL'], + 'POST', + HEADER, + data={'role_id': uid, 'server': server_id}, + ) + if isinstance(data, Dict): + if 'retcode' in data: + if data['retcode'] == 0: + data = cast(List[AchievementData], data['data']['list']) + else: + data = cast(int, data['retcode']) + else: + data = -999 + return data + async def get_spiral_abyss_info( self, uid: str, schedule_type='1', ck: Optional[str] = None ) -> Union[AbyssData, int]: diff --git a/gsuid_core/version.py b/gsuid_core/version.py index 906d362..43c4ab0 100644 --- a/gsuid_core/version.py +++ b/gsuid_core/version.py @@ -1 +1 @@ -__version__ = "0.6.0" +__version__ = "0.6.1"