mirror of
https://github.com/Remik1r3n/maimaiDX-Api.git
synced 2025-05-20 04:17:28 +08:00
Incomplete FullPlay Rewrite
This commit is contained in:
parent
39b8d805bf
commit
da2458e7f5
@ -1,80 +0,0 @@
|
||||
# 删除成绩
|
||||
|
||||
import json
|
||||
from loguru import logger
|
||||
|
||||
from Static_Settings import *
|
||||
from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error
|
||||
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
|
||||
from HelperGetUserThing import implGetUser_
|
||||
from HelperUploadUserPlayLog import apiUploadUserPlaylog
|
||||
from HelperUserAll import generateFullUserAll
|
||||
|
||||
def implDeleteMusicRecord(musicToBeDeleted: int, diffLevelId:int, userId: int, currentLoginTimestamp:int, currentLoginResult) -> str:
|
||||
'''
|
||||
删除成绩的实现
|
||||
需要在外部先登录并传入登录结果
|
||||
'''
|
||||
# 上传上去的歌曲记录
|
||||
musicDataToBeUploaded = ({
|
||||
"musicId": musicToBeDeleted,
|
||||
"level": diffLevelId,
|
||||
"playCount": 1,
|
||||
"achievement": 0,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": 0,
|
||||
"scoreRank": 0,
|
||||
"extNum1": 0
|
||||
})
|
||||
|
||||
# 取得 UserData
|
||||
currentUserData = implGetUser_("Data", userId)
|
||||
currentUserData2 = currentUserData['userData']
|
||||
|
||||
# 构建并上传一个游玩记录
|
||||
currentUploadUserPlaylogApiResult = apiUploadUserPlaylog(userId, musicDataToBeUploaded, currentUserData2, currentLoginResult['loginId'])
|
||||
logger.debug(f"上传 UserPlayLog 结果: {currentUploadUserPlaylogApiResult}")
|
||||
|
||||
# 构建并上传 UserAll
|
||||
retries = 0
|
||||
while retries < 3:
|
||||
currentSpecialNumber = calcSpecialNumber()
|
||||
currentUserAll = generateFullUserAll(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber)
|
||||
|
||||
currentUserAll['upsertUserAll']["userMusicDetailList"] = [musicDataToBeUploaded]
|
||||
currentUserAll['upsertUserAll']['isNewMusicDetailList'] = "0" #0为编辑 即可删除掉成绩
|
||||
|
||||
data = json.dumps(currentUserAll)
|
||||
try:
|
||||
currentUserAllResult = json.loads(apiSDGB(data, "UpsertUserAllApi", userId))
|
||||
except Request500Error:
|
||||
logger.warning("500 Error Triggered. Rebuilding data.")
|
||||
retries += 1
|
||||
continue
|
||||
except Exception:
|
||||
raise WahlapServerBoomedError("邪门错误")
|
||||
break
|
||||
else: # 重试次数超过3次
|
||||
raise Request500Error("多次尝试后仍无法成功上传 UserAll")
|
||||
|
||||
logger.info("删除成绩:结果:"+ str(currentUserAllResult))
|
||||
return currentUserAllResult
|
||||
|
||||
if __name__ == "__main__":
|
||||
userId = testUid
|
||||
currentLoginTimestamp = generateTimestamp()
|
||||
loginResult = apiLogin(currentLoginTimestamp, userId)
|
||||
|
||||
musicId = 11548 #229 is guruguru wash
|
||||
levelId = 3 #3 is MASTER
|
||||
|
||||
if loginResult['returnCode'] != 1:
|
||||
logger.info("登录失败")
|
||||
exit()
|
||||
try:
|
||||
logger.info(implDeleteMusicRecord(musicId, levelId, userId, currentLoginTimestamp, loginResult))
|
||||
logger.info(apiLogout(currentLoginTimestamp, userId))
|
||||
except:
|
||||
logger.info(apiLogout(currentLoginTimestamp, userId))
|
||||
logger.warning("Error")
|
@ -76,6 +76,7 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b
|
||||
|
||||
currentUserAll['upsertUserAll']['isNewMusicDetailList'] = "1"
|
||||
currentUserAll["upsertUserAll"]["userData"][0]["dailyCourseBonusDate"] = "1970-01-01 08:00:00" # リセット
|
||||
|
||||
|
||||
data = json.dumps(currentUserAll)
|
||||
|
||||
|
71
ActionScoreRecord.py
Normal file
71
ActionScoreRecord.py
Normal file
@ -0,0 +1,71 @@
|
||||
# 删除成绩
|
||||
|
||||
import json
|
||||
from loguru import logger
|
||||
|
||||
from Static_Settings import *
|
||||
from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error
|
||||
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
|
||||
from HelperGetUserThing import implGetUser_
|
||||
from HelperUploadUserPlayLog import apiUploadUserPlaylog
|
||||
from HelperUserAll import generateFullUserAll
|
||||
from HelperFullPlay import implFullPlayAction
|
||||
|
||||
def implDeleteMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginResult, musicId:int, levelId:int) -> str:
|
||||
musicData= ({
|
||||
"musicId": musicId,
|
||||
"level": levelId,
|
||||
"playCount": 1,
|
||||
"achievement": 0,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": 0,
|
||||
"scoreRank": 0,
|
||||
"extNum1": 0
|
||||
})
|
||||
userAllPatches = {
|
||||
"upsertUserAll": {
|
||||
"userMusicDetailList": [musicData],
|
||||
"isNewMusicDetailList": "0" # 0为编辑,即可删除掉成绩
|
||||
}}
|
||||
result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches)
|
||||
return result
|
||||
|
||||
def implUploadMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginResult, musicId:int, levelId:int, achievement:int, dxScore:int) -> str:
|
||||
musicData= ({
|
||||
"musicId": musicId,
|
||||
"level": levelId,
|
||||
"playCount": 1,
|
||||
"achievement": achievement,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": dxScore,
|
||||
"scoreRank": 0,
|
||||
"extNum1": 0
|
||||
})
|
||||
userAllPatches = {
|
||||
"upsertUserAll": {
|
||||
"userMusicDetailList": [musicData],
|
||||
"isNewMusicDetailList": "1" # 0为编辑,即可删除掉成绩
|
||||
}}
|
||||
result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches)
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
userId = testUid
|
||||
currentLoginTimestamp = generateTimestamp()
|
||||
loginResult = apiLogin(currentLoginTimestamp, userId)
|
||||
|
||||
musicId = 852 #229 is guruguru wash
|
||||
levelId = 3 #3 is MASTER
|
||||
|
||||
if loginResult['returnCode'] != 1:
|
||||
logger.info("登录失败")
|
||||
exit()
|
||||
try:
|
||||
#logger.info(implDeleteMusicRecord(userId, currentLoginTimestamp, loginResult, musicId, levelId))
|
||||
logger.info(implUploadMusicRecord(userId, currentLoginTimestamp, loginResult, musicId, levelId, 1000000, 100))
|
||||
logger.info(apiLogout(currentLoginTimestamp, userId))
|
||||
finally:
|
||||
logger.info(apiLogout(currentLoginTimestamp, userId))
|
||||
#logger.warning("Error")
|
0
GenericCLI.py
Normal file
0
GenericCLI.py
Normal file
98
HelperFullPlay.py
Normal file
98
HelperFullPlay.py
Normal file
@ -0,0 +1,98 @@
|
||||
import json
|
||||
from loguru import logger
|
||||
|
||||
from Static_Settings import *
|
||||
from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error
|
||||
from HelperGetUserThing import implGetUser_
|
||||
from HelperUploadUserPlayLog import apiUploadUserPlaylog
|
||||
from HelperUserAll import generateFullUserAll
|
||||
|
||||
def EXAMPLE_implUploadScore(userId: int, currentLoginTimestamp:int, currentLoginResult) -> str:
|
||||
'''示例!'''
|
||||
musicData= ({
|
||||
"musicId": 229,
|
||||
"level": 2,
|
||||
"playCount": 1,
|
||||
"achievement": 0,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": 0,
|
||||
"scoreRank": 0,
|
||||
"extNum1": 0
|
||||
})
|
||||
userAllPatches = {
|
||||
"upsertUserAll": {
|
||||
"userMusicDetailList": [musicData],
|
||||
"isNewMusicDetailList": "1" # 0为编辑,即可删除掉成绩
|
||||
}}
|
||||
result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches)
|
||||
return result
|
||||
|
||||
def applyUserAllPatches(userAll, patches):
|
||||
"""
|
||||
递归地将给定的补丁应用到用户数据的各个层次。
|
||||
|
||||
:param user_all: 原始用户数据
|
||||
:param patches: 包含所有patch的字典
|
||||
"""
|
||||
for key, value in patches.items():
|
||||
if isinstance(value, dict) and key in userAll and isinstance(userAll[key], dict):
|
||||
# 如果patch的值是字典,并且userAll中对应的key也是字典,递归处理
|
||||
applyUserAllPatches(userAll[key], value)
|
||||
else:
|
||||
# 否则直接更新或添加key
|
||||
userAll[key] = value
|
||||
|
||||
def implFullPlayAction(userId: int, currentLoginTimestamp:int, currentLoginResult, musicData, userAllPatches) -> str:
|
||||
'''
|
||||
一份完整的上机实现,可以打 patch 来实现各种功能
|
||||
需要在外部先登录并传入登录结果
|
||||
'''
|
||||
# 上传上去的歌曲记录
|
||||
# musicDataToBeUploaded = ({
|
||||
# "musicId": musicToBeDeleted,
|
||||
# "level": diffLevelId,
|
||||
# "playCount": 1,
|
||||
# "achievement": 0,
|
||||
# "comboStatus": 0,
|
||||
# "syncStatus": 0,
|
||||
# "deluxscoreMax": 0,
|
||||
# "scoreRank": 0,
|
||||
# "extNum1": 0
|
||||
#})
|
||||
|
||||
# 取得 UserData
|
||||
currentUserData = implGetUser_("Data", userId)
|
||||
currentUserData2 = currentUserData['userData']
|
||||
|
||||
# 构建并上传一个游玩记录
|
||||
currentUploadUserPlaylogApiResult = apiUploadUserPlaylog(userId, musicData, currentUserData2, currentLoginResult['loginId'])
|
||||
logger.debug(f"上传 UserPlayLog 结果: {currentUploadUserPlaylogApiResult}")
|
||||
|
||||
# 构建并上传 UserAll
|
||||
retries = 0
|
||||
while retries < 3:
|
||||
# 计算一个特殊数
|
||||
currentSpecialNumber = calcSpecialNumber()
|
||||
# 生成出 UserAll
|
||||
currentUserAll = generateFullUserAll(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber)
|
||||
# 应用参数里的补丁
|
||||
applyUserAllPatches(currentUserAll, userAllPatches)
|
||||
# 建构 Json 数据
|
||||
data = json.dumps(currentUserAll)
|
||||
# 开始上传 UserAll
|
||||
try:
|
||||
currentUserAllResult = json.loads(apiSDGB(data, "UpsertUserAllApi", userId))
|
||||
except Request500Error:
|
||||
logger.warning("500 Error Triggered. Rebuilding data.")
|
||||
retries += 1
|
||||
continue
|
||||
except Exception:
|
||||
raise WahlapServerBoomedError("邪门错误")
|
||||
# 成功上传后退出循环
|
||||
break
|
||||
else: # 重试次数超过3次
|
||||
raise Request500Error("多次尝试后仍无法成功上传 UserAll")
|
||||
|
||||
logger.info("上机:结果:"+ str(currentUserAllResult))
|
||||
return currentUserAllResult
|
Loading…
x
Reference in New Issue
Block a user