mirror of
https://github.com/Remik1r3n/maimaiDX-Api.git
synced 2025-05-20 04:17:28 +08:00
Rewrote, Should be usable
This commit is contained in:
parent
da2458e7f5
commit
7a1300bc6c
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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("登录失败")
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user