diff --git a/gsuid_core/utils/api/mys/request.py b/gsuid_core/utils/api/mys/request.py index 108f752..ca21658 100644 --- a/gsuid_core/utils/api/mys/request.py +++ b/gsuid_core/utils/api/mys/request.py @@ -9,7 +9,17 @@ import uuid import random from abc import abstractmethod from string import digits, ascii_letters -from typing import Any, Dict, List, Tuple, Union, Literal, Optional, cast +from typing import ( + Any, + Dict, + List, + Tuple, + Union, + Literal, + Optional, + cast, + overload, +) from aiohttp import TCPConnector, ClientSession, ContentTypeError @@ -123,7 +133,7 @@ class BaseMysApi: ... def get_device_id(self) -> str: - device_id = str(uuid.uuid4()) + device_id = str(uuid.uuid4()).lower() return device_id def generate_fp(self, length: int = 13) -> str: @@ -161,7 +171,7 @@ class BaseMysApi: 'bbs_device_id': device_id, 'device_fp': self.generate_fp(), } - print(body) + HEADER = copy.deepcopy(self._HEADER) res = await self._mys_request( url=self.MAPI['GET_FP_URL'], @@ -290,6 +300,32 @@ class BaseMysApi: ) return data + @overload + async def ck_in_new_device( + self, uid: str, app_cookie: str + ) -> Tuple[str, str, str, str]: + ... + + @overload + async def ck_in_new_device( + self, uid: str, app_cookie: Optional[str] = None + ) -> Optional[Tuple[str, str, str, str]]: + ... + + async def ck_in_new_device( + self, uid: str, app_cookie: Optional[str] = None + ): + device_id = self.get_device_id() + seed_id, seed_time = self.get_seed() + model_name = self.generate_model_name() + fp = await self.generate_fp_by_uid(uid, seed_id, seed_time, model_name) + if app_cookie is None: + app_cookie = await self.get_stoken(uid) + if app_cookie is None: + return logger.warning('设备登录流程错误...') + await self.device_login_and_save(device_id, fp, model_name, app_cookie) + return fp, device_id, seed_id, seed_time + async def _mys_request( self, url: str, @@ -311,7 +347,7 @@ class BaseMysApi: if device_id is not None: header['x-rpc-device_id'] = device_id - print(header) + logger.debug(header) for _ in range(2): async with client.request( method, @@ -339,19 +375,16 @@ class BaseMysApi: retcode = 0 # 针对1034做特殊处理 - if retcode == 1034: + if retcode == 1034 or retcode == 5003: if uid: - ''' + nd = await self.ck_in_new_device(uid) ck = header['Cookie'] - if 'DEVICEFP_SEED_ID' not in ck: + if 'DEVICEFP_SEED_ID' not in ck and nd: header['Cookie'] = ( - 'mi18nLang=zh-cn;_MHYUUID=' - 'b6261233-05a8-45fc-b7a1-55e152b52ae4' - f'DEVICEFP_SEED_ID={seed_id};' - f'DEVICEFP_SEED_TIME={seed_time};' - f'{ck};DEVICE_FP={new_fp}' + f'DEVICEFP_SEED_ID={nd[2]};' + f'DEVICEFP_SEED_TIME={nd[3]};' + f'{ck};DEVICE_FP={nd[0]}' ) - ''' header['x-rpc-challenge_game'] = ( '6' if self.is_sr else '2' diff --git a/gsuid_core/utils/cookie_manager/add_ck.py b/gsuid_core/utils/cookie_manager/add_ck.py index 178fa78..a42fcbe 100644 --- a/gsuid_core/utils/cookie_manager/add_ck.py +++ b/gsuid_core/utils/cookie_manager/add_ck.py @@ -233,11 +233,7 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str: if uid is None: uid = '0' - device_id = mys_api.get_device_id() - seed_id, seed_time = mys_api.get_seed() - model_name = mys_api.generate_model_name() - fp = await mys_api.generate_fp_by_uid(uid, seed_id, seed_time, model_name) - await mys_api.device_login_and_save(device_id, fp, model_name, app_cookie) + nd = await mys_api.ck_in_new_device(uid, app_cookie) # 往数据库添加内容 if uid_bind and await GsUser.user_exists(uid_bind): @@ -248,7 +244,8 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str: status=None, stoken=app_cookie, sr_uid=sr_uid_bind, - fp=fp, + fp=nd[0], + device_id=nd[1], ) elif sr_uid_bind and await GsUser.user_exists(sr_uid_bind, 'sr'): await GsUser.update_data_by_uid( @@ -258,7 +255,8 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str: cookie=account_cookie, status=None, stoken=app_cookie, - fp=fp, + fp=nd[0], + device_id=nd[1], ) else: await GsUser.insert_data( @@ -277,8 +275,8 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str: sr_region=SR_SERVER.get(sr_uid_bind[0], None) if sr_uid_bind else None, - fp=fp, - device_id=device_id, + fp=nd[0], + device_id=nd[1], sr_push_switch='off', sr_sign_switch='off', )