Rewrote, Should be usable

This commit is contained in:
Remik1r3n 2025-01-26 23:50:25 +08:00
parent da2458e7f5
commit 7a1300bc6c
4 changed files with 42 additions and 128 deletions

View File

@ -5,14 +5,12 @@ import json
from loguru import logger from loguru import logger
from Static_Settings import * from Static_Settings import *
from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error from API_TitleServer import apiSDGB
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from HelperGetUserThing import implGetUser_ from HelperFullPlay import implFullPlayAction
from HelperUploadUserPlayLog import apiUploadUserPlaylog
from HelperUserAll import generateFullUserAll
def apiQueryLoginBonus(userId:int) -> str: def apiQueryLoginBonus(userId:int) -> str:
'''ログインボーナスを取得する API リクエスター''' '''ログインボーナスを取得する API Requestor'''
data = json.dumps({ data = json.dumps({
"userId": int(userId), "userId": int(userId),
"nextIndex": 0, "nextIndex": 0,
@ -20,16 +18,15 @@ def apiQueryLoginBonus(userId:int) -> str:
}) })
return apiSDGB(data, "GetUserLoginBonusApi", userId) return apiSDGB(data, "GetUserLoginBonusApi", userId)
def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, bonusGenerateMode=2): def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, bonusGenerateMode=1):
''' '''
ログインボーナスデータをアップロードする ログインボーナスデータをアップロードする
bonusGenerateMode ログインボーナスを生成する方法を指定します bonusGenerateMode ログインボーナスを生成する方法を指定します
0 : 何もしないリセットのみ 1: 選択したボーナスのみ MAX にする選択したボーナスはないの場合は False を返す
1 : 全部 MAX にする 2: 全部 MAX にする
2 : 選択したボーナスのみ MAX にする選択したボーナスはないの場合は False を返す
''' '''
musicDataToBeUploaded = { musicData = {
"musicId": 229, #ぐるぐるWASH "musicId": 674, # Magical Flavor
"level": 0, "level": 0,
"playCount": 2, "playCount": 2,
"achievement": 0, "achievement": 0,
@ -39,11 +36,6 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b
"scoreRank": 0, "scoreRank": 0,
"extNum1": 0 "extNum1": 0
} }
# サーバーから UserData を取得
currentUserData = implGetUser_("Data", userId)
currentUserData2 = currentUserData['userData']
# サーバーからログインボーナスデータを取得 # サーバーからログインボーナスデータを取得
data = json.dumps({ data = json.dumps({
"userId": int(userId), "userId": int(userId),
@ -51,61 +43,21 @@ def implLoginBonus(userId: int, currentLoginTimestamp:int, currentLoginResult, b
"maxCount": 2000 "maxCount": 2000
}) })
UserLoginBonusResponse = json.loads(apiSDGB(data, "GetUserLoginBonusApi", userId)) UserLoginBonusResponse = json.loads(apiSDGB(data, "GetUserLoginBonusApi", userId))
# ログインボーナスリストを生成、それから処理してアップロード
UserLoginBonusList = UserLoginBonusResponse['userLoginBonusList'] UserLoginBonusList = UserLoginBonusResponse['userLoginBonusList']
finalBonusList = generateLoginBonusList(UserLoginBonusList, bonusGenerateMode)
# UserPlayLog を構築してアップロード if not finalBonusList:
currentUploadUserPlaylogApiResult = apiUploadUserPlaylog(userId, musicDataToBeUploaded, currentUserData2, currentLoginResult['loginId']) return False #ログインボーナスを選択していないから失敗
logger.debug(f"上传 UserPlayLog 结果: {currentUploadUserPlaylogApiResult}") # UserAllのパッチ
userAllPatches = {
# ログインボーナスリストを生成 "upsertUserAll": {
if not bonusGenerateMode == 0: "userMusicDetailList": [musicData],
finalBonusList = generateLoginBonusList(UserLoginBonusList, bonusGenerateMode) "isNewMusicDetailList": "1", #上書きしない
if not finalBonusList: "userLoginBonusList": finalBonusList,
return False "isNewLoginBonusList": "0" * len(finalBonusList)
}}
# UserAllを構築してアップロード result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches)
retries = 0 return result
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
def generateLoginBonusList(UserLoginBonusList, generateMode=1): def generateLoginBonusList(UserLoginBonusList, generateMode=1):
''' '''
@ -195,7 +147,7 @@ if __name__ == "__main__":
exit() exit()
try: try:
# Remember to change the mode!!! # Remember to change the mode!!!
logger.info(implLoginBonus(userId, currentLoginTimestamp, loginResult, 0)) logger.info(implLoginBonus(userId, currentLoginTimestamp, loginResult, 1))
logger.info(apiLogout(currentLoginTimestamp, userId)) logger.info(apiLogout(currentLoginTimestamp, userId))
except: except:
logger.info(apiLogout(currentLoginTimestamp, userId)) logger.info(apiLogout(currentLoginTimestamp, userId))

