Files
SaltBot/nonebot_plugin_maimai_helper/leak/music_custom.py
2025-03-03 20:48:33 +08:00

465 lines
18 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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())