Files
maimaiDX-Api/HelperUploadUserPlayLog.py
2025-07-29 02:27:10 +08:00

154 lines
6.0 KiB
Python

# 上传一个占位用的游玩记录的 API 实现
import rapidjson as json
import pytz
import time
import random
from datetime import datetime
from loguru import logger
from API_TitleServer import apiSDGB
from Config import (
placeId,
placeName,
)
def apiUploadUserPlaylog(
userId: int, musicDataToBeUploaded, currentUserData2, loginId: int
) -> str:
"""
上传一个 UserPlayLog。
注意:成绩为随机的空成绩,只用作占位
返回 Json String。"""
# 构建一个 PlayLog
data = json.dumps(
{
"userId": int(userId),
"userPlaylogList": [
{
"userId": 0,
"orderId": 0,
"playlogId": loginId,
"version": 1051000,
"placeId": placeId,
"placeName": placeName,
"loginDate": int(time.time()), # 似乎和登录timestamp不同
"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(musicDataToBeUploaded["musicId"]),
"level": int(musicDataToBeUploaded["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": currentUserData2["charaSlot"][0],
"characterLevel1": random.randint(1000, 6500),
"characterAwakening1": 5,
"characterId2": currentUserData2["charaSlot"][1],
"characterLevel2": random.randint(1000, 6500),
"characterAwakening2": 5,
"characterId3": currentUserData2["charaSlot"][2],
"characterLevel3": random.randint(1000, 6500),
"characterAwakening3": 5,
"characterId4": currentUserData2["charaSlot"][3],
"characterLevel4": random.randint(1000, 6500),
"characterAwakening4": 5,
"characterId5": currentUserData2["charaSlot"][4],
"characterLevel5": random.randint(1000, 6500),
"characterAwakening5": 5,
"achievement": int(musicDataToBeUploaded["achievement"]),
"deluxscore": int(musicDataToBeUploaded["deluxscoreMax"]),
"scoreRank": int(musicDataToBeUploaded["scoreRank"]),
"maxCombo": 0,
"totalCombo": random.randint(700, 900),
"maxSync": 0,
"totalSync": 0,
"tapCriticalPerfect": 0,
"tapPerfect": 0,
"tapGreat": 0,
"tapGood": 0,
"tapMiss": random.randint(1, 10),
"holdCriticalPerfect": 0,
"holdPerfect": 0,
"holdGreat": 0,
"holdGood": 0,
"holdMiss": random.randint(1, 15),
"slideCriticalPerfect": 0,
"slidePerfect": 0,
"slideGreat": 0,
"slideGood": 0,
"slideMiss": random.randint(1, 15),
"touchCriticalPerfect": 0,
"touchPerfect": 0,
"touchGreat": 0,
"touchGood": 0,
"touchMiss": random.randint(1, 15),
"breakCriticalPerfect": 0,
"breakPerfect": 0,
"breakGreat": 0,
"breakGood": 0,
"breakMiss": random.randint(1, 15),
"isTap": True,
"isHold": True,
"isSlide": True,
"isTouch": True,
"isBreak": True,
"isCriticalDisp": True,
"isFastLateDisp": True,
"fastCount": 0,
"lateCount": 0,
"isAchieveNewRecord": True,
"isDeluxscoreNewRecord": True,
"comboStatus": 0,
"syncStatus": 0,
"isClear": False,
"beforeRating": currentUserData2["playerRating"],
"afterRating": currentUserData2["playerRating"],
"beforeGrade": 0,
"afterGrade": 0,
"afterGradeRank": 1,
"beforeDeluxRating": currentUserData2["playerRating"],
"afterDeluxRating": currentUserData2["playerRating"],
"isPlayTutorial": False,
"isEventMode": False,
"isFreedomMode": False,
"playMode": 0,
"isNewFree": False,
"trialPlayAchievement": -1,
"extNum1": 0,
"extNum2": 0,
"extNum4": 3020,
"extBool1": False,
"extBool2": False,
}
],
}
)
# 发送请求
result = apiSDGB(data, "UploadUserPlaylogListApi", userId)
logger.info("上传游玩记录:结果:" + str(result))
# 返回响应
return result