maimaiDX-Api/ActionDeleteMusicRecord.py
2025-01-23 18:52:09 +08:00

81 lines
2.9 KiB
Python

# 删除成绩
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")