diff --git a/ActionLoginBonus.py b/ActionLoginBonus.py index 03c187a..6513af9 100644 --- a/ActionLoginBonus.py +++ b/ActionLoginBonus.py @@ -5,14 +5,12 @@ import json from loguru import logger from Static_Settings import * -from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error +from API_TitleServer import apiSDGB from HelperLogInOut import apiLogin, apiLogout, generateTimestamp -from HelperGetUserThing import implGetUser_ -from HelperUploadUserPlayLog import apiUploadUserPlaylog -from HelperUserAll import generateFullUserAll +from HelperFullPlay import implFullPlayAction def apiQueryLoginBonus(userId:int) -> str: - '''ログインボーナスを取得する API リクエスター''' + '''ログインボーナスを取得する API Requestor''' data = json.dumps({ "userId": int(userId), "nextIndex": 0, @@ -20,16 +18,15 @@ def apiQueryLoginBonus(userId:int) -> str: }) return apiSDGB(data, "GetUserLoginBonusApi", userId) -def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, bonusGenerateMode=2): +def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, bonusGenerateMode=1): ''' ログインボーナスデータをアップロードする bonusGenerateMode は、ログインボーナスを生成する方法を指定します。 - 0 : 何もしない、リセットのみ - 1 : 全部 MAX にする - 2 : 選択したボーナスのみ MAX にする(選択したボーナスはないの場合は False を返す) + 1: 選択したボーナスのみ MAX にする(選択したボーナスはないの場合は False を返す) + 2: 全部 MAX にする ''' - musicDataToBeUploaded = { - "musicId": 229, #ぐるぐるWASH + musicData = { + "musicId": 674, # Magical Flavor "level": 0, "playCount": 2, "achievement": 0, @@ -39,11 +36,6 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b "scoreRank": 0, "extNum1": 0 } - - # サーバーから UserData を取得 - currentUserData = implGetUser_("Data", userId) - currentUserData2 = currentUserData['userData'] - # サーバーからログインボーナスデータを取得 data = json.dumps({ "userId": int(userId), @@ -51,61 +43,21 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b "maxCount": 2000 }) UserLoginBonusResponse = json.loads(apiSDGB(data, "GetUserLoginBonusApi", userId)) + # ログインボーナスリストを生成、それから処理してアップロード UserLoginBonusList = UserLoginBonusResponse['userLoginBonusList'] - - # UserPlayLog を構築してアップロード - currentUploadUserPlaylogApiResult = apiUploadUserPlaylog(userId, musicDataToBeUploaded, currentUserData2, currentLoginResult['loginId']) - logger.debug(f"上传 UserPlayLog 结果: {currentUploadUserPlaylogApiResult}") - - # ログインボーナスリストを生成 - if not bonusGenerateMode == 0: - finalBonusList = generateLoginBonusList(UserLoginBonusList, bonusGenerateMode) - if not finalBonusList: - return False - - # UserAllを構築してアップロード - retries = 0 - while retries < 3: - currentSpecialNumber = calcSpecialNumber() - currentUserAll = generateFullUserAll(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber) - - currentUserAll['upsertUserAll']["userMusicDetailList"] = [musicDataToBeUploaded] - if not bonusGenerateMode == 0: - currentUserAll['upsertUserAll']['userLoginBonusList'] = finalBonusList - currentUserAll['upsertUserAll']['isNewLoginBonusList'] = "0" * len(finalBonusList) - - currentUserAll['upsertUserAll']['isNewMusicDetailList'] = "1" - currentUserAll["upsertUserAll"]["userData"][0]["dailyCourseBonusDate"] = "1970-01-01 08:00:00" # リセット - - - data = json.dumps(currentUserAll) - - try: - currentUserAllResult = json.loads(apiSDGB(data, "UpsertUserAllApi", userId)) - except Request500Error: - logger.warning("500エラーが発生しました。データを再構築します。") - retries += 1 - continue - except Exception: - raise WahlapServerBoomedError("不明なエラー") - break - else: - raise Request500Error("500エラーが発生しました。UserAllをアップロードできませんでした。") - - - ###### Debug 機能:ログインボーナスをもう一度取得(確認用) - apiLogout(currentLoginTimestamp, userId) - apiLogin(currentLoginTimestamp, userId) - data = json.dumps({ - "userId": int(userId), - "nextIndex": 0, - "maxCount": 2000 - }) - finalLoginBonusData = json.loads(apiSDGB(data, "GetUserLoginBonusApi", userId)) - return finalLoginBonusData - ###### PRODUCTION 用には、上記のコードを削除してください - - return currentUserAllResult + finalBonusList = generateLoginBonusList(UserLoginBonusList, bonusGenerateMode) + if not finalBonusList: + return False #ログインボーナスを選択していないから失敗 + # UserAllのパッチ + userAllPatches = { + "upsertUserAll": { + "userMusicDetailList": [musicData], + "isNewMusicDetailList": "1", #上書きしない + "userLoginBonusList": finalBonusList, + "isNewLoginBonusList": "0" * len(finalBonusList) + }} + result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches) + return result def generateLoginBonusList(UserLoginBonusList, generateMode=1): ''' @@ -195,7 +147,7 @@ if __name__ == "__main__": exit() try: # Remember to change the mode!!! - logger.info(implLoginBonus(userId, currentLoginTimestamp, loginResult, 0)) + logger.info(implLoginBonus(userId, currentLoginTimestamp, loginResult, 1)) logger.info(apiLogout(currentLoginTimestamp, userId)) except: logger.info(apiLogout(currentLoginTimestamp, userId)) diff --git a/ActionScoreRecord.py b/ActionScoreRecord.py index 3da72f9..a696749 100644 --- a/ActionScoreRecord.py +++ b/ActionScoreRecord.py @@ -1,14 +1,8 @@ -# 删除成绩 +# 删除和上传成绩 -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: @@ -32,6 +26,8 @@ def implDeleteMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginRe return result def implUploadMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginResult, musicId:int, levelId:int, achievement:int, dxScore:int) -> str: + '''VERY EARLY STAGE OF UPLOADING SCORES. DO NOT USE THIS FUNCTION.''' + musicData= ({ "musicId": musicId, "level": levelId, @@ -46,7 +42,7 @@ def implUploadMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginRe userAllPatches = { "upsertUserAll": { "userMusicDetailList": [musicData], - "isNewMusicDetailList": "1" # 0为编辑,即可删除掉成绩 + "isNewMusicDetailList": "0" # 0为编辑,即可删除掉成绩 }} result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches) return result diff --git a/ActionUnlockVarious.py b/ActionUnlockVarious.py index afae837..b47fcca 100644 --- a/ActionUnlockVarious.py +++ b/ActionUnlockVarious.py @@ -48,7 +48,7 @@ if __name__ == "__main__": loginResult = apiLogin(currentLoginTimestamp, userId) # Change you want item ID - wantToUnlockItemId = 11 + wantToUnlockItemId = 11624 if loginResult['returnCode'] != 1: logger.info("登录失败") diff --git a/HelperUnlockThing.py b/HelperUnlockThing.py index 1675899..08e13e0 100644 --- a/HelperUnlockThing.py +++ b/HelperUnlockThing.py @@ -1,60 +1,26 @@ # 解锁东西的一个通用的助手,不可独立使用 - -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 +from HelperFullPlay import implFullPlayAction def implUnlockThing(newUserItemList, userId: int, currentLoginTimestamp:int, currentLoginResult) -> str: - ''' - 解锁东西的实现 - ''' - # 上传上去的歌曲记录 - musicDataToBeUploaded = ({ - "musicId": 229, #洗衣机 + musicData= ({ + "musicId": 566, #天火明命 "level": 0, - "playCount": 2, + "playCount": 1, "achievement": 0, "comboStatus": 0, "syncStatus": 0, "deluxscoreMax": 0, "scoreRank": 0, "extNum1": 0 - }) - - currentUserData = implGetUser_("Data", userId) - currentUserData2 = currentUserData['userData'] - - currentUploadUserPlaylogApiResult = apiUploadUserPlaylog(userId, musicDataToBeUploaded, currentUserData2, currentLoginResult['loginId']) - logger.debug(f"上传 UserPlayLog 结果: {currentUploadUserPlaylogApiResult}") - - 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 - - currentUserAll['upsertUserAll']['isNewItemList'] = "1" * len(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: - raise Request500Error("多次尝试后仍无法成功上传 UserAll") - - logger.info("解锁东西:结果:"+ str(currentUserAllResult)) - return currentUserAllResult - +}) + userAllPatches = { + "upsertUserAll": { + "userMusicDetailList": [musicData], + "isNewMusicDetailList": "1", + "userItemList": newUserItemList, + "isNewItemList": "1" * len(newUserItemList) + }} + result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches) + return result