From 6247c740d2eab6779119b41091e395e678c1427b Mon Sep 17 00:00:00 2001 From: Remik1r3n Date: Sat, 25 Jan 2025 21:42:14 +0800 Subject: [PATCH] LoginBonus improvements (api breaking) --- ActionLoginBonus.py | 83 ++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/ActionLoginBonus.py b/ActionLoginBonus.py index c31ab25..ea1f69b 100644 --- a/ActionLoginBonus.py +++ b/ActionLoginBonus.py @@ -23,6 +23,10 @@ def apiQueryLoginBonus(userId:int) -> str: def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, bonusGenerateMode=2): ''' ログインボーナスデータをアップロードする + bonusGenerateMode は、ログインボーナスを生成する方法を指定します。 + 0 : 何もしない、リセットのみ + 1 : 全部 MAX にする + 2 : 選択したボーナスのみ MAX にする(選択したボーナスはないの場合は False を返す) ''' musicDataToBeUploaded = { "musicId": 229, #ぐるぐるWASH @@ -36,18 +40,28 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b "extNum1": 0 } - # UserData を取得 + # サーバーから UserData を取得 currentUserData = implGetUser_("Data", userId) currentUserData2 = currentUserData['userData'] + # サーバーからログインボーナスデータを取得 + data = json.dumps({ + "userId": int(userId), + "nextIndex": 0, + "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}") # ログインボーナスリストを生成 - finalBonusList = generateLoginBonusList(userId,bonusGenerateMode) - if not finalBonusList: - return False + if not bonusGenerateMode == 0: + finalBonusList = generateLoginBonusList(UserLoginBonusList, bonusGenerateMode) + if not finalBonusList: + return False # UserAllを構築してアップロード retries = 0 @@ -56,9 +70,13 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b currentUserAll = generateFullUserAll(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber) currentUserAll['upsertUserAll']["userMusicDetailList"] = [musicDataToBeUploaded] - currentUserAll['upsertUserAll']['userLoginBonusList'] = finalBonusList + if not bonusGenerateMode == 0: + currentUserAll['upsertUserAll']['userLoginBonusList'] = finalBonusList + currentUserAll['upsertUserAll']['isNewLoginBonusList'] = "0" * len(finalBonusList) + currentUserAll['upsertUserAll']['isNewMusicDetailList'] = "1" - currentUserAll['upsertUserAll']['isNewLoginBonusList'] = "0" * len(finalBonusList) + currentUserAll["upsertUserAll"]["userData"][0]["dailyCourseBonusDate"] = "1970-01-01 08:00:00" # リセット + data = json.dumps(currentUserAll) try: @@ -87,12 +105,13 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b return finalLoginBonusData -def generateLoginBonusList(userId, generateMode=1): +def generateLoginBonusList(UserLoginBonusList, generateMode=1): ''' ログインボーナスリストを生成します。 generateMode は、ログインボーナスを生成する方法を指定します。 - 1: 全部 MAX にする - 2: 選択したボーナスのみ MAX にする(選択したボーナスはないの場合は False を返す) + 1: 選択したボーナスのみ MAX にする(選択したボーナスはないの場合は False を返す) + 2: 全部 MAX にする + ''' # HDDから、ログインボーナスデータを読み込む # アップデートがある場合、このファイルを更新する必要があります @@ -106,15 +125,6 @@ def generateLoginBonusList(userId, generateMode=1): # その全部のボーナスIDをこのリストに追加してください # 必ず最新のデータを使用してください Bonus5Id = [12, 29, 30, 38, 43, 604] - - # サーバーからUserのログインボーナスデータを取得 - data = json.dumps({ - "userId": int(userId), - "nextIndex": 0, - "maxCount": 2000 - }) - UserLoginBonusResponse = json.loads(apiSDGB(data, "GetUserLoginBonusApi", userId)) - UserLoginBonusList = UserLoginBonusResponse['userLoginBonusList'] # UserBonusList から bonusId を取得 UserLoginBonusIdList = [item['bonusId'] for item in UserLoginBonusList] @@ -124,7 +134,21 @@ def generateLoginBonusList(userId, generateMode=1): logger.debug(f"存在しないボーナス: {NonExistingBonuses}") bonusList = [] - if generateMode == 1: # AllMax Mode + if generateMode == 1: #選択したボーナスのみ MAX にする + for item in UserLoginBonusList: + if item['isCurrent'] and not item['isComplete']: + point = 4 if item['bonusId'] in Bonus5Id else 9 + data = { + "bonusId": item['bonusId'], + "point": point, + "isCurrent": True, + "isComplete": False + } + bonusList.append(data) + if len(bonusList) == 0: + logger.warning("このユーザーはログインボーナスを選択していませんから失敗") + return False + elif generateMode == 2: #全部 MAX にする # 存在しているボーナスを追加 for item in UserLoginBonusList: if not item['isComplete']: @@ -152,20 +176,9 @@ def generateLoginBonusList(userId, generateMode=1): "isComplete": False } bonusList.append(data) - elif generateMode == 2: # OnlyCurrent Mode - for item in UserLoginBonusList: - if item['isCurrent'] and not item['isComplete']: - point = 4 if item['bonusId'] in Bonus5Id else 9 - data = { - "bonusId": item['bonusId'], - "point": point, - "isCurrent": True, - "isComplete": False - } - bonusList.append(data) - if len(bonusList) == 0: - logger.warning("このユーザーはログインボーナスを選択していませんから失敗") - return False + else: + logger.error("generateMode は 1 または 2 でなければなりません") + return False logger.debug(f"ログインボーナスリスト: {bonusList}") return bonusList @@ -179,8 +192,8 @@ if __name__ == "__main__": logger.info("登录失败") exit() try: - # Remember to change the mode to 1 if you want to give all bonuses - logger.info(implLoginBonus(userId, currentLoginTimestamp, loginResult, 1)) + # Remember to change the mode!!! + logger.info(implLoginBonus(userId, currentLoginTimestamp, loginResult, 0)) logger.info(apiLogout(currentLoginTimestamp, userId)) except: logger.info(apiLogout(currentLoginTimestamp, userId))