mirror of
https://github.com/baiqwerdvd/ArknightsUID.git
synced 2025-05-08 04:55:54 +08:00
🎨 调整请求方式
This commit is contained in:
parent
60e5d06a2d
commit
0dd7f64434
@ -15,7 +15,6 @@ from ..utils.database.models import ArknightsBind
|
|||||||
from .sign import daily_sign, sign_in
|
from .sign import daily_sign, sign_in
|
||||||
|
|
||||||
SIGN_TIME = arkconfig.get_config('SignTime').data
|
SIGN_TIME = arkconfig.get_config('SignTime').data
|
||||||
UID_HINT = '添加失败, 请先绑定明日方舟UID'
|
|
||||||
|
|
||||||
sv_sign = SV('森空岛签到')
|
sv_sign = SV('森空岛签到')
|
||||||
sv_sign_config = SV('森空岛管理', pm=2)
|
sv_sign_config = SV('森空岛管理', pm=2)
|
||||||
|
@ -13,7 +13,7 @@ from ...models.skland.models import (
|
|||||||
ArknightsPlayerInfoModel,
|
ArknightsPlayerInfoModel,
|
||||||
ArknightsUserMeModel,
|
ArknightsUserMeModel,
|
||||||
)
|
)
|
||||||
from .api import ARK_PLAYER_INFO, ARK_SKD_SIGN, ARK_USER_ME
|
from .api import ARK_GEN_CRED_BY_CODE, ARK_PLAYER_INFO, ARK_SKD_SIGN, ARK_USER_ME
|
||||||
|
|
||||||
proxy_url = core_plugins_config.get_config('proxy').data
|
proxy_url = core_plugins_config.get_config('proxy').data
|
||||||
ssl_verify = core_plugins_config.get_config('MhySSLVerify').data
|
ssl_verify = core_plugins_config.get_config('MhySSLVerify').data
|
||||||
@ -23,11 +23,11 @@ class BaseArkApi:
|
|||||||
proxy_url: str | None = proxy_url if proxy_url else None
|
proxy_url: str | None = proxy_url if proxy_url else None
|
||||||
_HEADER: ClassVar[dict[str, str]] = {
|
_HEADER: ClassVar[dict[str, str]] = {
|
||||||
'Host': 'zonai.skland.com',
|
'Host': 'zonai.skland.com',
|
||||||
|
'Platform': '1',
|
||||||
'Origin': 'https://www.skland.com',
|
'Origin': 'https://www.skland.com',
|
||||||
'Referer': 'https://www.skland.com/',
|
'Referer': 'https://www.skland.com/',
|
||||||
'content-type': 'application/json; charset=UTF-8',
|
'content-type': 'application/json',
|
||||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
|
'user-agent': 'Skland/1.0.1 (com.hypergryph.skland; build:100001014; Android 33; ) Okhttp/4.11.0',
|
||||||
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async def _pass(self, gt: str, ch: str) -> tuple[str | None, str | None]:
|
async def _pass(self, gt: str, ch: str) -> tuple[str | None, str | None]:
|
||||||
@ -50,7 +50,7 @@ class BaseArkApi:
|
|||||||
async def get_game_player_info(self, uid: str) -> int | ArknightsPlayerInfoModel:
|
async def get_game_player_info(self, uid: str) -> int | ArknightsPlayerInfoModel:
|
||||||
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
|
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
|
||||||
if cred is None:
|
if cred is None:
|
||||||
return -61
|
return -60
|
||||||
is_vaild = await self.check_cred_valid(cred)
|
is_vaild = await self.check_cred_valid(cred)
|
||||||
if isinstance(is_vaild, bool):
|
if isinstance(is_vaild, bool):
|
||||||
await ArknightsUser.delete_user_data_by_uid(uid)
|
await ArknightsUser.delete_user_data_by_uid(uid)
|
||||||
@ -62,6 +62,8 @@ class BaseArkApi:
|
|||||||
params={'uid': uid},
|
params={'uid': uid},
|
||||||
header=header,
|
header=header,
|
||||||
)
|
)
|
||||||
|
if isinstance(raw_data, int):
|
||||||
|
return raw_data
|
||||||
unpack_data = self.unpack(raw_data)
|
unpack_data = self.unpack(raw_data)
|
||||||
if isinstance(unpack_data, int):
|
if isinstance(unpack_data, int):
|
||||||
return unpack_data
|
return unpack_data
|
||||||
@ -71,7 +73,7 @@ class BaseArkApi:
|
|||||||
async def skd_sign(self, uid: str) -> int | ArknightsAttendanceModel:
|
async def skd_sign(self, uid: str) -> int | ArknightsAttendanceModel:
|
||||||
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
|
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
|
||||||
if cred is None:
|
if cred is None:
|
||||||
return -61
|
return -60
|
||||||
is_vaild = await self.check_cred_valid(cred)
|
is_vaild = await self.check_cred_valid(cred)
|
||||||
if isinstance(is_vaild, bool):
|
if isinstance(is_vaild, bool):
|
||||||
await ArknightsUser.delete_user_data_by_uid(uid)
|
await ArknightsUser.delete_user_data_by_uid(uid)
|
||||||
@ -87,6 +89,8 @@ class BaseArkApi:
|
|||||||
},
|
},
|
||||||
header=header,
|
header=header,
|
||||||
)
|
)
|
||||||
|
if isinstance(raw_data, int):
|
||||||
|
return raw_data
|
||||||
unpack_data = self.unpack(raw_data)
|
unpack_data = self.unpack(raw_data)
|
||||||
if isinstance(unpack_data, int):
|
if isinstance(unpack_data, int):
|
||||||
return unpack_data
|
return unpack_data
|
||||||
@ -96,7 +100,7 @@ class BaseArkApi:
|
|||||||
async def get_sign_info(self, uid: str) -> int | ArknightsAttendanceCalendarModel:
|
async def get_sign_info(self, uid: str) -> int | ArknightsAttendanceCalendarModel:
|
||||||
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
|
cred: str | None = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
|
||||||
if cred is None:
|
if cred is None:
|
||||||
return -61
|
return -60
|
||||||
is_vaild = await self.check_cred_valid(cred)
|
is_vaild = await self.check_cred_valid(cred)
|
||||||
if isinstance(is_vaild, bool):
|
if isinstance(is_vaild, bool):
|
||||||
await ArknightsUser.delete_user_data_by_uid(uid)
|
await ArknightsUser.delete_user_data_by_uid(uid)
|
||||||
@ -112,6 +116,8 @@ class BaseArkApi:
|
|||||||
},
|
},
|
||||||
header=header,
|
header=header,
|
||||||
)
|
)
|
||||||
|
if isinstance(raw_data, int):
|
||||||
|
return raw_data
|
||||||
unpack_data = self.unpack(raw_data)
|
unpack_data = self.unpack(raw_data)
|
||||||
if isinstance(unpack_data, int):
|
if isinstance(unpack_data, int):
|
||||||
return unpack_data
|
return unpack_data
|
||||||
@ -125,18 +131,28 @@ class BaseArkApi:
|
|||||||
if isinstance(raw_data, int):
|
if isinstance(raw_data, int):
|
||||||
return False
|
return False
|
||||||
if 'code' in raw_data and raw_data['code'] == 10001:
|
if 'code' in raw_data and raw_data['code'] == 10001:
|
||||||
|
logger.info(f'cred is invalid {raw_data}')
|
||||||
return False
|
return False
|
||||||
unpack_data = self.unpack(raw_data)
|
unpack_data = self.unpack(raw_data)
|
||||||
if isinstance(unpack_data, int):
|
return msgspec.convert(unpack_data, type=ArknightsUserMeModel)
|
||||||
|
|
||||||
|
async def check_code_valid(self, code: str) -> bool | str:
|
||||||
|
data = {
|
||||||
|
'kind': 1,
|
||||||
|
'code': code
|
||||||
|
}
|
||||||
|
raw_data = await self._ark_request(
|
||||||
|
ARK_GEN_CRED_BY_CODE,
|
||||||
|
data=data
|
||||||
|
)
|
||||||
|
if isinstance(raw_data, int):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return msgspec.convert(unpack_data, type=ArknightsUserMeModel)
|
cred = raw_data['cred']
|
||||||
|
return cred
|
||||||
|
|
||||||
def unpack(self, raw_data: dict | int) -> dict | int:
|
def unpack(self, raw_data: dict) -> dict:
|
||||||
if isinstance(raw_data, dict):
|
return raw_data['data']
|
||||||
return raw_data['data']
|
|
||||||
else:
|
|
||||||
return raw_data
|
|
||||||
|
|
||||||
async def _ark_request(
|
async def _ark_request(
|
||||||
self,
|
self,
|
||||||
@ -152,55 +168,46 @@ class BaseArkApi:
|
|||||||
) as client:
|
) as client:
|
||||||
raw_data = {}
|
raw_data = {}
|
||||||
if 'Cred' not in header:
|
if 'Cred' not in header:
|
||||||
target_user_id = (
|
return 10001
|
||||||
data['friendUserId']
|
|
||||||
if data and 'friendUserId' in data
|
|
||||||
else None
|
|
||||||
)
|
|
||||||
Cred: str | None = await ArknightsUser.get_random_cookie(
|
|
||||||
target_user_id if target_user_id else '18888888'
|
|
||||||
)
|
|
||||||
if Cred is None:
|
|
||||||
return -61
|
|
||||||
arkUser = await ArknightsUser.base_select_data(Cred=Cred)
|
|
||||||
if arkUser is None:
|
|
||||||
return -61
|
|
||||||
header['Cred'] = Cred
|
|
||||||
|
|
||||||
for _ in range(3):
|
async with client.request(
|
||||||
async with client.request(
|
method,
|
||||||
method,
|
url=url,
|
||||||
url=url,
|
headers=header,
|
||||||
headers=header,
|
params=params,
|
||||||
params=params,
|
json=data,
|
||||||
json=data,
|
proxy=self.proxy_url if use_proxy else None,
|
||||||
proxy=self.proxy_url if use_proxy else None,
|
timeout=300,
|
||||||
timeout=300,
|
) as resp:
|
||||||
) as resp:
|
try:
|
||||||
try:
|
raw_data = await resp.json()
|
||||||
raw_data = await resp.json()
|
except ContentTypeError:
|
||||||
except ContentTypeError:
|
_raw_data = await resp.text()
|
||||||
_raw_data = await resp.text()
|
raw_data = {'code': -999, 'data': _raw_data}
|
||||||
raw_data = {'retcode': -999, 'data': _raw_data}
|
logger.info(raw_data)
|
||||||
|
|
||||||
|
# 判断code
|
||||||
|
if 'code' in raw_data and raw_data['code'] != 0:
|
||||||
logger.info(raw_data)
|
logger.info(raw_data)
|
||||||
|
return raw_data
|
||||||
|
|
||||||
# 判断status
|
# 判断status
|
||||||
if 'status' in raw_data and 'msg' in raw_data:
|
if 'status' in raw_data and 'msg' in raw_data:
|
||||||
retcode = 1
|
retcode = 1
|
||||||
else:
|
else:
|
||||||
retcode = 0
|
retcode = 0
|
||||||
|
|
||||||
if retcode == 1 and data:
|
if retcode == 1 and data:
|
||||||
vl, ch = await self._pass(
|
vl, ch = await self._pass(
|
||||||
gt=raw_data['data']['captcha']['gt'],
|
gt=raw_data['data']['captcha']['gt'],
|
||||||
ch=raw_data['data']['captcha']['challenge']
|
ch=raw_data['data']['captcha']['challenge']
|
||||||
)
|
)
|
||||||
data['captcha'] = {}
|
data['captcha'] = {}
|
||||||
data['captcha']['geetest_challenge'] = ch
|
data['captcha']['geetest_challenge'] = ch
|
||||||
data['captcha']['geetest_validate'] = vl
|
data['captcha']['geetest_validate'] = vl
|
||||||
data['captcha']['geetest_seccode'] = f'{vl}|jordan'
|
data['captcha']['geetest_seccode'] = f'{vl}|jordan'
|
||||||
elif retcode != 0:
|
elif retcode != 0:
|
||||||
return retcode
|
return retcode
|
||||||
else:
|
else:
|
||||||
return raw_data
|
return raw_data
|
||||||
return -999
|
return 10001
|
||||||
|
16
ArknightsUID/utils/error_reply.py
Normal file
16
ArknightsUID/utils/error_reply.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
UID_HINT = '添加失败, 请先绑定明日方舟UID'
|
||||||
|
|
||||||
|
def get_error(retcode: int | str) -> str:
|
||||||
|
if retcode == 10001:
|
||||||
|
return '请求体出错, 请检查具体实现代码...'
|
||||||
|
if retcode == -10001:
|
||||||
|
return '请求体出错, 请检查具体实现代码...'
|
||||||
|
if retcode == -201:
|
||||||
|
return '你的账号可能已被封禁, 请联系米游社客服...'
|
||||||
|
if retcode == -501101:
|
||||||
|
return '当前角色冒险等阶未达到10级, 暂时无法参加此活动...'
|
||||||
|
if retcode == 400:
|
||||||
|
return '[MINIGG]暂未找到此内容...'
|
||||||
|
if retcode == -400:
|
||||||
|
return '请输入更详细的名称...'
|
||||||
|
return f'API报错, 错误码为{retcode}!'
|
Loading…
x
Reference in New Issue
Block a user