# 解锁东西的一个通用的助手,不可独立使用 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 implUnlockThing(newUserItemList:list, userId: int, currentLoginTimestamp:int, currentLoginResult) -> str: ''' 解锁东西的实现 Note: itemKind 如下 PLATE = 1 # 姓名框 TITLE = 2 # 称号 ICON = 3 # 头像 PRESENT = 4 MUSIC = 5 # 乐曲 MUSIC_MASTER = 6 MUSIC_RE_MASTER = 7 MUSIC_STRONG = 8 CHARACTER = 9 # 旅行伙伴 PARTNER = 10 # 搭档 FRAME = 11 # 背景板 TICKET = 12 # 功能票 ''' # 上传上去的歌曲记录 musicDataToBeUploaded = ({ "musicId": 229, #洗衣机 "level": 0, "playCount": 2, "achievement": 0, "comboStatus": 0, "syncStatus": 0, "deluxscoreMax": 0, "scoreRank": 0, "extNum1": 0 }) # UserData を取得 currentUserData = implGetUser_("Data", userId) currentUserData2 = currentUserData['userData'] # UserPlayLog を構築してアップロード 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'] = "1" # Insert mode(Not overriding) currentUserAll['upsertUserAll']['userItemList'] = newUserItemList 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