forked from Fragrance/eaquira
feat: unlock music
This commit is contained in:
138
action/UnlockMusic.py
Normal file
138
action/UnlockMusic.py
Normal file
@@ -0,0 +1,138 @@
|
||||
import json
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
import httpx
|
||||
|
||||
from sdgb import MaimaiClient
|
||||
from sdgb.settings import userId, musicData
|
||||
from sdgb.payload import (
|
||||
requestData_UserLogin,
|
||||
requestData_UserLogout,
|
||||
requestData_UserPreview,
|
||||
requestData_UserData,
|
||||
UserAll_payload,
|
||||
)
|
||||
|
||||
maimai = MaimaiClient()
|
||||
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def run_workflow(
|
||||
self: MaimaiClient,
|
||||
musicId: int,
|
||||
unlock_music: bool = True,
|
||||
unlock_master: bool = False,
|
||||
unlock_remaster: bool = False,
|
||||
):
|
||||
|
||||
async with httpx.AsyncClient(verify=False) as client:
|
||||
# Preview 探测
|
||||
|
||||
PreviewResponse = json.loads(
|
||||
await self.call_api(
|
||||
client, "GetUserPreviewApi", requestData_UserPreview, userId
|
||||
)
|
||||
)
|
||||
if PreviewResponse["isLogin"]:
|
||||
logger.error("已在他处登录。")
|
||||
return
|
||||
|
||||
# UserLogin
|
||||
|
||||
LoginResponse = json.loads(
|
||||
await self.call_api(client, "UserLoginApi", requestData_UserLogin, userId)
|
||||
)
|
||||
if LoginResponse["returnCode"] != 1:
|
||||
logger.error("login failed.")
|
||||
return
|
||||
|
||||
loginId = LoginResponse["loginId"]
|
||||
loginDate = LoginResponse["lastLoginDate"]
|
||||
|
||||
# UserData 等
|
||||
|
||||
tasks = [
|
||||
self.call_api(client, "GetUserDataApi", requestData_UserData, userId),
|
||||
self.call_api(client, "GetUserExtendApi", requestData_UserData, userId),
|
||||
self.call_api(client, "GetUserOptionApi", requestData_UserData, userId),
|
||||
self.call_api(client, "GetUserRatingApi", requestData_UserData, userId),
|
||||
self.call_api(client, "GetUserChargeApi", requestData_UserData, userId),
|
||||
self.call_api(client, "GetUserActivityApi", requestData_UserData, userId),
|
||||
self.call_api(
|
||||
client, "GetUserMissionDataApi", requestData_UserData, userId
|
||||
),
|
||||
]
|
||||
|
||||
GeneralUserInfo = await asyncio.gather(*tasks)
|
||||
await asyncio.sleep(60) # 模拟游戏时间
|
||||
|
||||
# UserAll
|
||||
|
||||
requestData_UserAll = UserAll_payload(
|
||||
loginId, loginDate, musicData, GeneralUserInfo
|
||||
)
|
||||
|
||||
userItemList = []
|
||||
|
||||
if unlock_music:
|
||||
userItemList.append(
|
||||
0,
|
||||
{
|
||||
"itemKind": 5, # MUSIC
|
||||
"itemId": musicId,
|
||||
"stock": 1,
|
||||
"isValid": True,
|
||||
},
|
||||
)
|
||||
|
||||
if unlock_master:
|
||||
userItemList.append(
|
||||
0,
|
||||
{
|
||||
"itemKind": 6,
|
||||
"itemId": musicId, # MASTER
|
||||
"stock": 1,
|
||||
"isValid": True,
|
||||
},
|
||||
)
|
||||
|
||||
if unlock_remaster:
|
||||
userItemList.append(
|
||||
{
|
||||
"itemKind": 7,
|
||||
"itemId": musicId, # RE: MASTER
|
||||
"stock": 1,
|
||||
"isValid": True,
|
||||
}
|
||||
)
|
||||
|
||||
requestData_UserAll |= {
|
||||
"userMusicDetailList": [musicData],
|
||||
"isNewMusicDetailList": "1",
|
||||
"userItemList": userItemList,
|
||||
"isNewItemList": len(userItemList) * "1",
|
||||
}
|
||||
|
||||
await self.call_api(client, "UpsertUserAllApi", requestData_UserAll, userId)
|
||||
|
||||
# UserLogout
|
||||
|
||||
await self.call_api(client, "UserLogoutApi", requestData_UserLogout, userId)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(
|
||||
run_workflow(
|
||||
maimai,
|
||||
musicId=834,
|
||||
unlock_music=False,
|
||||
# unlock_master=True,
|
||||
unlock_remaster=True,
|
||||
)
|
||||
)
|
||||
@@ -5,17 +5,18 @@ userId = ...
|
||||
qrCode = ...
|
||||
|
||||
musicData = {
|
||||
"musicId": 417,
|
||||
"level": 3,
|
||||
"musicId": 11538, # Amber Chronicle
|
||||
"level": 0,
|
||||
"playCount": 1,
|
||||
"achievement": 1010000,
|
||||
"comboStatus": 4,
|
||||
"syncStatus": 4,
|
||||
"deluxscoreMax": 2277,
|
||||
"scoreRank": 13,
|
||||
"achievement": 0,
|
||||
"comboStatus": 0,
|
||||
"syncStatus": 0,
|
||||
"deluxscoreMax": 0,
|
||||
"scoreRank": 0,
|
||||
"extNum1": 0,
|
||||
}
|
||||
|
||||
|
||||
regionId = 1
|
||||
regionName = "北京"
|
||||
placeId = 1403
|
||||
|
||||
Reference in New Issue
Block a user