mirror of
https://github.com/N1ngYu/SaltBot.git
synced 2025-09-28 08:42:40 +08:00
Fix
This commit is contained in:
44
Plugin/nonebot_plugin_maimai_helper/leak/authlite.py
Normal file
44
Plugin/nonebot_plugin_maimai_helper/leak/authlite.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import dataclasses
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Util.Padding import pad
|
||||
import base64
|
||||
import urllib3
|
||||
|
||||
def enc(key, iv, data):
|
||||
cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||
encrypted = cipher.encrypt(data)
|
||||
return encrypted
|
||||
|
||||
def dec(key, iv ,data):
|
||||
de_cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||
decrypted = de_cipher.decrypt(data)
|
||||
return decrypted
|
||||
|
||||
def hello():
|
||||
key = bytes([ 47, 63, 106, 111, 43, 34, 76, 38, 92, 67, 114, 57, 40, 61, 107, 71 ])
|
||||
#key = bytes([ 45, 97, 53, 55, 85, 88, 52, 121, 57, 47, 104, 40, 73, 109, 65, 81 ])
|
||||
iv = bytes.fromhex('00000000000000000000000000000000')
|
||||
ua = 'SDGB;Windows/Lite'
|
||||
#ua = 'SDHJ;Windows/Lite'
|
||||
content = bytes([0] * 16) + b'title_id=SDGB&title_ver=1.41&client_id=A63E01C2805&token=205648745'
|
||||
#content = bytes([0] * 16) + b'title_id=SDHJ&title_ver=1.11&client_id=A63E01E1326&token=205648745'
|
||||
header = bytes.fromhex('00000000000000000000000000000000')
|
||||
bytes_data = pad(header + content, 16)
|
||||
encrypted = enc(key, iv, bytes_data)
|
||||
http = urllib3.PoolManager()
|
||||
r = http.request(
|
||||
'POST',
|
||||
'http://at.sys-allnet.cn/net/delivery/instruction',
|
||||
body=encrypted,
|
||||
headers={
|
||||
'User-Agent': ua,
|
||||
'Pragma': 'DFI'
|
||||
}
|
||||
)
|
||||
resp_data = r.data
|
||||
decrypted = dec(key, resp_data[:16], resp_data)
|
||||
decrypted_bytes = decrypted[16:]
|
||||
decrypted_str = decrypted_bytes.decode('UTF-8')
|
||||
print(decrypted_str)
|
||||
|
||||
hello()
|
||||
26
Plugin/nonebot_plugin_maimai_helper/leak/login.py
Normal file
26
Plugin/nonebot_plugin_maimai_helper/leak/login.py
Normal file
@@ -0,0 +1,26 @@
|
||||
import json
|
||||
import pytz
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime
|
||||
|
||||
from settings import userId
|
||||
from settings import regionId, clientId, placeId
|
||||
|
||||
def login(timestamp):
|
||||
data = json.dumps({
|
||||
"userId": userId,
|
||||
"accessCode": "",
|
||||
"regionId": regionId,
|
||||
"placeId": placeId,
|
||||
"clientId": clientId,
|
||||
"dateTime": timestamp,
|
||||
"isContinue": False,
|
||||
"genericFlag": 0,
|
||||
})
|
||||
|
||||
login_result = sdgb_api(data, "UserLoginApi", userId)
|
||||
return login_result
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(login(int(input())))
|
||||
26
Plugin/nonebot_plugin_maimai_helper/leak/logout.py
Normal file
26
Plugin/nonebot_plugin_maimai_helper/leak/logout.py
Normal file
@@ -0,0 +1,26 @@
|
||||
import json
|
||||
import pytz
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime
|
||||
|
||||
from settings import userId
|
||||
from settings import regionId, clientId, placeId
|
||||
|
||||
def logout(timestamp):
|
||||
data = json.dumps({
|
||||
"userId": userId,
|
||||
"accessCode": "",
|
||||
"regionId": regionId,
|
||||
"placeId": placeId,
|
||||
"clientId": clientId,
|
||||
"dateTime": timestamp,
|
||||
"type": 1
|
||||
})
|
||||
|
||||
logout_result = sdgb_api(data, "UserLogoutApi", userId)
|
||||
return logout_result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(logout(int(input())))
|
||||
396
Plugin/nonebot_plugin_maimai_helper/leak/mapstock.py
Normal file
396
Plugin/nonebot_plugin_maimai_helper/leak/mapstock.py
Normal file
@@ -0,0 +1,396 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
import random
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from settings import userId
|
||||
from settings import music_data
|
||||
from settings import regionId, clientId, placeId, regionName, placeName
|
||||
|
||||
from login import login
|
||||
from logout import logout
|
||||
|
||||
def CalcRandom():
|
||||
max = 1037933
|
||||
num2 = random.randint(1, max) * 2069
|
||||
|
||||
num2 += 1024 # specialnum
|
||||
num3 = 0
|
||||
for i in range(0, 32):
|
||||
num3 <<= 1
|
||||
num3 += num2 % 2
|
||||
num2 >>= 1
|
||||
|
||||
return num3
|
||||
|
||||
timestamp = int(time.time()) - 60
|
||||
|
||||
def music():
|
||||
|
||||
music = music_data
|
||||
|
||||
musicId = music['musicId']
|
||||
level = music['level']
|
||||
playCount = music['playCount']
|
||||
achievement = music['achievement']
|
||||
comboStatus = music['comboStatus']
|
||||
syncStatus = music['syncStatus']
|
||||
deluxscoreMax = music['deluxscoreMax']
|
||||
scoreRank = music['scoreRank']
|
||||
extNum1 = music['extNum1']
|
||||
|
||||
print(timestamp)
|
||||
|
||||
# UserLogin
|
||||
|
||||
login_result = json.loads(login(timestamp))
|
||||
print(login_result)
|
||||
|
||||
login_id = login_result['loginId']
|
||||
login_date = login_result['lastLoginDate']
|
||||
|
||||
|
||||
# UserData
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
|
||||
|
||||
# UserLog
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": int(musicId),
|
||||
"level": int(level),
|
||||
"trackNo": 1,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": int(achievement),
|
||||
"deluxscore": int(deluxscoreMax),
|
||||
"scoreRank": int(scoreRank),
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": True,
|
||||
"isDeluxscoreNewRecord": True,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
|
||||
# 获取 User Extend
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
|
||||
|
||||
# 获取 User Option
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
|
||||
|
||||
|
||||
# 获取 User Rating
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
|
||||
|
||||
|
||||
# 获取 User Activity
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
|
||||
|
||||
|
||||
# 获取账号功能票
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
|
||||
|
||||
|
||||
|
||||
|
||||
# UserAll
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"playlogId": login_id,
|
||||
"isEventMode": False,
|
||||
"isFreePlay": False,
|
||||
"upsertUserAll": {
|
||||
"userData": [
|
||||
{
|
||||
"accessCode": "",
|
||||
"userName": userdata['userData']['userName'],
|
||||
"isNetMember": 1,
|
||||
"iconId": userdata['userData']['iconId'],
|
||||
"plateId": userdata['userData']['plateId'],
|
||||
"titleId": userdata['userData']['titleId'],
|
||||
"partnerId": userdata['userData']['partnerId'],
|
||||
"frameId": userdata['userData']['frameId'],
|
||||
"selectMapId": userdata['userData']['selectMapId'],
|
||||
"totalAwake": userdata['userData']['totalAwake'],
|
||||
"gradeRating": userdata['userData']['gradeRating'],
|
||||
"musicRating": userdata['userData']['musicRating'],
|
||||
"playerRating": userdata['userData']['playerRating'],
|
||||
"highestRating": userdata['userData']['highestRating'],
|
||||
"gradeRank": userdata['userData']['gradeRank'],
|
||||
"classRank": userdata['userData']['classRank'],
|
||||
"courseRank": userdata['userData']['courseRank'],
|
||||
"charaSlot": userdata['userData']['charaSlot'],
|
||||
"charaLockSlot": userdata['userData']['charaLockSlot'],
|
||||
"contentBit": userdata['userData']['contentBit'],
|
||||
"playCount": userdata['userData']['playCount'],
|
||||
"currentPlayCount": userdata['userData']['currentPlayCount'],
|
||||
"renameCredit": 0,
|
||||
"mapStock": 99000,
|
||||
"eventWatchedDate": userdata['userData']['eventWatchedDate'],
|
||||
"lastGameId": "SDGB",
|
||||
"lastRomVersion": userdata['userData']['lastRomVersion'],
|
||||
"lastDataVersion": userdata['userData']['lastDataVersion'],
|
||||
"lastLoginDate": login_date,
|
||||
"lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"lastPlayCredit": 1,
|
||||
"lastPlayMode": 0,
|
||||
"lastPlaceId": placeId,
|
||||
"lastPlaceName": placeName,
|
||||
"lastAllNetId": 0,
|
||||
"lastRegionId": regionId,
|
||||
"lastRegionName": regionName,
|
||||
"lastClientId": clientId,
|
||||
"lastCountryCode": "CHN",
|
||||
"lastSelectEMoney": 0,
|
||||
"lastSelectTicket": 0,
|
||||
"lastSelectCourse": userdata['userData']['lastSelectCourse'],
|
||||
"lastCountCourse": 0,
|
||||
"firstGameId": "SDGB",
|
||||
"firstRomVersion": userdata['userData']['firstRomVersion'],
|
||||
"firstDataVersion": userdata['userData']['firstDataVersion'],
|
||||
"firstPlayDate": userdata['userData']['firstPlayDate'],
|
||||
"compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
|
||||
"dailyBonusDate": userdata['userData']['dailyBonusDate'],
|
||||
"dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
|
||||
"lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
|
||||
"lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
|
||||
"playVsCount": 0,
|
||||
"playSyncCount": 0,
|
||||
"winCount": 0,
|
||||
"helpCount": 0,
|
||||
"comboCount": 0,
|
||||
"totalDeluxscore": userdata['userData']['totalDeluxscore'],
|
||||
"totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
|
||||
"totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
|
||||
"totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
|
||||
"totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
|
||||
"totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
|
||||
"totalSync": userdata['userData']['totalSync'],
|
||||
"totalBasicSync": userdata['userData']['totalBasicSync'],
|
||||
"totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
|
||||
"totalExpertSync": userdata['userData']['totalExpertSync'],
|
||||
"totalMasterSync": userdata['userData']['totalMasterSync'],
|
||||
"totalReMasterSync": userdata['userData']['totalReMasterSync'],
|
||||
"totalAchievement": userdata['userData']['totalAchievement'],
|
||||
"totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
|
||||
"totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
|
||||
"totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
|
||||
"totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
|
||||
"totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
|
||||
"playerOldRating": userdata['userData']['playerOldRating'],
|
||||
"playerNewRating": userdata['userData']['playerNewRating'],
|
||||
"banState": 0,
|
||||
"dateTime": timestamp
|
||||
}
|
||||
],
|
||||
"userExtend": [user_extend['userExtend']],
|
||||
"userOption": [user_option['userOption']],
|
||||
"userCharacterList": [],
|
||||
"userGhost": [],
|
||||
"userMapList": [],
|
||||
"userLoginBonusList": [],
|
||||
"userRatingList": [user_rating['userRating']],
|
||||
"userItemList": [],
|
||||
"userMusicDetailList": [
|
||||
{
|
||||
"musicId": musicId,
|
||||
"level": level,
|
||||
"playCount": playCount,
|
||||
"achievement": achievement,
|
||||
"comboStatus": comboStatus,
|
||||
"syncStatus": syncStatus,
|
||||
"deluxscoreMax": deluxscoreMax,
|
||||
"scoreRank": scoreRank,
|
||||
"extNum1": extNum1
|
||||
}
|
||||
],
|
||||
"userCourseList": [],
|
||||
"userFriendSeasonRankingList": [],
|
||||
"userChargeList": user_charge['userChargeList'],
|
||||
"userFavoriteList": [],
|
||||
"userActivityList": [user_activity['userActivity']],
|
||||
"userGamePlaylogList": [
|
||||
{
|
||||
"playlogId": login_id,
|
||||
"version": "1.41.00",
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"playMode": 0,
|
||||
"useTicketId": -1,
|
||||
"playCredit": 1,
|
||||
"playTrack": 1,
|
||||
"clientId": clientId,
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isNewFree": False,
|
||||
"playCount": 0,
|
||||
"playSpecial": CalcRandom(),
|
||||
"playOtherUserId": 0
|
||||
}
|
||||
],
|
||||
"user2pPlaylog": {
|
||||
"userId1": 0,
|
||||
"userId2": 0,
|
||||
"userName1": "",
|
||||
"userName2": "",
|
||||
"regionId": 0,
|
||||
"placeId": 0,
|
||||
"user2pPlaylogDetailList": []
|
||||
},
|
||||
"isNewCharacterList": "",
|
||||
"isNewMapList": "",
|
||||
"isNewLoginBonusList": "",
|
||||
"isNewItemList": "",
|
||||
"isNewMusicDetailList": "1",
|
||||
"isNewCourseList": "0",
|
||||
"isNewFavoriteList": "",
|
||||
"isNewFriendSeasonRankingList": ""
|
||||
}
|
||||
})
|
||||
|
||||
userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
|
||||
return userall_result
|
||||
|
||||
def music_with_retry(max_retries=10): # 这里是重试次数
|
||||
for i in range(max_retries):
|
||||
try:
|
||||
print(music())
|
||||
return logout(timestamp)
|
||||
except ValueError as e:
|
||||
print(f"尝试 {i+1} 失败,错误:{e}")
|
||||
print(logout(timestamp))
|
||||
time.sleep(5) # 等待 5 秒后重试
|
||||
return "重试次数超过限制,乐曲上传失败"
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(music_with_retry())
|
||||
676
Plugin/nonebot_plugin_maimai_helper/leak/music.py
Normal file
676
Plugin/nonebot_plugin_maimai_helper/leak/music.py
Normal file
@@ -0,0 +1,676 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
import random
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
#from settings import userId
|
||||
#from settings import music_data
|
||||
#from settings import regionId, clientId, placeId, regionName, placeName
|
||||
regionId = 1
|
||||
regionName = "北京"
|
||||
placeId = 1403
|
||||
placeName = "插电师电玩北京西单大悦城店"
|
||||
clientId = "A63E01C2805"
|
||||
|
||||
|
||||
from login import login
|
||||
from logout import logout
|
||||
|
||||
def CalcRandom():
|
||||
max = 1037933
|
||||
num2 = random.randint(1, max) * 2069
|
||||
|
||||
num2 += 1024 # specialnum
|
||||
num3 = 0
|
||||
for i in range(0, 32):
|
||||
num3 <<= 1
|
||||
num3 += num2 % 2
|
||||
num2 >>= 1
|
||||
|
||||
return num3
|
||||
|
||||
timestamp = int(time.time()) - 60
|
||||
|
||||
def music(music_data,userId):
|
||||
result_success = {"is_success": False}
|
||||
|
||||
music = music_data
|
||||
|
||||
musicId = music['musicId']
|
||||
level = music['level']
|
||||
playCount = music['playCount']
|
||||
achievement = music['achievement']
|
||||
comboStatus = music['comboStatus']
|
||||
syncStatus = music['syncStatus']
|
||||
deluxscoreMax = music['deluxscoreMax']
|
||||
scoreRank = music['scoreRank']
|
||||
extNum1 = music['extNum1']
|
||||
|
||||
print(timestamp)
|
||||
|
||||
# UserLogin
|
||||
|
||||
login_result = json.loads(login(timestamp))
|
||||
print(login_result)
|
||||
|
||||
login_id = login_result['loginId']
|
||||
login_date = login_result['lastLoginDate']
|
||||
|
||||
|
||||
# UserData
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
|
||||
|
||||
# UserMusic 随机两首
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"nextIndex":random.randint(11000,11500),
|
||||
"maxCount":2
|
||||
})
|
||||
|
||||
music_details = json.loads(sdgb_api(data, "GetUserMusicApi", userId))
|
||||
|
||||
|
||||
# UserLog
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": int(musicId),
|
||||
"level": int(level),
|
||||
"trackNo": 1,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": int(achievement),
|
||||
"deluxscore": int(deluxscoreMax),
|
||||
"scoreRank": int(scoreRank),
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": True,
|
||||
"isDeluxscoreNewRecord": True,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": music_details['userMusicList'][0]['userMusicDetailList'][0]['musicId'],
|
||||
"level": music_details['userMusicList'][0]['userMusicDetailList'][0]['level'],
|
||||
"trackNo": 2,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": music_details['userMusicList'][0]['userMusicDetailList'][0]['achievement'],
|
||||
"deluxscore": music_details['userMusicList'][0]['userMusicDetailList'][0]['deluxscoreMax'],
|
||||
"scoreRank": music_details['userMusicList'][0]['userMusicDetailList'][0]['scoreRank'],
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": False,
|
||||
"isDeluxscoreNewRecord": False,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": music_details['userMusicList'][1]['userMusicDetailList'][0]['musicId'],
|
||||
"level": music_details['userMusicList'][1]['userMusicDetailList'][0]['level'],
|
||||
"trackNo": 3,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": music_details['userMusicList'][1]['userMusicDetailList'][0]['achievement'],
|
||||
"deluxscore": music_details['userMusicList'][1]['userMusicDetailList'][0]['deluxscoreMax'],
|
||||
"scoreRank": music_details['userMusicList'][1]['userMusicDetailList'][0]['scoreRank'],
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": False,
|
||||
"isDeluxscoreNewRecord": False,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
|
||||
# 获取 User Extend
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
|
||||
|
||||
# 获取 User Option
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
|
||||
|
||||
|
||||
# 获取 User Rating
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
|
||||
|
||||
|
||||
# 获取 User Activity
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
|
||||
|
||||
|
||||
# 获取账号功能票
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
|
||||
|
||||
|
||||
|
||||
|
||||
# UserAll
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"playlogId": login_id,
|
||||
"isEventMode": False,
|
||||
"isFreePlay": False,
|
||||
"upsertUserAll": {
|
||||
"userData": [
|
||||
{
|
||||
"accessCode": "",
|
||||
"userName": userdata['userData']['userName'],
|
||||
"isNetMember": 1,
|
||||
"iconId": userdata['userData']['iconId'],
|
||||
"plateId": userdata['userData']['plateId'],
|
||||
"titleId": userdata['userData']['titleId'],
|
||||
"partnerId": userdata['userData']['partnerId'],
|
||||
"frameId": userdata['userData']['frameId'],
|
||||
"selectMapId": userdata['userData']['selectMapId'],
|
||||
"totalAwake": userdata['userData']['totalAwake'],
|
||||
"gradeRating": userdata['userData']['gradeRating'],
|
||||
"musicRating": userdata['userData']['musicRating'],
|
||||
"playerRating": userdata['userData']['playerRating'],
|
||||
"highestRating": userdata['userData']['highestRating'],
|
||||
"gradeRank": userdata['userData']['gradeRank'],
|
||||
"classRank": userdata['userData']['classRank'],
|
||||
"courseRank": userdata['userData']['courseRank'],
|
||||
"charaSlot": userdata['userData']['charaSlot'],
|
||||
"charaLockSlot": userdata['userData']['charaLockSlot'],
|
||||
"contentBit": userdata['userData']['contentBit'],
|
||||
"playCount": userdata['userData']['playCount'],
|
||||
"currentPlayCount": userdata['userData']['currentPlayCount'],
|
||||
"renameCredit": 0,
|
||||
"mapStock": userdata['userData']['mapStock'],
|
||||
"eventWatchedDate": userdata['userData']['eventWatchedDate'],
|
||||
"lastGameId": "SDGB",
|
||||
"lastRomVersion": userdata['userData']['lastRomVersion'],
|
||||
"lastDataVersion": userdata['userData']['lastDataVersion'],
|
||||
"lastLoginDate": login_date,
|
||||
"lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"lastPlayCredit": 1,
|
||||
"lastPlayMode": 0,
|
||||
"lastPlaceId": placeId,
|
||||
"lastPlaceName": placeName,
|
||||
"lastAllNetId": 0,
|
||||
"lastRegionId": regionId,
|
||||
"lastRegionName": regionName,
|
||||
"lastClientId": clientId,
|
||||
"lastCountryCode": "CHN",
|
||||
"lastSelectEMoney": 0,
|
||||
"lastSelectTicket": 0,
|
||||
"lastSelectCourse": userdata['userData']['lastSelectCourse'],
|
||||
"lastCountCourse": 0,
|
||||
"firstGameId": "SDGB",
|
||||
"firstRomVersion": userdata['userData']['firstRomVersion'],
|
||||
"firstDataVersion": userdata['userData']['firstDataVersion'],
|
||||
"firstPlayDate": userdata['userData']['firstPlayDate'],
|
||||
"compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
|
||||
"dailyBonusDate": userdata['userData']['dailyBonusDate'],
|
||||
"dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
|
||||
"lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
|
||||
"lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
|
||||
"playVsCount": 0,
|
||||
"playSyncCount": 0,
|
||||
"winCount": 0,
|
||||
"helpCount": 0,
|
||||
"comboCount": 0,
|
||||
"totalDeluxscore": userdata['userData']['totalDeluxscore'],
|
||||
"totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
|
||||
"totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
|
||||
"totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
|
||||
"totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
|
||||
"totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
|
||||
"totalSync": userdata['userData']['totalSync'],
|
||||
"totalBasicSync": userdata['userData']['totalBasicSync'],
|
||||
"totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
|
||||
"totalExpertSync": userdata['userData']['totalExpertSync'],
|
||||
"totalMasterSync": userdata['userData']['totalMasterSync'],
|
||||
"totalReMasterSync": userdata['userData']['totalReMasterSync'],
|
||||
"totalAchievement": userdata['userData']['totalAchievement'],
|
||||
"totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
|
||||
"totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
|
||||
"totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
|
||||
"totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
|
||||
"totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
|
||||
"playerOldRating": userdata['userData']['playerOldRating'],
|
||||
"playerNewRating": userdata['userData']['playerNewRating'],
|
||||
"banState": 0,
|
||||
"dateTime": timestamp
|
||||
}
|
||||
],
|
||||
"userExtend": [user_extend['userExtend']],
|
||||
"userOption": [user_option['userOption']],
|
||||
"userCharacterList": [],
|
||||
"userGhost": [],
|
||||
"userMapList": [],
|
||||
"userLoginBonusList": [],
|
||||
"userRatingList": [user_rating['userRating']],
|
||||
"userItemList": [],
|
||||
"userMusicDetailList": [
|
||||
{
|
||||
"musicId": musicId,
|
||||
"level": level,
|
||||
"playCount": playCount,
|
||||
"achievement": achievement,
|
||||
"comboStatus": comboStatus,
|
||||
"syncStatus": syncStatus,
|
||||
"deluxscoreMax": deluxscoreMax,
|
||||
"scoreRank": scoreRank,
|
||||
"extNum1": extNum1
|
||||
},
|
||||
{
|
||||
"musicId": music_details['userMusicList'][0]['userMusicDetailList'][0]['musicId'],
|
||||
"level": music_details['userMusicList'][0]['userMusicDetailList'][0]['level'],
|
||||
"playCount": music_details['userMusicList'][0]['userMusicDetailList'][0]['playCount'],
|
||||
"achievement": music_details['userMusicList'][0]['userMusicDetailList'][0]['achievement'],
|
||||
"comboStatus": music_details['userMusicList'][0]['userMusicDetailList'][0]['comboStatus'],
|
||||
"syncStatus": music_details['userMusicList'][0]['userMusicDetailList'][0]['syncStatus'],
|
||||
"deluxscoreMax": music_details['userMusicList'][0]['userMusicDetailList'][0]['deluxscoreMax'],
|
||||
"scoreRank": music_details['userMusicList'][0]['userMusicDetailList'][0]['scoreRank'],
|
||||
"extNum1": music_details['userMusicList'][0]['userMusicDetailList'][0]['extNum1']
|
||||
},
|
||||
{
|
||||
"musicId": music_details['userMusicList'][1]['userMusicDetailList'][0]['musicId'],
|
||||
"level": music_details['userMusicList'][1]['userMusicDetailList'][0]['level'],
|
||||
"playCount": music_details['userMusicList'][1]['userMusicDetailList'][0]['playCount'],
|
||||
"achievement": music_details['userMusicList'][1]['userMusicDetailList'][0]['achievement'],
|
||||
"comboStatus": music_details['userMusicList'][1]['userMusicDetailList'][0]['comboStatus'],
|
||||
"syncStatus": music_details['userMusicList'][1]['userMusicDetailList'][0]['syncStatus'],
|
||||
"deluxscoreMax": music_details['userMusicList'][1]['userMusicDetailList'][0]['deluxscoreMax'],
|
||||
"scoreRank": music_details['userMusicList'][1]['userMusicDetailList'][0]['scoreRank'],
|
||||
"extNum1": music_details['userMusicList'][1]['userMusicDetailList'][0]['extNum1']
|
||||
}
|
||||
],
|
||||
"userCourseList": [],
|
||||
"userFriendSeasonRankingList": [],
|
||||
"userChargeList": user_charge['userChargeList'],
|
||||
"userFavoriteList": [],
|
||||
"userActivityList": [user_activity['userActivity']],
|
||||
"userGamePlaylogList": [
|
||||
{
|
||||
"playlogId": login_id,
|
||||
"version": "1.41.00",
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"playMode": 0,
|
||||
"useTicketId": -1,
|
||||
"playCredit": 1,
|
||||
"playTrack": 3,
|
||||
"clientId": clientId,
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isNewFree": False,
|
||||
"playCount": 0,
|
||||
"playSpecial": CalcRandom(),
|
||||
"playOtherUserId": 0
|
||||
}
|
||||
],
|
||||
"user2pPlaylog": {
|
||||
"userId1": 0,
|
||||
"userId2": 0,
|
||||
"userName1": "",
|
||||
"userName2": "",
|
||||
"regionId": 0,
|
||||
"placeId": 0,
|
||||
"user2pPlaylogDetailList": []
|
||||
},
|
||||
"isNewCharacterList": "",
|
||||
"isNewMapList": "",
|
||||
"isNewLoginBonusList": "",
|
||||
"isNewItemList": "",
|
||||
"isNewMusicDetailList": "100",
|
||||
"isNewCourseList": "0",
|
||||
"isNewFavoriteList": "",
|
||||
"isNewFriendSeasonRankingList": ""
|
||||
}
|
||||
})
|
||||
|
||||
# userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
|
||||
result_success["is_success"] = True
|
||||
return result_success
|
||||
# return userall_result
|
||||
|
||||
|
||||
|
||||
def music_with_retry(max_retries=10): # 这里是重试次数
|
||||
for i in range(max_retries):
|
||||
try:
|
||||
print(music())
|
||||
return logout(timestamp)
|
||||
except ValueError as e:
|
||||
print(f"尝试 {i+1} 失败,错误:{e}")
|
||||
print(logout(timestamp))
|
||||
time.sleep(5) # 等待 5 秒后重试
|
||||
return "重试次数超过限制,乐曲上传失败"
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(music_with_retry())
|
||||
598
Plugin/nonebot_plugin_maimai_helper/leak/musicSort.txt
Normal file
598
Plugin/nonebot_plugin_maimai_helper/leak/musicSort.txt
Normal file
@@ -0,0 +1,598 @@
|
||||
10734
|
||||
10706
|
||||
10702
|
||||
10690
|
||||
10665
|
||||
10641
|
||||
10625
|
||||
10602
|
||||
10593
|
||||
10572
|
||||
10552
|
||||
10536
|
||||
10420
|
||||
10404
|
||||
10363
|
||||
10319
|
||||
10316
|
||||
10315
|
||||
10302
|
||||
10301
|
||||
10288
|
||||
10256
|
||||
10235
|
||||
10202
|
||||
10193
|
||||
10191
|
||||
10190
|
||||
10188
|
||||
10146
|
||||
10145
|
||||
10070
|
||||
01235
|
||||
01085
|
||||
01081
|
||||
01051
|
||||
01020
|
||||
11001
|
||||
11002
|
||||
11003
|
||||
11004
|
||||
11005
|
||||
11006
|
||||
11007
|
||||
11008
|
||||
11009
|
||||
11010
|
||||
11014
|
||||
11015
|
||||
11016
|
||||
11017
|
||||
11018
|
||||
11019
|
||||
11020
|
||||
11021
|
||||
11022
|
||||
11023
|
||||
11024
|
||||
11025
|
||||
11026
|
||||
11027
|
||||
11028
|
||||
11029
|
||||
11030
|
||||
11031
|
||||
11032
|
||||
11034
|
||||
11037
|
||||
11043
|
||||
11044
|
||||
11046
|
||||
11048
|
||||
11049
|
||||
11050
|
||||
11051
|
||||
11052
|
||||
11058
|
||||
11059
|
||||
11060
|
||||
11061
|
||||
11064
|
||||
11065
|
||||
11066
|
||||
11067
|
||||
11069
|
||||
11070
|
||||
11073
|
||||
11075
|
||||
11077
|
||||
11078
|
||||
11080
|
||||
11081
|
||||
11083
|
||||
11084
|
||||
11085
|
||||
11086
|
||||
11087
|
||||
11088
|
||||
11089
|
||||
11090
|
||||
11091
|
||||
11092
|
||||
11093
|
||||
11094
|
||||
11095
|
||||
11096
|
||||
11097
|
||||
11098
|
||||
11099
|
||||
11100
|
||||
11101
|
||||
11102
|
||||
11103
|
||||
11104
|
||||
11105
|
||||
11106
|
||||
11107
|
||||
11108
|
||||
11109
|
||||
11110
|
||||
11111
|
||||
11113
|
||||
11115
|
||||
11121
|
||||
11122
|
||||
11123
|
||||
11124
|
||||
11125
|
||||
11126
|
||||
11127
|
||||
11128
|
||||
11129
|
||||
11130
|
||||
11131
|
||||
11132
|
||||
11133
|
||||
11134
|
||||
11135
|
||||
11136
|
||||
11137
|
||||
11138
|
||||
11139
|
||||
11140
|
||||
11141
|
||||
11142
|
||||
11143
|
||||
11150
|
||||
11152
|
||||
11153
|
||||
11154
|
||||
11155
|
||||
11157
|
||||
11158
|
||||
11159
|
||||
11160
|
||||
11161
|
||||
11162
|
||||
11163
|
||||
11164
|
||||
11165
|
||||
11166
|
||||
11167
|
||||
11168
|
||||
11169
|
||||
11170
|
||||
11171
|
||||
11172
|
||||
11173
|
||||
11174
|
||||
11175
|
||||
11176
|
||||
11177
|
||||
11184
|
||||
11185
|
||||
11186
|
||||
11187
|
||||
11188
|
||||
11189
|
||||
11190
|
||||
11191
|
||||
11192
|
||||
11193
|
||||
11194
|
||||
11195
|
||||
11198
|
||||
11199
|
||||
11200
|
||||
11201
|
||||
11202
|
||||
11204
|
||||
11205
|
||||
11206
|
||||
11207
|
||||
11208
|
||||
11209
|
||||
11210
|
||||
11211
|
||||
11212
|
||||
11213
|
||||
11214
|
||||
11215
|
||||
11216
|
||||
11219
|
||||
11221
|
||||
11222
|
||||
11223
|
||||
11224
|
||||
11225
|
||||
11226
|
||||
11227
|
||||
11228
|
||||
11229
|
||||
11230
|
||||
11231
|
||||
11232
|
||||
11233
|
||||
11234
|
||||
11235
|
||||
11236
|
||||
11237
|
||||
11238
|
||||
11239
|
||||
11240
|
||||
11241
|
||||
11242
|
||||
11243
|
||||
11246
|
||||
11247
|
||||
11248
|
||||
11249
|
||||
11253
|
||||
11255
|
||||
11260
|
||||
11261
|
||||
11262
|
||||
11263
|
||||
11264
|
||||
11265
|
||||
11266
|
||||
11267
|
||||
11268
|
||||
11269
|
||||
11270
|
||||
11271
|
||||
11272
|
||||
11273
|
||||
11274
|
||||
11275
|
||||
11276
|
||||
11277
|
||||
11278
|
||||
11279
|
||||
11280
|
||||
11281
|
||||
11282
|
||||
11283
|
||||
11284
|
||||
11285
|
||||
11286
|
||||
11287
|
||||
11288
|
||||
11289
|
||||
11290
|
||||
11291
|
||||
11292
|
||||
11293
|
||||
11294
|
||||
11295
|
||||
11296
|
||||
11297
|
||||
11298
|
||||
11299
|
||||
11300
|
||||
11301
|
||||
11302
|
||||
11303
|
||||
11304
|
||||
11305
|
||||
11306
|
||||
11307
|
||||
11308
|
||||
11309
|
||||
11310
|
||||
11311
|
||||
11312
|
||||
11313
|
||||
11314
|
||||
11315
|
||||
11316
|
||||
11317
|
||||
11318
|
||||
11319
|
||||
11321
|
||||
11322
|
||||
11323
|
||||
11324
|
||||
11325
|
||||
11327
|
||||
11328
|
||||
11330
|
||||
11331
|
||||
11333
|
||||
11334
|
||||
11335
|
||||
11336
|
||||
11340
|
||||
11341
|
||||
11342
|
||||
11343
|
||||
11344
|
||||
11345
|
||||
11346
|
||||
11347
|
||||
11348
|
||||
11349
|
||||
11350
|
||||
11351
|
||||
11353
|
||||
11354
|
||||
11355
|
||||
11358
|
||||
11359
|
||||
11360
|
||||
11361
|
||||
11362
|
||||
11363
|
||||
11364
|
||||
11365
|
||||
11367
|
||||
11369
|
||||
11370
|
||||
11373
|
||||
11374
|
||||
11375
|
||||
11376
|
||||
11377
|
||||
11378
|
||||
11379
|
||||
11380
|
||||
11381
|
||||
11382
|
||||
11383
|
||||
11384
|
||||
11385
|
||||
11386
|
||||
11387
|
||||
11388
|
||||
11389
|
||||
11390
|
||||
11391
|
||||
11392
|
||||
11393
|
||||
11394
|
||||
11395
|
||||
11396
|
||||
11398
|
||||
11399
|
||||
11400
|
||||
11401
|
||||
11402
|
||||
11404
|
||||
11405
|
||||
11407
|
||||
11408
|
||||
11410
|
||||
11411
|
||||
11412
|
||||
11413
|
||||
11415
|
||||
11418
|
||||
11419
|
||||
11420
|
||||
11421
|
||||
11422
|
||||
11423
|
||||
11424
|
||||
11425
|
||||
11426
|
||||
11427
|
||||
11428
|
||||
11429
|
||||
11430
|
||||
11431
|
||||
11432
|
||||
11433
|
||||
11434
|
||||
11435
|
||||
11436
|
||||
11437
|
||||
11438
|
||||
11439
|
||||
11441
|
||||
11443
|
||||
11444
|
||||
11445
|
||||
11446
|
||||
11447
|
||||
11448
|
||||
11449
|
||||
11450
|
||||
11451
|
||||
11452
|
||||
11453
|
||||
11454
|
||||
11455
|
||||
11456
|
||||
11457
|
||||
11458
|
||||
11459
|
||||
11460
|
||||
11461
|
||||
11462
|
||||
11463
|
||||
11464
|
||||
11465
|
||||
11466
|
||||
11467
|
||||
11468
|
||||
11469
|
||||
11470
|
||||
11471
|
||||
11472
|
||||
11473
|
||||
11474
|
||||
11475
|
||||
11477
|
||||
11478
|
||||
11479
|
||||
11481
|
||||
11482
|
||||
11483
|
||||
11484
|
||||
11485
|
||||
11486
|
||||
11487
|
||||
11488
|
||||
11489
|
||||
11490
|
||||
11491
|
||||
11495
|
||||
11496
|
||||
11497
|
||||
11498
|
||||
11499
|
||||
11500
|
||||
11502
|
||||
11503
|
||||
11504
|
||||
11505
|
||||
11506
|
||||
11507
|
||||
11508
|
||||
11509
|
||||
11510
|
||||
11511
|
||||
11512
|
||||
11513
|
||||
11514
|
||||
11516
|
||||
11517
|
||||
11518
|
||||
11519
|
||||
11520
|
||||
11521
|
||||
11523
|
||||
11524
|
||||
11525
|
||||
11526
|
||||
11527
|
||||
11528
|
||||
11529
|
||||
11530
|
||||
11532
|
||||
11533
|
||||
11534
|
||||
11535
|
||||
11536
|
||||
11537
|
||||
11538
|
||||
11539
|
||||
11540
|
||||
11541
|
||||
11542
|
||||
11543
|
||||
11544
|
||||
11545
|
||||
11546
|
||||
11547
|
||||
11548
|
||||
11549
|
||||
11550
|
||||
11551
|
||||
11552
|
||||
11553
|
||||
11554
|
||||
11555
|
||||
11556
|
||||
11557
|
||||
11558
|
||||
11559
|
||||
11560
|
||||
11561
|
||||
11562
|
||||
11563
|
||||
11564
|
||||
11565
|
||||
11566
|
||||
11567
|
||||
11568
|
||||
11569
|
||||
11570
|
||||
11571
|
||||
11572
|
||||
11573
|
||||
11574
|
||||
11575
|
||||
11576
|
||||
11577
|
||||
11578
|
||||
11580
|
||||
11583
|
||||
11584
|
||||
11585
|
||||
11586
|
||||
11587
|
||||
11588
|
||||
11589
|
||||
11590
|
||||
11591
|
||||
11592
|
||||
11593
|
||||
11594
|
||||
11596
|
||||
11597
|
||||
11598
|
||||
11599
|
||||
11600
|
||||
11601
|
||||
11602
|
||||
11603
|
||||
11604
|
||||
11605
|
||||
11606
|
||||
11607
|
||||
11608
|
||||
11609
|
||||
11610
|
||||
11611
|
||||
11612
|
||||
11613
|
||||
11614
|
||||
11615
|
||||
11616
|
||||
11617
|
||||
11618
|
||||
11619
|
||||
11620
|
||||
11621
|
||||
11622
|
||||
11623
|
||||
11624
|
||||
11625
|
||||
11626
|
||||
11627
|
||||
11628
|
||||
11629
|
||||
11630
|
||||
11631
|
||||
11632
|
||||
11633
|
||||
11635
|
||||
11636
|
||||
11637
|
||||
11638
|
||||
11639
|
||||
11640
|
||||
11641
|
||||
11642
|
||||
11643
|
||||
11645
|
||||
11646
|
||||
11647
|
||||
11648
|
||||
11650
|
||||
11651
|
||||
11652
|
||||
11653
|
||||
11654
|
||||
11655
|
||||
11656
|
||||
11657
|
||||
11658
|
||||
11659
|
||||
11660
|
||||
11661
|
||||
11662
|
||||
11663
|
||||
11664
|
||||
11668
|
||||
464
Plugin/nonebot_plugin_maimai_helper/leak/music_custom.py
Normal file
464
Plugin/nonebot_plugin_maimai_helper/leak/music_custom.py
Normal file
@@ -0,0 +1,464 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
import random
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
regionId = 1
|
||||
regionName = "北京"
|
||||
placeId = 1403
|
||||
placeName = "插电师电玩北京西单大悦城店"
|
||||
clientId = "A63E01C2805"
|
||||
|
||||
|
||||
#from settings import userId
|
||||
#from settings import music_data
|
||||
#from settings import regionId
|
||||
#from settings import regionName
|
||||
#from settings import clientId
|
||||
#from settings import placeId
|
||||
#from settings import placeName
|
||||
|
||||
from login import login
|
||||
from logout import logout
|
||||
|
||||
def CalcRandom():
|
||||
max = 1037933
|
||||
num2 = random.randint(1, max) * 2069
|
||||
|
||||
num2 += 1024 # specialnum
|
||||
num3 = 0
|
||||
for i in range(0, 32):
|
||||
num3 <<= 1
|
||||
num3 += num2 % 2
|
||||
num2 >>= 1
|
||||
|
||||
return num3
|
||||
|
||||
timestamp = int(time.time()) - 60
|
||||
|
||||
def music():
|
||||
music_data = ({
|
||||
"musicId": music_Id,
|
||||
"level": LevelID,
|
||||
"playCount": Play_Count,
|
||||
"achievement": Acc,
|
||||
"comboStatus": Combo,
|
||||
"syncStatus": Sync,
|
||||
"deluxscoreMax": DXsc,
|
||||
"scoreRank": Rank,
|
||||
"extNum1": 0
|
||||
})
|
||||
music = music_data
|
||||
|
||||
musicId = music['musicId']
|
||||
level = music['level']
|
||||
playCount = music['playCount']
|
||||
achievement = music['achievement']
|
||||
comboStatus = music['comboStatus']
|
||||
syncStatus = music['syncStatus']
|
||||
deluxscoreMax = music['deluxscoreMax']
|
||||
scoreRank = music['scoreRank']
|
||||
extNum1 = music['extNum1']
|
||||
|
||||
print(timestamp)
|
||||
|
||||
# UserLogin
|
||||
|
||||
login_result = json.loads(login(timestamp))
|
||||
print(login_result)
|
||||
|
||||
login_id = login_result['loginId']
|
||||
login_date = login_result['lastLoginDate']
|
||||
|
||||
|
||||
# UserData
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
|
||||
|
||||
# UserMusic 随机两首
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"nextIndex":random.randint(11000,11500),
|
||||
"maxCount":2
|
||||
})
|
||||
|
||||
music_details = json.loads(sdgb_api(data, "GetUserMusicApi", userId))
|
||||
|
||||
|
||||
# UserLog
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": int(musicId),
|
||||
"level": int(level),
|
||||
"trackNo": 1,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": int(achievement),
|
||||
"deluxscore": int(deluxscoreMax),
|
||||
"scoreRank": int(scoreRank),
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": isAccNew,
|
||||
"isDeluxscoreNewRecord": isDXCNew,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": Clear_Status,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
|
||||
# 获取 User Extend
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
|
||||
|
||||
# 获取 User Option
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
|
||||
|
||||
|
||||
# 获取 User Rating
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
|
||||
|
||||
|
||||
# 获取 User Activity
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
|
||||
|
||||
|
||||
# 获取账号功能票
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
|
||||
|
||||
|
||||
|
||||
|
||||
# UserAll
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"playlogId": login_id,
|
||||
"isEventMode": False,
|
||||
"isFreePlay": False,
|
||||
"upsertUserAll": {
|
||||
"userData": [
|
||||
{
|
||||
"accessCode": "",
|
||||
"userName": userdata['userData']['userName'],
|
||||
"isNetMember": 1,
|
||||
"iconId": userdata['userData']['iconId'],
|
||||
"plateId": userdata['userData']['plateId'],
|
||||
"titleId": userdata['userData']['titleId'],
|
||||
"partnerId": userdata['userData']['partnerId'],
|
||||
"frameId": userdata['userData']['frameId'],
|
||||
"selectMapId": userdata['userData']['selectMapId'],
|
||||
"totalAwake": userdata['userData']['totalAwake'],
|
||||
"gradeRating": userdata['userData']['gradeRating'],
|
||||
"musicRating": userdata['userData']['musicRating'],
|
||||
"playerRating": userdata['userData']['playerRating'],
|
||||
"highestRating": userdata['userData']['highestRating'],
|
||||
"gradeRank": userdata['userData']['gradeRank'],
|
||||
"classRank": userdata['userData']['classRank'],
|
||||
"courseRank": userdata['userData']['courseRank'],
|
||||
"charaSlot": userdata['userData']['charaSlot'],
|
||||
"charaLockSlot": userdata['userData']['charaLockSlot'],
|
||||
"contentBit": userdata['userData']['contentBit'],
|
||||
"playCount": userdata['userData']['playCount'],
|
||||
"currentPlayCount": userdata['userData']['currentPlayCount'],
|
||||
"renameCredit": 0,
|
||||
"mapStock": userdata['userData']['mapStock'],
|
||||
"eventWatchedDate": userdata['userData']['eventWatchedDate'],
|
||||
"lastGameId": "SDGB",
|
||||
"lastRomVersion": userdata['userData']['lastRomVersion'],
|
||||
"lastDataVersion": userdata['userData']['lastDataVersion'],
|
||||
"lastLoginDate": login_date,
|
||||
"lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"lastPlayCredit": 1,
|
||||
"lastPlayMode": 0,
|
||||
"lastPlaceId": placeId,
|
||||
"lastPlaceName": placeName,
|
||||
"lastAllNetId": 0,
|
||||
"lastRegionId": regionId,
|
||||
"lastRegionName": regionName,
|
||||
"lastClientId": clientId,
|
||||
"lastCountryCode": "CHN",
|
||||
"lastSelectEMoney": 0,
|
||||
"lastSelectTicket": 0,
|
||||
"lastSelectCourse": userdata['userData']['lastSelectCourse'],
|
||||
"lastCountCourse": 0,
|
||||
"firstGameId": "SDGB",
|
||||
"firstRomVersion": userdata['userData']['firstRomVersion'],
|
||||
"firstDataVersion": userdata['userData']['firstDataVersion'],
|
||||
"firstPlayDate": userdata['userData']['firstPlayDate'],
|
||||
"compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
|
||||
"dailyBonusDate": userdata['userData']['dailyBonusDate'],
|
||||
"dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
|
||||
"lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
|
||||
"lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
|
||||
"playVsCount": 0,
|
||||
"playSyncCount": 0,
|
||||
"winCount": 0,
|
||||
"helpCount": 0,
|
||||
"comboCount": 0,
|
||||
"totalDeluxscore": userdata['userData']['totalDeluxscore'],
|
||||
"totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
|
||||
"totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
|
||||
"totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
|
||||
"totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
|
||||
"totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
|
||||
"totalSync": userdata['userData']['totalSync'],
|
||||
"totalBasicSync": userdata['userData']['totalBasicSync'],
|
||||
"totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
|
||||
"totalExpertSync": userdata['userData']['totalExpertSync'],
|
||||
"totalMasterSync": userdata['userData']['totalMasterSync'],
|
||||
"totalReMasterSync": userdata['userData']['totalReMasterSync'],
|
||||
"totalAchievement": userdata['userData']['totalAchievement'],
|
||||
"totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
|
||||
"totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
|
||||
"totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
|
||||
"totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
|
||||
"totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
|
||||
"playerOldRating": userdata['userData']['playerOldRating'],
|
||||
"playerNewRating": userdata['userData']['playerNewRating'],
|
||||
"banState": 0,
|
||||
"dateTime": timestamp
|
||||
}
|
||||
],
|
||||
"userExtend": [user_extend['userExtend']],
|
||||
"userOption": [user_option['userOption']],
|
||||
"userCharacterList": [],
|
||||
"userGhost": [],
|
||||
"userMapList": [],
|
||||
"userLoginBonusList": [],
|
||||
"userRatingList": [user_rating['userRating']],
|
||||
"userItemList": [],
|
||||
"userMusicDetailList": [
|
||||
{
|
||||
"musicId": musicId,
|
||||
"level": level,
|
||||
"playCount": playCount,
|
||||
"achievement": achievement,
|
||||
"comboStatus": comboStatus,
|
||||
"syncStatus": syncStatus,
|
||||
"deluxscoreMax": deluxscoreMax,
|
||||
"scoreRank": scoreRank,
|
||||
"extNum1": extNum1
|
||||
}
|
||||
],
|
||||
"userCourseList": [],
|
||||
"userFriendSeasonRankingList": [],
|
||||
"userChargeList": user_charge['userChargeList'],
|
||||
"userFavoriteList": [],
|
||||
"userActivityList": [user_activity['userActivity']],
|
||||
"userGamePlaylogList": [
|
||||
{
|
||||
"playlogId": login_id,
|
||||
"version": "1.41.00",
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"playMode": 0,
|
||||
"useTicketId": -1,
|
||||
"playCredit": 1,
|
||||
"playTrack": 1,
|
||||
"clientId": clientId,
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isNewFree": False,
|
||||
"playCount": 0,
|
||||
"playSpecial": CalcRandom(),
|
||||
"playOtherUserId": 0
|
||||
}
|
||||
],
|
||||
"user2pPlaylog": {
|
||||
"userId1": 0,
|
||||
"userId2": 0,
|
||||
"userName1": "",
|
||||
"userName2": "",
|
||||
"regionId": 0,
|
||||
"placeId": 0,
|
||||
"user2pPlaylogDetailList": []
|
||||
},
|
||||
"isNewCharacterList": "",
|
||||
"isNewMapList": "",
|
||||
"isNewLoginBonusList": "",
|
||||
"isNewItemList": "",
|
||||
"isNewMusicDetailList": f"{isCover}",
|
||||
"isNewCourseList": "0",
|
||||
"isNewFavoriteList": "",
|
||||
"isNewFriendSeasonRankingList": ""
|
||||
}
|
||||
})
|
||||
|
||||
userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
|
||||
return userall_result
|
||||
|
||||
def music_with_retry(max_retries=10): # 这里是重试次数
|
||||
for i in range(max_retries):
|
||||
try:
|
||||
print(music())
|
||||
return logout(timestamp)
|
||||
except ValueError as e:
|
||||
print(f"尝试 {i+1} 失败,错误:{e}")
|
||||
print(logout(timestamp))
|
||||
time.sleep(5) # 等待 5 秒后重试
|
||||
return "重试次数超过限制,乐曲上传失败"
|
||||
|
||||
|
||||
#zh_cn ver.
|
||||
|
||||
if __name__ == "__main__":
|
||||
userId = int(input("请输入你的userid: "))
|
||||
music_Id = int(input("请输入要发送的乐曲id: "))
|
||||
LevelID = int(input("请输入乐曲难度(0:绿 1:黄 2:红 3:紫 4:白): "))
|
||||
Play_Count = int(input("请输入游玩次数(如果你不知道这啥,请随便输入一些数字,别太离谱就行 比如 \'11\'): "))
|
||||
Acc = int(input("请输入准确率(比如, S:970000 SSS:100000,别用小数点): "))
|
||||
Clear_Status = input("请选择是否通关(True 或者 False,大小写敏感): ")
|
||||
Rank = int(input("请输入等级(0:D 1:C 2:B 3:BB 4:BBB 5:A 6:AA 7:AAA 8:S 9:S+ 10:SS 11:SS+ 12:SSS 13:SSS+): "))
|
||||
Combo = int(input("请输入是否fc/ap(0:None 1:FC 2:FC+ 3:AP 4:AP+): "))
|
||||
Sync = int(input("请输入SyncStatus(0:None 1:FS 2:FS+ 3:FDX 4:FDX+ 5:SyncPlay): "))
|
||||
DXsc = int(input("请输入DX分(别超过这首歌的总DX分): "))
|
||||
isAccNew = input("请选择是否覆盖准确率(True:覆盖 False:不覆盖 大小写敏感): ")
|
||||
isDXCNew = input("请选择是否覆盖DX分(True:覆盖 False:不覆盖 大小写敏感): ")
|
||||
isCover = input("请选择是否删除乐曲信息(1:不删除*一般情况下请选择此项* 0:删除*若想删除成绩请选择此项*): ")
|
||||
WARN = input("最后的警告,如果你检查好了全部数据正确,请按下Enter来确认操作,若没有,请立刻按下Ctrl+C。我不会对任何账号的bs2作出赔偿/道歉。怕别用用别怕封别叫。")
|
||||
LASTWARN = input("最后最后的警告,你的数据真的全都对吗?准确率和等级对的上吗?DX分有没有超过这个难度或者歌曲的总值?如果真的真的确认了,请按下Enter继续操作,否则立刻按下Ctrl+C。")
|
||||
print(music_with_retry())
|
||||
|
||||
#en_us ver.
|
||||
|
||||
#if __name__ == "__main__":
|
||||
# userId = int(input("Please Input Your UserID: "))
|
||||
# music_Id = int(input("Please Input MusicID: "))
|
||||
# LevelID = int(input("Please Input MusicLevel(0BAS 1ADV 2EXP 3MAS 4ReMAS): "))
|
||||
# Play_Count = int(input("Please Input Your PlayCount(if u dont know whats this, just use a random number like \'11\'): "))
|
||||
# Acc = int(input("Please Input ACC(For example, S:970000 SSS:100000,just use num dont use another things): "))
|
||||
# Clear_Status = input("Please Input ClearStatus(True or False,Caps Must): ")
|
||||
# Rank = int(input("Please Input Rank(0:D 1:C 2:B 3:BB 4:BBB 5:A 6:AA 7:AAA 8:S 9:S+ 10:SS 11:SS+ 12:SSS 13:SSS+): "))
|
||||
# Combo = int(input("Please Input ComboStatus(0:None 1:FC 2:FC+ 3:AP 4:AP+): "))
|
||||
# Sync = int(input("Please Input SyncStatus(0:None 1:FS 2:FS+ 3:FDX 4:FDX+ 5:SyncPlay): "))
|
||||
# DXsc = int(input("Please Input DXScore(DONT OVER THE SONG!): "))
|
||||
# isAccNew = input("Please Input AccNewStatus(True:will overwrite or False:will not overwrite): ")
|
||||
# isDXCNew = input("Please Input DXCStatus(True:will overwrite or False:will not overwrite): ")
|
||||
# WARN = input("This is the LAST WARN. If your account has banned, DONT come and ask me. I will NOT pay anything for your bannned account. If you confirmed all data is currect, Press Enter. If NOT, Press Ctrl+C right NOW.")
|
||||
# print(music_with_retry())
|
||||
16
Plugin/nonebot_plugin_maimai_helper/leak/preview.py
Normal file
16
Plugin/nonebot_plugin_maimai_helper/leak/preview.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import json
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from settings import userId
|
||||
|
||||
def preview(userId):
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
preview_result = sdgb_api(data, "GetUserPreviewApi", userId)
|
||||
|
||||
return preview_result
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(preview(userId))
|
||||
106
Plugin/nonebot_plugin_maimai_helper/leak/sdgb.py
Normal file
106
Plugin/nonebot_plugin_maimai_helper/leak/sdgb.py
Normal file
@@ -0,0 +1,106 @@
|
||||
import json
|
||||
import zlib
|
||||
import pytz
|
||||
import base64
|
||||
import hashlib
|
||||
import requests
|
||||
|
||||
from datetime import datetime
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Util.Padding import pad, unpad
|
||||
|
||||
AesKey = "n7bx6:@Fg_:2;5E89Phy7AyIcpxEQ:R@"
|
||||
AesIV = ";;KjR1C3hgB1ovXa"
|
||||
ObfuscateParam = "BEs2D5vW"
|
||||
KeychipID = "A63E-01C28055905"
|
||||
|
||||
class aes_pkcs7(object):
|
||||
def __init__(self, key: str, iv: str):
|
||||
self.key = key.encode('utf-8')
|
||||
self.iv = iv.encode('utf-8')
|
||||
self.mode = AES.MODE_CBC
|
||||
|
||||
def encrypt(self, content):
|
||||
cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
|
||||
content_padding = self.pkcs7padding(content)
|
||||
encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))
|
||||
return encrypt_bytes
|
||||
return base64.b64encode(encrypt_bytes)
|
||||
|
||||
def decrypt(self, content):
|
||||
cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
|
||||
#content = base64.b64decode(content)
|
||||
return cipher.decrypt(content)
|
||||
text = cipher.decrypt(content).decode('utf-8')
|
||||
return self.pkcs7unpadding(text)
|
||||
|
||||
def pkcs7unpadding(self, text):
|
||||
length = len(text)
|
||||
unpadding = ord(text[length - 1])
|
||||
return text[0:length - unpadding]
|
||||
|
||||
def pkcs7padding(self, text):
|
||||
bs = 16
|
||||
length = len(text)
|
||||
bytes_length = len(text.encode('utf-8'))
|
||||
padding_size = length if (bytes_length == length) else bytes_length
|
||||
padding = bs - padding_size % bs
|
||||
padding_text = chr(padding) * padding
|
||||
return text + padding_text
|
||||
|
||||
def get_hash_api(api):
|
||||
return hashlib.md5((api+"MaimaiChn"+ObfuscateParam).encode()).hexdigest()
|
||||
|
||||
def sdgb_api(data, useApi, userId):
|
||||
aes = aes_pkcs7(AesKey,AesIV)
|
||||
data = data
|
||||
data_enc = aes.encrypt(data)
|
||||
data_def = zlib.compress(data_enc)
|
||||
requests.packages.urllib3.disable_warnings()
|
||||
endpoint = "https://maimai-gm.wahlap.com:42081/Maimai2Servlet/"
|
||||
r = requests.post(
|
||||
endpoint + get_hash_api(useApi),
|
||||
headers = {
|
||||
"User-Agent": "%s#%d"%(get_hash_api(useApi), userId),
|
||||
"Content-Type": "application/json",
|
||||
"Mai-Encoding": "1.40",
|
||||
"Accept-Encoding": "",
|
||||
"Charset": "UTF-8",
|
||||
"Content-Encoding": "deflate",
|
||||
"Expect": "100-continue"
|
||||
},
|
||||
data = data_def
|
||||
)
|
||||
resp_def = r.content
|
||||
|
||||
try:
|
||||
resp_enc = zlib.decompress(resp_def)
|
||||
#print(resp_enc)
|
||||
except:
|
||||
resp_enc = resp_def
|
||||
#print("skipped")
|
||||
#print(resp_enc)
|
||||
return unpad(aes.decrypt(resp_enc), 16).decode()
|
||||
|
||||
def qr_api(qr_code):
|
||||
if len(qr_code) > 64:
|
||||
qr_code = qr_code[-64:]
|
||||
time_stamp = datetime.now(pytz.timezone('Asia/Tokyo')).strftime("%y%m%d%H%M%S")
|
||||
auth_key = hashlib.sha256(
|
||||
(KeychipID + time_stamp + "XcW5FW4cPArBXEk4vzKz3CIrMuA5EVVW").encode("UTF-8")).hexdigest().upper()
|
||||
param = {
|
||||
"chipID": KeychipID,
|
||||
"openGameID": "MAID",
|
||||
"key": auth_key,
|
||||
"qrCode": qr_code,
|
||||
"timestamp": time_stamp
|
||||
}
|
||||
headers = {
|
||||
"Contention": "Keep-Alive",
|
||||
"Host": "ai.sys-all.cn",
|
||||
"User-Agent": "WC_AIME_LIB"
|
||||
}
|
||||
res = requests.post("http://ai.sys-allnet.cn/wc_aime/api/get_data", data=json.dumps(param, separators=(',', ':')), headers=headers)
|
||||
# print(param) # debug打印param数据
|
||||
assert res.status_code == 200, "网络错误"
|
||||
return json.loads(res.content)
|
||||
30
Plugin/nonebot_plugin_maimai_helper/leak/settings.py
Normal file
30
Plugin/nonebot_plugin_maimai_helper/leak/settings.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# This file contains the config of the whole project.
|
||||
# DO NOT share your crtical info to others.
|
||||
# Change the file name from .settings.py to settings.py.
|
||||
|
||||
|
||||
# UserId 自行获取
|
||||
userId = 11246129
|
||||
|
||||
# 上传的乐曲成绩
|
||||
# 此成绩将覆盖原有成绩
|
||||
|
||||
music_data = ({
|
||||
"musicId": 834,
|
||||
"level": 4,
|
||||
"playCount": 11,
|
||||
"achievement": 912241,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": 2102,
|
||||
"scoreRank": 5,
|
||||
"extNum1": 0
|
||||
})
|
||||
|
||||
# 机厅信息
|
||||
|
||||
regionId = 1
|
||||
regionName = "北京"
|
||||
placeId = 1403
|
||||
placeName = "插电师电玩北京西单大悦城店"
|
||||
clientId = "A63E01C2805"
|
||||
42
Plugin/nonebot_plugin_maimai_helper/leak/ticket.py
Normal file
42
Plugin/nonebot_plugin_maimai_helper/leak/ticket.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from settings import userId
|
||||
from settings import regionId, clientId, placeId
|
||||
|
||||
from logout import logout
|
||||
from login import login
|
||||
|
||||
def get_ticket():
|
||||
data = json.dumps({
|
||||
"userId": userId,
|
||||
"userCharge": {
|
||||
"chargeId": 6,
|
||||
"stock": 1,
|
||||
"purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
|
||||
"validDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1) + timedelta(days=90)).replace(hour=4, minute=0, second=0).strftime("%Y-%m-%d %H:%M:%S")
|
||||
},
|
||||
"userChargelog": {
|
||||
"chargeId": 6,
|
||||
"price": 4,
|
||||
"purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
|
||||
"placeId": placeId,
|
||||
"regionId": regionId,
|
||||
"clientId": clientId
|
||||
}
|
||||
})
|
||||
|
||||
ticket_result = sdgb_api(data, "UpsertUserChargelogApi", userId)
|
||||
|
||||
return ticket_result
|
||||
|
||||
if __name__ == "__main__":
|
||||
timestamp = int(time.time())
|
||||
print(timestamp)
|
||||
print(login(timestamp))
|
||||
print(get_ticket())
|
||||
print(logout(timestamp))
|
||||
414
Plugin/nonebot_plugin_maimai_helper/leak/unlock.py
Normal file
414
Plugin/nonebot_plugin_maimai_helper/leak/unlock.py
Normal file
@@ -0,0 +1,414 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
import random
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from settings import userId
|
||||
from settings import music_data
|
||||
from settings import regionId
|
||||
from settings import regionName
|
||||
from settings import clientId
|
||||
from settings import placeId
|
||||
from settings import placeName
|
||||
|
||||
from login import login
|
||||
from logout import logout
|
||||
|
||||
def CalcRandom():
|
||||
max = 1037933
|
||||
num2 = random.randint(1, max) * 2069
|
||||
|
||||
num2 += 1024 # specialnum
|
||||
num3 = 0
|
||||
for i in range(0, 32):
|
||||
num3 <<= 1
|
||||
num3 += num2 % 2
|
||||
num2 >>= 1
|
||||
|
||||
return num3
|
||||
|
||||
timestamp = int(time.time()) - 60
|
||||
|
||||
def music(unlock_id):
|
||||
|
||||
music = music_data
|
||||
|
||||
musicId = music['musicId']
|
||||
level = music['level']
|
||||
playCount = music['playCount']
|
||||
achievement = music['achievement']
|
||||
comboStatus = music['comboStatus']
|
||||
syncStatus = music['syncStatus']
|
||||
deluxscoreMax = music['deluxscoreMax']
|
||||
scoreRank = music['scoreRank']
|
||||
extNum1 = music['extNum1']
|
||||
|
||||
print(timestamp)
|
||||
|
||||
# UserLogin
|
||||
|
||||
login_result = json.loads(login(timestamp))
|
||||
print(login_result)
|
||||
|
||||
login_id = login_result['loginId']
|
||||
login_date = login_result['lastLoginDate']
|
||||
|
||||
|
||||
# UserData
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
|
||||
|
||||
# UserLog
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": int(musicId),
|
||||
"level": int(level),
|
||||
"trackNo": 1,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": int(achievement),
|
||||
"deluxscore": int(deluxscoreMax),
|
||||
"scoreRank": int(scoreRank),
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": True,
|
||||
"isDeluxscoreNewRecord": True,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
|
||||
# 获取 User Extend
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
|
||||
|
||||
# 获取 User Option
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
|
||||
|
||||
|
||||
# 获取 User Rating
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
|
||||
|
||||
|
||||
# 获取 User Activity
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
|
||||
|
||||
|
||||
# 获取账号功能票
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
|
||||
|
||||
|
||||
|
||||
|
||||
# UserAll
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"playlogId": login_id,
|
||||
"isEventMode": False,
|
||||
"isFreePlay": False,
|
||||
"upsertUserAll": {
|
||||
"userData": [
|
||||
{
|
||||
"accessCode": "",
|
||||
"userName": userdata['userData']['userName'],
|
||||
"isNetMember": 1,
|
||||
"iconId": userdata['userData']['iconId'],
|
||||
"plateId": userdata['userData']['plateId'],
|
||||
"titleId": userdata['userData']['titleId'],
|
||||
"partnerId": userdata['userData']['partnerId'],
|
||||
"frameId": userdata['userData']['frameId'],
|
||||
"selectMapId": userdata['userData']['selectMapId'],
|
||||
"totalAwake": userdata['userData']['totalAwake'],
|
||||
"gradeRating": userdata['userData']['gradeRating'],
|
||||
"musicRating": userdata['userData']['musicRating'],
|
||||
"playerRating": userdata['userData']['playerRating'],
|
||||
"highestRating": userdata['userData']['highestRating'],
|
||||
"gradeRank": userdata['userData']['gradeRank'],
|
||||
"classRank": userdata['userData']['classRank'],
|
||||
"courseRank": userdata['userData']['courseRank'],
|
||||
"charaSlot": userdata['userData']['charaSlot'],
|
||||
"charaLockSlot": userdata['userData']['charaLockSlot'],
|
||||
"contentBit": userdata['userData']['contentBit'],
|
||||
"playCount": userdata['userData']['playCount'],
|
||||
"currentPlayCount": userdata['userData']['currentPlayCount'],
|
||||
"renameCredit": 0,
|
||||
"mapStock": userdata['userData']['mapStock'],
|
||||
"eventWatchedDate": userdata['userData']['eventWatchedDate'],
|
||||
"lastGameId": "SDGB",
|
||||
"lastRomVersion": userdata['userData']['lastRomVersion'],
|
||||
"lastDataVersion": userdata['userData']['lastDataVersion'],
|
||||
"lastLoginDate": login_date,
|
||||
"lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"lastPlayCredit": 1,
|
||||
"lastPlayMode": 0,
|
||||
"lastPlaceId": placeId,
|
||||
"lastPlaceName": placeName,
|
||||
"lastAllNetId": 0,
|
||||
"lastRegionId": regionId,
|
||||
"lastRegionName": regionName,
|
||||
"lastClientId": clientId,
|
||||
"lastCountryCode": "CHN",
|
||||
"lastSelectEMoney": 0,
|
||||
"lastSelectTicket": 0,
|
||||
"lastSelectCourse": userdata['userData']['lastSelectCourse'],
|
||||
"lastCountCourse": 0,
|
||||
"firstGameId": "SDGB",
|
||||
"firstRomVersion": userdata['userData']['firstRomVersion'],
|
||||
"firstDataVersion": userdata['userData']['firstDataVersion'],
|
||||
"firstPlayDate": userdata['userData']['firstPlayDate'],
|
||||
"compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
|
||||
"dailyBonusDate": userdata['userData']['dailyBonusDate'],
|
||||
"dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
|
||||
"lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
|
||||
"lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
|
||||
"playVsCount": 0,
|
||||
"playSyncCount": 0,
|
||||
"winCount": 0,
|
||||
"helpCount": 0,
|
||||
"comboCount": 0,
|
||||
"totalDeluxscore": userdata['userData']['totalDeluxscore'],
|
||||
"totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
|
||||
"totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
|
||||
"totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
|
||||
"totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
|
||||
"totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
|
||||
"totalSync": userdata['userData']['totalSync'],
|
||||
"totalBasicSync": userdata['userData']['totalBasicSync'],
|
||||
"totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
|
||||
"totalExpertSync": userdata['userData']['totalExpertSync'],
|
||||
"totalMasterSync": userdata['userData']['totalMasterSync'],
|
||||
"totalReMasterSync": userdata['userData']['totalReMasterSync'],
|
||||
"totalAchievement": userdata['userData']['totalAchievement'],
|
||||
"totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
|
||||
"totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
|
||||
"totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
|
||||
"totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
|
||||
"totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
|
||||
"playerOldRating": userdata['userData']['playerOldRating'],
|
||||
"playerNewRating": userdata['userData']['playerNewRating'],
|
||||
"banState": 0,
|
||||
"dateTime": timestamp
|
||||
}
|
||||
],
|
||||
"userExtend": [user_extend['userExtend']],
|
||||
"userOption": [user_option['userOption']],
|
||||
"userCharacterList": [],
|
||||
"userGhost": [],
|
||||
"userMapList": [],
|
||||
"userLoginBonusList": [],
|
||||
"userRatingList": [user_rating['userRating']],
|
||||
"userItemList": [
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": unlock_id,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": unlock_id,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
}
|
||||
],
|
||||
"userMusicDetailList": [
|
||||
{
|
||||
"musicId": musicId,
|
||||
"level": level,
|
||||
"playCount": playCount,
|
||||
"achievement": achievement,
|
||||
"comboStatus": comboStatus,
|
||||
"syncStatus": syncStatus,
|
||||
"deluxscoreMax": deluxscoreMax,
|
||||
"scoreRank": scoreRank,
|
||||
"extNum1": extNum1
|
||||
}
|
||||
],
|
||||
"userCourseList": [],
|
||||
"userFriendSeasonRankingList": [],
|
||||
"userChargeList": user_charge['userChargeList'],
|
||||
"userFavoriteList": [],
|
||||
"userActivityList": [user_activity['userActivity']],
|
||||
"userGamePlaylogList": [
|
||||
{
|
||||
"playlogId": login_id,
|
||||
"version": "1.41.00",
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"playMode": 0,
|
||||
"useTicketId": -1,
|
||||
"playCredit": 1,
|
||||
"playTrack": 1,
|
||||
"clientId": clientId,
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isNewFree": False,
|
||||
"playCount": 0,
|
||||
"playSpecial": CalcRandom(),
|
||||
"playOtherUserId": 0
|
||||
}
|
||||
],
|
||||
"user2pPlaylog": {
|
||||
"userId1": 0,
|
||||
"userId2": 0,
|
||||
"userName1": "",
|
||||
"userName2": "",
|
||||
"regionId": 0,
|
||||
"placeId": 0,
|
||||
"user2pPlaylogDetailList": []
|
||||
},
|
||||
"isNewCharacterList": "",
|
||||
"isNewMapList": "",
|
||||
"isNewLoginBonusList": "",
|
||||
"isNewItemList": 11,
|
||||
"isNewMusicDetailList": "0",
|
||||
"isNewCourseList": "0",
|
||||
"isNewFavoriteList": "",
|
||||
"isNewFriendSeasonRankingList": ""
|
||||
}
|
||||
})
|
||||
|
||||
userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
|
||||
return userall_result
|
||||
|
||||
def music_with_retry(unlock_id,max_retries=10): # 这里是重试次数
|
||||
for i in range(max_retries):
|
||||
try:
|
||||
print(unlock_id)
|
||||
print(music(unlock_id))
|
||||
return logout(timestamp)
|
||||
except ValueError as e:
|
||||
print(f"尝试 {i+1} 失败,错误:{e}")
|
||||
print(logout(timestamp))
|
||||
time.sleep(5) # 等待 5 秒后重试
|
||||
return "重试次数超过限制,乐曲上传失败"
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(music_with_retry(int(input("Input MusicID: "))))
|
||||
7513
Plugin/nonebot_plugin_maimai_helper/leak/unlock_all.py
Normal file
7513
Plugin/nonebot_plugin_maimai_helper/leak/unlock_all.py
Normal file
File diff suppressed because it is too large
Load Diff
429
Plugin/nonebot_plugin_maimai_helper/leak/unlock_custom.py
Normal file
429
Plugin/nonebot_plugin_maimai_helper/leak/unlock_custom.py
Normal file
@@ -0,0 +1,429 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
import random
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
regionId = 1
|
||||
regionName = "北京"
|
||||
placeId = 1403
|
||||
placeName = "插电师电玩北京西单大悦城店"
|
||||
clientId = "A63E01C2805"
|
||||
music_data = ({
|
||||
"musicId": 834,
|
||||
"level": 4,
|
||||
"playCount": 11,
|
||||
"achievement": 912241,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": 2102,
|
||||
"scoreRank": 5,
|
||||
"extNum1": 0
|
||||
})
|
||||
|
||||
|
||||
#from settings import userId
|
||||
#from settings import music_data
|
||||
#from settings import regionId
|
||||
#from settings import regionName
|
||||
#from settings import clientId
|
||||
#from settings import placeId
|
||||
#from settings import placeName
|
||||
|
||||
from login import login
|
||||
from logout import logout
|
||||
|
||||
def CalcRandom():
|
||||
max = 1037933
|
||||
num2 = random.randint(1, max) * 2069
|
||||
|
||||
num2 += 1024 # specialnum
|
||||
num3 = 0
|
||||
for i in range(0, 32):
|
||||
num3 <<= 1
|
||||
num3 += num2 % 2
|
||||
num2 >>= 1
|
||||
|
||||
return num3
|
||||
|
||||
timestamp = int(time.time()) - 60
|
||||
|
||||
def music(unlock_id):
|
||||
|
||||
music = music_data
|
||||
|
||||
musicId = music['musicId']
|
||||
level = music['level']
|
||||
playCount = music['playCount']
|
||||
achievement = music['achievement']
|
||||
comboStatus = music['comboStatus']
|
||||
syncStatus = music['syncStatus']
|
||||
deluxscoreMax = music['deluxscoreMax']
|
||||
scoreRank = music['scoreRank']
|
||||
extNum1 = music['extNum1']
|
||||
|
||||
print(timestamp)
|
||||
|
||||
# UserLogin
|
||||
|
||||
login_result = json.loads(login(timestamp))
|
||||
print(login_result)
|
||||
|
||||
login_id = login_result['loginId']
|
||||
login_date = login_result['lastLoginDate']
|
||||
|
||||
|
||||
# UserData
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
|
||||
|
||||
# UserLog
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": int(musicId),
|
||||
"level": int(level),
|
||||
"trackNo": 1,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": int(achievement),
|
||||
"deluxscore": int(deluxscoreMax),
|
||||
"scoreRank": int(scoreRank),
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": True,
|
||||
"isDeluxscoreNewRecord": True,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
|
||||
# 获取 User Extend
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
|
||||
|
||||
# 获取 User Option
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
|
||||
|
||||
|
||||
# 获取 User Rating
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
|
||||
|
||||
|
||||
# 获取 User Activity
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
|
||||
|
||||
|
||||
# 获取账号功能票
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
|
||||
|
||||
|
||||
|
||||
|
||||
# UserAll
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"playlogId": login_id,
|
||||
"isEventMode": False,
|
||||
"isFreePlay": False,
|
||||
"upsertUserAll": {
|
||||
"userData": [
|
||||
{
|
||||
"accessCode": "",
|
||||
"userName": userdata['userData']['userName'],
|
||||
"isNetMember": 1,
|
||||
"iconId": userdata['userData']['iconId'],
|
||||
"plateId": userdata['userData']['plateId'],
|
||||
"titleId": userdata['userData']['titleId'],
|
||||
"partnerId": userdata['userData']['partnerId'],
|
||||
"frameId": userdata['userData']['frameId'],
|
||||
"selectMapId": userdata['userData']['selectMapId'],
|
||||
"totalAwake": userdata['userData']['totalAwake'],
|
||||
"gradeRating": userdata['userData']['gradeRating'],
|
||||
"musicRating": userdata['userData']['musicRating'],
|
||||
"playerRating": userdata['userData']['playerRating'],
|
||||
"highestRating": userdata['userData']['highestRating'],
|
||||
"gradeRank": userdata['userData']['gradeRank'],
|
||||
"classRank": userdata['userData']['classRank'],
|
||||
"courseRank": userdata['userData']['courseRank'],
|
||||
"charaSlot": userdata['userData']['charaSlot'],
|
||||
"charaLockSlot": userdata['userData']['charaLockSlot'],
|
||||
"contentBit": userdata['userData']['contentBit'],
|
||||
"playCount": userdata['userData']['playCount'],
|
||||
"currentPlayCount": userdata['userData']['currentPlayCount'],
|
||||
"renameCredit": 0,
|
||||
"mapStock": userdata['userData']['mapStock'],
|
||||
"eventWatchedDate": userdata['userData']['eventWatchedDate'],
|
||||
"lastGameId": "SDGB",
|
||||
"lastRomVersion": userdata['userData']['lastRomVersion'],
|
||||
"lastDataVersion": userdata['userData']['lastDataVersion'],
|
||||
"lastLoginDate": login_date,
|
||||
"lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"lastPlayCredit": 1,
|
||||
"lastPlayMode": 0,
|
||||
"lastPlaceId": placeId,
|
||||
"lastPlaceName": placeName,
|
||||
"lastAllNetId": 0,
|
||||
"lastRegionId": regionId,
|
||||
"lastRegionName": regionName,
|
||||
"lastClientId": clientId,
|
||||
"lastCountryCode": "CHN",
|
||||
"lastSelectEMoney": 0,
|
||||
"lastSelectTicket": 0,
|
||||
"lastSelectCourse": userdata['userData']['lastSelectCourse'],
|
||||
"lastCountCourse": 0,
|
||||
"firstGameId": "SDGB",
|
||||
"firstRomVersion": userdata['userData']['firstRomVersion'],
|
||||
"firstDataVersion": userdata['userData']['firstDataVersion'],
|
||||
"firstPlayDate": userdata['userData']['firstPlayDate'],
|
||||
"compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
|
||||
"dailyBonusDate": userdata['userData']['dailyBonusDate'],
|
||||
"dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
|
||||
"lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
|
||||
"lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
|
||||
"playVsCount": 0,
|
||||
"playSyncCount": 0,
|
||||
"winCount": 0,
|
||||
"helpCount": 0,
|
||||
"comboCount": 0,
|
||||
"totalDeluxscore": userdata['userData']['totalDeluxscore'],
|
||||
"totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
|
||||
"totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
|
||||
"totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
|
||||
"totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
|
||||
"totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
|
||||
"totalSync": userdata['userData']['totalSync'],
|
||||
"totalBasicSync": userdata['userData']['totalBasicSync'],
|
||||
"totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
|
||||
"totalExpertSync": userdata['userData']['totalExpertSync'],
|
||||
"totalMasterSync": userdata['userData']['totalMasterSync'],
|
||||
"totalReMasterSync": userdata['userData']['totalReMasterSync'],
|
||||
"totalAchievement": userdata['userData']['totalAchievement'],
|
||||
"totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
|
||||
"totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
|
||||
"totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
|
||||
"totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
|
||||
"totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
|
||||
"playerOldRating": userdata['userData']['playerOldRating'],
|
||||
"playerNewRating": userdata['userData']['playerNewRating'],
|
||||
"banState": 0,
|
||||
"dateTime": timestamp
|
||||
}
|
||||
],
|
||||
"userExtend": [user_extend['userExtend']],
|
||||
"userOption": [user_option['userOption']],
|
||||
"userCharacterList": [],
|
||||
"userGhost": [],
|
||||
"userMapList": [],
|
||||
"userLoginBonusList": [],
|
||||
"userRatingList": [user_rating['userRating']],
|
||||
"userItemList": [
|
||||
{
|
||||
"itemKind": unlock_item,
|
||||
"itemId": unlock_id,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
}
|
||||
],
|
||||
"userMusicDetailList": [
|
||||
{
|
||||
"musicId": musicId,
|
||||
"level": level,
|
||||
"playCount": playCount,
|
||||
"achievement": achievement,
|
||||
"comboStatus": comboStatus,
|
||||
"syncStatus": syncStatus,
|
||||
"deluxscoreMax": deluxscoreMax,
|
||||
"scoreRank": scoreRank,
|
||||
"extNum1": extNum1
|
||||
}
|
||||
],
|
||||
"userCourseList": [],
|
||||
"userFriendSeasonRankingList": [],
|
||||
"userChargeList": user_charge['userChargeList'],
|
||||
"userFavoriteList": [],
|
||||
"userActivityList": [user_activity['userActivity']],
|
||||
"userGamePlaylogList": [
|
||||
{
|
||||
"playlogId": login_id,
|
||||
"version": "1.41.00",
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"playMode": 0,
|
||||
"useTicketId": -1,
|
||||
"playCredit": 1,
|
||||
"playTrack": 1,
|
||||
"clientId": clientId,
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isNewFree": False,
|
||||
"playCount": 0,
|
||||
"playSpecial": CalcRandom(),
|
||||
"playOtherUserId": 0
|
||||
}
|
||||
],
|
||||
"user2pPlaylog": {
|
||||
"userId1": 0,
|
||||
"userId2": 0,
|
||||
"userName1": "",
|
||||
"userName2": "",
|
||||
"regionId": 0,
|
||||
"placeId": 0,
|
||||
"user2pPlaylogDetailList": []
|
||||
},
|
||||
"isNewCharacterList": "",
|
||||
"isNewMapList": "",
|
||||
"isNewLoginBonusList": "",
|
||||
"isNewItemList": 11,
|
||||
"isNewMusicDetailList": "0",
|
||||
"isNewCourseList": "0",
|
||||
"isNewFavoriteList": "",
|
||||
"isNewFriendSeasonRankingList": ""
|
||||
}
|
||||
})
|
||||
|
||||
userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
|
||||
return userall_result
|
||||
|
||||
def music_with_retry(unlock_id,max_retries=10): # 这里是重试次数
|
||||
for i in range(max_retries):
|
||||
try:
|
||||
print(unlock_id)
|
||||
print(music(unlock_id))
|
||||
return logout(timestamp)
|
||||
except ValueError as e:
|
||||
print(f"尝试 {i+1} 失败了... Err: {e}")
|
||||
print(logout(timestamp))
|
||||
time.sleep(5) # 等待 5 秒后重试
|
||||
return "上传失败了...超过了重试次数...请检查网络环境后重试!!"
|
||||
|
||||
if __name__ == "__main__":
|
||||
userId = int(input("请输入userid: "))
|
||||
print("1 - Plate 头像框\n2 - Title 称号\n3 - Icon 头像\n5 - Music 乐曲\n6 - MusicMas 乐曲紫谱\n7 - MusicRes 乐曲白谱\n10 - Partner 搭档\n11 - Frame 背景板")
|
||||
unlock_item = int(input("请输入物品类型: "))
|
||||
print(music_with_retry(int(input("请输入物品id(请在https://collection.hoshino.icu/查询物品id): "))))
|
||||
509
Plugin/nonebot_plugin_maimai_helper/leak/unlock_new.py
Normal file
509
Plugin/nonebot_plugin_maimai_helper/leak/unlock_new.py
Normal file
@@ -0,0 +1,509 @@
|
||||
import json
|
||||
import pytz
|
||||
import time
|
||||
import random
|
||||
|
||||
from sdgb import sdgb_api
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from settings import userId
|
||||
from settings import music_data
|
||||
from settings import regionId
|
||||
from settings import regionName
|
||||
from settings import clientId
|
||||
from settings import placeId
|
||||
from settings import placeName
|
||||
|
||||
from login import login
|
||||
from logout import logout
|
||||
|
||||
def CalcRandom():
|
||||
max = 1037933
|
||||
num2 = random.randint(1, max) * 2069
|
||||
|
||||
num2 += 1024 # specialnum
|
||||
num3 = 0
|
||||
for i in range(0, 32):
|
||||
num3 <<= 1
|
||||
num3 += num2 % 2
|
||||
num2 >>= 1
|
||||
|
||||
return num3
|
||||
|
||||
timestamp = int(time.time()) - 60
|
||||
|
||||
def music():
|
||||
|
||||
music = music_data
|
||||
|
||||
musicId = music['musicId']
|
||||
level = music['level']
|
||||
playCount = music['playCount']
|
||||
achievement = music['achievement']
|
||||
comboStatus = music['comboStatus']
|
||||
syncStatus = music['syncStatus']
|
||||
deluxscoreMax = music['deluxscoreMax']
|
||||
scoreRank = music['scoreRank']
|
||||
extNum1 = music['extNum1']
|
||||
|
||||
print(timestamp)
|
||||
|
||||
# UserLogin
|
||||
|
||||
login_result = json.loads(login(timestamp))
|
||||
print(login_result)
|
||||
|
||||
login_id = login_result['loginId']
|
||||
login_date = login_result['lastLoginDate']
|
||||
|
||||
|
||||
# UserData
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
|
||||
|
||||
# UserLog
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"userPlaylog": {
|
||||
"userId": 0,
|
||||
"orderId": 0,
|
||||
"playlogId": login_id,
|
||||
"version": 1041000,
|
||||
"placeId": placeId,
|
||||
"placeName": placeName,
|
||||
"loginDate": int(time.time()),
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
|
||||
"userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"type": 0,
|
||||
"musicId": int(musicId),
|
||||
"level": int(level),
|
||||
"trackNo": 1,
|
||||
"vsMode": 0,
|
||||
"vsUserName": "",
|
||||
"vsStatus": 0,
|
||||
"vsUserRating": 0,
|
||||
"vsUserAchievement": 0,
|
||||
"vsUserGradeRank": 0,
|
||||
"vsRank": 0,
|
||||
"playerNum": 1,
|
||||
"playedUserId1": 0,
|
||||
"playedUserName1": "",
|
||||
"playedMusicLevel1": 0,
|
||||
"playedUserId2": 0,
|
||||
"playedUserName2": "",
|
||||
"playedMusicLevel2": 0,
|
||||
"playedUserId3": 0,
|
||||
"playedUserName3": "",
|
||||
"playedMusicLevel3": 0,
|
||||
"characterId1": userdata['userData']['charaSlot'][0],
|
||||
"characterLevel1": random.randint(1000,6500),
|
||||
"characterAwakening1": 5,
|
||||
"characterId2": userdata['userData']['charaSlot'][1],
|
||||
"characterLevel2": random.randint(1000,6500),
|
||||
"characterAwakening2": 5,
|
||||
"characterId3": userdata['userData']['charaSlot'][2],
|
||||
"characterLevel3": random.randint(1000,6500),
|
||||
"characterAwakening3": 5,
|
||||
"characterId4": userdata['userData']['charaSlot'][3],
|
||||
"characterLevel4": random.randint(1000,6500),
|
||||
"characterAwakening4": 5,
|
||||
"characterId5": userdata['userData']['charaSlot'][4],
|
||||
"characterLevel5": random.randint(1000,6500),
|
||||
"characterAwakening5": 5,
|
||||
"achievement": int(achievement),
|
||||
"deluxscore": int(deluxscoreMax),
|
||||
"scoreRank": int(scoreRank),
|
||||
"maxCombo": random.randint(400,500),
|
||||
"totalCombo": random.randint(700,900),
|
||||
"maxSync": 0,
|
||||
"totalSync": 0,
|
||||
"tapCriticalPerfect": random.randint(200,400),
|
||||
"tapPerfect": random.randint(100,250),
|
||||
"tapGreat": random.randint(0,10),
|
||||
"tapGood": random.randint(0,10),
|
||||
"tapMiss": random.randint(0,10),
|
||||
"holdCriticalPerfect": random.randint(20,40),
|
||||
"holdPerfect": random.randint(0,15),
|
||||
"holdGreat": 0,
|
||||
"holdGood": 0,
|
||||
"holdMiss": 0,
|
||||
"slideCriticalPerfect": random.randint(34,60),
|
||||
"slidePerfect": 0,
|
||||
"slideGreat": 0,
|
||||
"slideGood": 0,
|
||||
"slideMiss": 0,
|
||||
"touchCriticalPerfect": random.randint(20,70),
|
||||
"touchPerfect": 0,
|
||||
"touchGreat": 0,
|
||||
"touchGood": 0,
|
||||
"touchMiss": 0,
|
||||
"breakCriticalPerfect": random.randint(8,30),
|
||||
"breakPerfect": random.randint(7,10),
|
||||
"breakGreat": 0,
|
||||
"breakGood": 0,
|
||||
"breakMiss": 0,
|
||||
"isTap": True,
|
||||
"isHold": True,
|
||||
"isSlide": True,
|
||||
"isTouch": True,
|
||||
"isBreak": True,
|
||||
"isCriticalDisp": True,
|
||||
"isFastLateDisp": True,
|
||||
"fastCount": random.randint(20,30),
|
||||
"lateCount": random.randint(50,70),
|
||||
"isAchieveNewRecord": True,
|
||||
"isDeluxscoreNewRecord": True,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"isClear": True,
|
||||
'beforeRating': userdata['userData']['playerRating'],
|
||||
'afterRating': userdata['userData']['playerRating'],
|
||||
"beforeGrade": 0,
|
||||
"afterGrade": 0,
|
||||
"afterGradeRank": 2,
|
||||
'beforeDeluxRating': userdata['userData']['playerRating'],
|
||||
'afterDeluxRating': userdata['userData']['playerRating'],
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isFreedomMode": False,
|
||||
"playMode": 0,
|
||||
"isNewFree": False,
|
||||
"trialPlayAchievement": -1,
|
||||
"extNum1": 0,
|
||||
"extNum2": 0,
|
||||
"extNum4": 3020,
|
||||
"extBool1": False
|
||||
}
|
||||
})
|
||||
|
||||
userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
|
||||
|
||||
print(userlog_result)
|
||||
|
||||
|
||||
# 获取 User Extend
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
|
||||
|
||||
# 获取 User Option
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
|
||||
|
||||
|
||||
# 获取 User Rating
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
|
||||
|
||||
|
||||
# 获取 User Activity
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
|
||||
|
||||
|
||||
# 获取账号功能票
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
|
||||
|
||||
|
||||
|
||||
|
||||
# UserAll
|
||||
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"playlogId": login_id,
|
||||
"isEventMode": False,
|
||||
"isFreePlay": False,
|
||||
"upsertUserAll": {
|
||||
"userData": [
|
||||
{
|
||||
"accessCode": "",
|
||||
"userName": userdata['userData']['userName'],
|
||||
"isNetMember": 1,
|
||||
"iconId": userdata['userData']['iconId'],
|
||||
"plateId": userdata['userData']['plateId'],
|
||||
"titleId": userdata['userData']['titleId'],
|
||||
"partnerId": userdata['userData']['partnerId'],
|
||||
"frameId": userdata['userData']['frameId'],
|
||||
"selectMapId": userdata['userData']['selectMapId'],
|
||||
"totalAwake": userdata['userData']['totalAwake'],
|
||||
"gradeRating": userdata['userData']['gradeRating'],
|
||||
"musicRating": userdata['userData']['musicRating'],
|
||||
"playerRating": userdata['userData']['playerRating'],
|
||||
"highestRating": userdata['userData']['highestRating'],
|
||||
"gradeRank": userdata['userData']['gradeRank'],
|
||||
"classRank": userdata['userData']['classRank'],
|
||||
"courseRank": userdata['userData']['courseRank'],
|
||||
"charaSlot": userdata['userData']['charaSlot'],
|
||||
"charaLockSlot": userdata['userData']['charaLockSlot'],
|
||||
"contentBit": userdata['userData']['contentBit'],
|
||||
"playCount": userdata['userData']['playCount'],
|
||||
"currentPlayCount": userdata['userData']['currentPlayCount'],
|
||||
"renameCredit": 0,
|
||||
"mapStock": userdata['userData']['mapStock'],
|
||||
"eventWatchedDate": userdata['userData']['eventWatchedDate'],
|
||||
"lastGameId": "SDGB",
|
||||
"lastRomVersion": userdata['userData']['lastRomVersion'],
|
||||
"lastDataVersion": userdata['userData']['lastDataVersion'],
|
||||
"lastLoginDate": login_date,
|
||||
"lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"lastPlayCredit": 1,
|
||||
"lastPlayMode": 0,
|
||||
"lastPlaceId": placeId,
|
||||
"lastPlaceName": placeName,
|
||||
"lastAllNetId": 0,
|
||||
"lastRegionId": regionId,
|
||||
"lastRegionName": regionName,
|
||||
"lastClientId": clientId,
|
||||
"lastCountryCode": "CHN",
|
||||
"lastSelectEMoney": 0,
|
||||
"lastSelectTicket": 0,
|
||||
"lastSelectCourse": userdata['userData']['lastSelectCourse'],
|
||||
"lastCountCourse": 0,
|
||||
"firstGameId": "SDGB",
|
||||
"firstRomVersion": userdata['userData']['firstRomVersion'],
|
||||
"firstDataVersion": userdata['userData']['firstDataVersion'],
|
||||
"firstPlayDate": userdata['userData']['firstPlayDate'],
|
||||
"compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
|
||||
"dailyBonusDate": userdata['userData']['dailyBonusDate'],
|
||||
"dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
|
||||
"lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
|
||||
"lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
|
||||
"playVsCount": 0,
|
||||
"playSyncCount": 0,
|
||||
"winCount": 0,
|
||||
"helpCount": 0,
|
||||
"comboCount": 0,
|
||||
"totalDeluxscore": userdata['userData']['totalDeluxscore'],
|
||||
"totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
|
||||
"totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
|
||||
"totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
|
||||
"totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
|
||||
"totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
|
||||
"totalSync": userdata['userData']['totalSync'],
|
||||
"totalBasicSync": userdata['userData']['totalBasicSync'],
|
||||
"totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
|
||||
"totalExpertSync": userdata['userData']['totalExpertSync'],
|
||||
"totalMasterSync": userdata['userData']['totalMasterSync'],
|
||||
"totalReMasterSync": userdata['userData']['totalReMasterSync'],
|
||||
"totalAchievement": userdata['userData']['totalAchievement'],
|
||||
"totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
|
||||
"totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
|
||||
"totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
|
||||
"totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
|
||||
"totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
|
||||
"playerOldRating": userdata['userData']['playerOldRating'],
|
||||
"playerNewRating": userdata['userData']['playerNewRating'],
|
||||
"banState": 0,
|
||||
"dateTime": timestamp
|
||||
}
|
||||
],
|
||||
"userExtend": [user_extend['userExtend']],
|
||||
"userOption": [user_option['userOption']],
|
||||
"userCharacterList": [],
|
||||
"userGhost": [],
|
||||
"userMapList": [],
|
||||
"userLoginBonusList": [],
|
||||
"userRatingList": [user_rating['userRating']],
|
||||
"userItemList": [
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11642,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11642,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11643,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11643,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 10242,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 10242,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11618,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11618,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11624,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11624,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11641,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11641,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11640,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11640,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11614,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11614,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 5,
|
||||
"itemId": 11613,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
},
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": 11613,
|
||||
"stock": 1,
|
||||
"isValid": True
|
||||
}
|
||||
],
|
||||
"userMusicDetailList": [
|
||||
{
|
||||
"musicId": musicId,
|
||||
"level": level,
|
||||
"playCount": playCount,
|
||||
"achievement": achievement,
|
||||
"comboStatus": comboStatus,
|
||||
"syncStatus": syncStatus,
|
||||
"deluxscoreMax": deluxscoreMax,
|
||||
"scoreRank": scoreRank,
|
||||
"extNum1": extNum1
|
||||
}
|
||||
],
|
||||
"userCourseList": [],
|
||||
"userFriendSeasonRankingList": [],
|
||||
"userChargeList": user_charge['userChargeList'],
|
||||
"userFavoriteList": [],
|
||||
"userActivityList": [user_activity['userActivity']],
|
||||
"userGamePlaylogList": [
|
||||
{
|
||||
"playlogId": login_id,
|
||||
"version": "1.41.00",
|
||||
"playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
|
||||
"playMode": 0,
|
||||
"useTicketId": -1,
|
||||
"playCredit": 1,
|
||||
"playTrack": 1,
|
||||
"clientId": clientId,
|
||||
"isPlayTutorial": False,
|
||||
"isEventMode": False,
|
||||
"isNewFree": False,
|
||||
"playCount": 0,
|
||||
"playSpecial": CalcRandom(),
|
||||
"playOtherUserId": 0
|
||||
}
|
||||
],
|
||||
"user2pPlaylog": {
|
||||
"userId1": 0,
|
||||
"userId2": 0,
|
||||
"userName1": "",
|
||||
"userName2": "",
|
||||
"regionId": 0,
|
||||
"placeId": 0,
|
||||
"user2pPlaylogDetailList": []
|
||||
},
|
||||
"isNewCharacterList": "",
|
||||
"isNewMapList": "",
|
||||
"isNewLoginBonusList": "",
|
||||
"isNewItemList": 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111,
|
||||
"isNewMusicDetailList": "1",
|
||||
"isNewCourseList": "0",
|
||||
"isNewFavoriteList": "",
|
||||
"isNewFriendSeasonRankingList": ""
|
||||
}
|
||||
})
|
||||
|
||||
userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
|
||||
return userall_result
|
||||
|
||||
def music_with_retry(max_retries=10): # 这里是重试次数
|
||||
for i in range(max_retries):
|
||||
try:
|
||||
print(music())
|
||||
return logout(timestamp)
|
||||
except ValueError as e:
|
||||
print(f"尝试 {i+1} 失败,错误:{e}")
|
||||
print(logout(timestamp))
|
||||
time.sleep(5) # 等待 5 秒后重试
|
||||
return "重试次数超过限制,乐曲上传失败"
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(music_with_retry())
|
||||
47
Plugin/nonebot_plugin_maimai_helper/leak/userdata.py
Normal file
47
Plugin/nonebot_plugin_maimai_helper/leak/userdata.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import json
|
||||
|
||||
from sdgb import sdgb_api
|
||||
|
||||
def login(userId):
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"acsessCode": "",
|
||||
"regionId": 1,
|
||||
"placeId": "0570",
|
||||
"clientId": "A63E01C2805",
|
||||
"dateTime": 1,
|
||||
"isContinue": 'false',
|
||||
"genericFlag": 0,
|
||||
})
|
||||
|
||||
login_result = sdgb_api(data, "UserLoginApi", userId)
|
||||
return login_result
|
||||
|
||||
def logout(userId):
|
||||
data = json.dumps({
|
||||
"userId": int(userId),
|
||||
"accessCode":"",
|
||||
"regionId": 1,
|
||||
"placeId": "0570",
|
||||
"clientId": "A63E01C2805",
|
||||
"dateTime": 1,
|
||||
"type": 1
|
||||
})
|
||||
|
||||
logout_result = sdgb_api(data, "UserLogoutApi", userId)
|
||||
return logout_result
|
||||
|
||||
def userdata(userId):
|
||||
data = json.dumps({
|
||||
"userId": int(userId)
|
||||
})
|
||||
|
||||
userdata_result = sdgb_api(data, "GetUserDataApi", userId)
|
||||
|
||||
return userdata_result
|
||||
|
||||
if __name__ == "__main__":
|
||||
userId = int(input())
|
||||
login(userId)
|
||||
print(userdata(userId))
|
||||
logout(userId)
|
||||
Reference in New Issue
Block a user