View File

@ -1,14 +1,8 @@
# 删除成绩 # 删除和上传成绩
import json
from loguru import logger from loguru import logger
from Static_Settings import * from Static_Settings import *
from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from HelperGetUserThing import implGetUser_
from HelperUploadUserPlayLog import apiUploadUserPlaylog
from HelperUserAll import generateFullUserAll
from HelperFullPlay import implFullPlayAction from HelperFullPlay import implFullPlayAction
def implDeleteMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginResult, musicId:int, levelId:int) -> str: 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 return result
def implUploadMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginResult, musicId:int, levelId:int, achievement:int, dxScore:int) -> str: 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= ({ musicData= ({
"musicId": musicId, "musicId": musicId,
"level": levelId, "level": levelId,
@ -46,7 +42,7 @@ def implUploadMusicRecord(userId: int, currentLoginTimestamp:int, currentLoginRe
userAllPatches = { userAllPatches = {
"upsertUserAll": { "upsertUserAll": {
"userMusicDetailList": [musicData], "userMusicDetailList": [musicData],
"isNewMusicDetailList": "1" # 0为编辑即可删除掉成绩 "isNewMusicDetailList": "0" # 0为编辑即可删除掉成绩
}} }}
result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches) result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches)
return result return result

View File

@ -48,7 +48,7 @@ if __name__ == "__main__":
loginResult = apiLogin(currentLoginTimestamp, userId) loginResult = apiLogin(currentLoginTimestamp, userId)
# Change you want item ID # Change you want item ID
wantToUnlockItemId = 11 wantToUnlockItemId = 11624
if loginResult['returnCode'] != 1: if loginResult['returnCode'] != 1:
logger.info("登录失败") logger.info("登录失败")

View File

@ -1,60 +1,26 @@
# 解锁东西的一个通用的助手,不可独立使用 # 解锁东西的一个通用的助手,不可独立使用
import json
from loguru import logger from loguru import logger
from Static_Settings import * from Static_Settings import *
from API_TitleServer import apiSDGB, calcSpecialNumber, WahlapServerBoomedError, Request500Error from HelperFullPlay import implFullPlayAction
from HelperGetUserThing import implGetUser_
from HelperUploadUserPlayLog import apiUploadUserPlaylog
from HelperUserAll import generateFullUserAll
def implUnlockThing(newUserItemList, userId: int, currentLoginTimestamp:int, currentLoginResult) -> str: def implUnlockThing(newUserItemList, userId: int, currentLoginTimestamp:int, currentLoginResult) -> str:
''' musicData= ({
解锁东西的实现 "musicId": 566, #天火明命
'''
# 上传上去的歌曲记录
musicDataToBeUploaded = ({
"musicId": 229, #洗衣机
"level": 0, "level": 0,
"playCount": 2, "playCount": 1,
"achievement": 0, "achievement": 0,
"comboStatus": 0, "comboStatus": 0,
"syncStatus": 0, "syncStatus": 0,
"deluxscoreMax": 0, "deluxscoreMax": 0,
"scoreRank": 0, "scoreRank": 0,
"extNum1": 0 "extNum1": 0
}) })
userAllPatches = {
currentUserData = implGetUser_("Data", userId) "upsertUserAll": {
currentUserData2 = currentUserData['userData'] "userMusicDetailList": [musicData],
"isNewMusicDetailList": "1",
currentUploadUserPlaylogApiResult = apiUploadUserPlaylog(userId, musicDataToBeUploaded, currentUserData2, currentLoginResult['loginId']) "userItemList": newUserItemList,
logger.debug(f"上传 UserPlayLog 结果: {currentUploadUserPlaylogApiResult}") "isNewItemList": "1" * len(newUserItemList)
}}
retries = 0 result = implFullPlayAction(userId, currentLoginTimestamp, currentLoginResult, musicData, userAllPatches)
while retries < 3: return result
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