let black do it's magic

This commit is contained in:
Hay1tsme
2023-03-09 11:38:58 -05:00
parent fa7206848c
commit a76bb94eb1
150 changed files with 8474 additions and 4843 deletions

View File

@@ -6,4 +6,4 @@ from titles.wacca.handlers.user_misc import *
from titles.wacca.handlers.user_music import *
from titles.wacca.handlers.user_status import *
from titles.wacca.handlers.user_trial import *
from titles.wacca.handlers.user_vip import *
from titles.wacca.handlers.user_vip import *

View File

@@ -3,6 +3,7 @@ from typing import List, Dict
from titles.wacca.handlers.base import BaseResponse, BaseRequest
from titles.wacca.handlers.helpers import Notice
# ---advertise/GetNews---
class GetNewsResponseV1(BaseResponse):
def __init__(self) -> None:
@@ -19,27 +20,29 @@ class GetNewsResponseV1(BaseResponse):
for notice in self.notices:
note.append(notice.make())
self.params = [
note,
self.copywrightListings,
self.stoppedSongs,
self.stoppedJackets,
self.stoppedMovies,
self.stoppedIcons
self.params = [
note,
self.copywrightListings,
self.stoppedSongs,
self.stoppedJackets,
self.stoppedMovies,
self.stoppedIcons,
]
return super().make()
class GetNewsResponseV2(GetNewsResponseV1):
class GetNewsResponseV2(GetNewsResponseV1):
stoppedProducts: list[int] = []
def make(self) -> Dict:
super().make()
self.params.append(self.stoppedProducts)
return super(GetNewsResponseV1, self).make()
class GetNewsResponseV3(GetNewsResponseV2):
stoppedNavs: list[int] = []
stoppedNavVoices: list[int] = []
@@ -48,18 +51,20 @@ class GetNewsResponseV3(GetNewsResponseV2):
super().make()
self.params.append(self.stoppedNavs)
self.params.append(self.stoppedNavVoices)
return super(GetNewsResponseV1, self).make()
# ---advertise/GetRanking---
class AdvertiseGetRankingRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.resourceVer: int = self.params[0]
class AdvertiseGetRankingResponse(BaseResponse):
def __init__(self) -> None:
super().__init__()
def make(self) -> Dict:
return super().make()
return super().make()

View File

@@ -2,7 +2,8 @@ from typing import Dict, List
from titles.wacca.handlers.helpers import Version
from datetime import datetime
class BaseRequest():
class BaseRequest:
def __init__(self, data: Dict) -> None:
self.requestNo: int = data["requestNo"]
self.appVersion: Version = Version(data["appVersion"])
@@ -10,7 +11,8 @@ class BaseRequest():
self.chipId: str = data["chipId"]
self.params: List = data["params"]
class BaseResponse():
class BaseResponse:
def __init__(self) -> None:
self.status: int = 0
self.message: str = ""
@@ -28,5 +30,5 @@ class BaseResponse():
"maintNoticeTime": self.maintNoticeTime,
"maintNotPlayableTime": self.maintNotPlayableTime,
"maintStartTime": self.maintStartTime,
"params": self.params
"params": self.params,
}

View File

@@ -3,28 +3,33 @@ from enum import Enum
from titles.wacca.const import WaccaConstants
class ShortVersion:
def __init__(self, version: str = "", major = 1, minor = 0, patch = 0) -> None:
def __init__(self, version: str = "", major=1, minor=0, patch=0) -> None:
split = version.split(".")
if len(split) >= 3:
self.major = int(split[0])
self.minor = int(split[1])
self.patch = int(split[2])
else:
else:
self.major = major
self.minor = minor
self.patch = patch
def __str__(self) -> str:
return f"{self.major}.{self.minor}.{self.patch}"
def __int__(self) -> int:
return (self.major * 10000) + (self.minor * 100) + self.patch
def __eq__(self, other: "ShortVersion"):
return self.major == other.major and self.minor == other.minor and self.patch == other.patch
return (
self.major == other.major
and self.minor == other.minor
and self.patch == other.patch
)
def __gt__(self, other: "ShortVersion"):
if self.major > other.major:
return True
@@ -34,9 +39,9 @@ class ShortVersion:
elif self.minor == other.minor:
if self.patch > other.patch:
return True
return False
def __ge__(self, other: "ShortVersion"):
if self.major > other.major:
return True
@@ -46,9 +51,9 @@ class ShortVersion:
elif self.minor == other.minor:
if self.patch > other.patch or self.patch == other.patch:
return True
return False
def __lt__(self, other: "ShortVersion"):
if self.major < other.major:
return True
@@ -58,9 +63,9 @@ class ShortVersion:
elif self.minor == other.minor:
if self.patch < other.patch:
return True
return False
def __le__(self, other: "ShortVersion"):
if self.major < other.major:
return True
@@ -70,39 +75,45 @@ class ShortVersion:
elif self.minor == other.minor:
if self.patch < other.patch or self.patch == other.patch:
return True
return False
class Version(ShortVersion):
def __init__(self, version = "", major = 1, minor = 0, patch = 0, country = "JPN", build = 0, role = "C") -> None:
def __init__(
self, version="", major=1, minor=0, patch=0, country="JPN", build=0, role="C"
) -> None:
super().__init__(version, major, minor, patch)
split = version.split(".")
if len(split) >= 6:
self.country: str = split[3]
self.country: str = split[3]
self.build = int(split[4])
self.role: str = split[5]
else:
self.country = country
self.build = build
self.role = role
def __str__(self) -> str:
return f"{self.major}.{self.minor}.{self.patch}.{self.country}.{self.role}.{self.build}"
class HousingInfo:
"""
1 is lan install role, 2 is country
"""
id: int = 0
val: str = ""
def __init__(self, id: int = 0, val: str = "") -> None:
self.id = id
self.val = val
def make(self) -> List:
return [ self.id, self.val ]
return [self.id, self.val]
class Notice:
name: str = ""
@@ -116,25 +127,44 @@ class Notice:
endTime: int = 0
voiceline: int = 0
def __init__(self, name: str = "", title: str = "", message: str = "", start: int = 0, end: int = 0) -> None:
def __init__(
self,
name: str = "",
title: str = "",
message: str = "",
start: int = 0,
end: int = 0,
) -> None:
self.name = name
self.title = title
self.message = message
self.startTime = start
self.endTime = end
def make(self) -> List:
return [ self.name, self.title, self.message, self.unknown3, self.unknown4, int(self.showTitleScreen),
int(self.showWelcomeScreen), self.startTime, self.endTime, self.voiceline]
return [
self.name,
self.title,
self.message,
self.unknown3,
self.unknown4,
int(self.showTitleScreen),
int(self.showWelcomeScreen),
self.startTime,
self.endTime,
self.voiceline,
]
class UserOption:
def __init__(self, opt_id: int = 0, opt_val: Any = 0) -> None:
self.opt_id = opt_id
self.opt_val = opt_val
def make(self) -> List:
return [self.opt_id, self.opt_val]
class UserStatusV1:
def __init__(self) -> None:
self.userId: int = 0
@@ -160,19 +190,20 @@ class UserStatusV1:
self.useCount,
]
class UserStatusV2(UserStatusV1):
def __init__(self) -> None:
super().__init__()
super().__init__()
self.loginDays: int = 0
self.loginConsecutive: int = 0
self.loginConsecutiveDays: int = 0
self.loginsToday: int = 0
self.rating: int = 0
self.rating: int = 0
self.vipExpireTime: int = 0
def make(self) -> List:
ret = super().make()
ret.append(self.loginDays)
ret.append(self.loginConsecutive)
ret.append(self.loginConsecutiveDays)
@@ -182,17 +213,20 @@ class UserStatusV2(UserStatusV1):
return ret
class ProfileStatus(Enum):
ProfileGood = 0
ProfileRegister = 1
ProfileInUse = 2
ProfileWrongRegion = 3
class PlayVersionStatus(Enum):
VersionGood = 0
VersionTooNew = 1
VersionUpgrade = 2
class PlayModeCounts:
seasonId: int = 0
modeId: int = 0
@@ -202,13 +236,10 @@ class PlayModeCounts:
self.seasonId = seasonId
self.modeId = modeId
self.playNum = playNum
def make(self) -> List:
return [
self.seasonId,
self.modeId,
self.playNum
]
return [self.seasonId, self.modeId, self.playNum]
class SongUnlock:
songId: int = 0
@@ -216,76 +247,72 @@ class SongUnlock:
whenAppeared: int = 0
whenUnlocked: int = 0
def __init__(self, song_id: int = 0, difficulty: int = 1, whenAppered: int = 0, whenUnlocked: int = 0) -> None:
def __init__(
self,
song_id: int = 0,
difficulty: int = 1,
whenAppered: int = 0,
whenUnlocked: int = 0,
) -> None:
self.songId = song_id
self.difficulty = difficulty
self.whenAppeared = whenAppered
self.whenUnlocked = whenUnlocked
def make(self) -> List:
return [
self.songId,
self.difficulty,
self.whenAppeared,
self.whenUnlocked
]
return [self.songId, self.difficulty, self.whenAppeared, self.whenUnlocked]
class GenericItemRecv:
def __init__(self, item_type: int = 1, item_id: int = 1, quantity: int = 1) -> None:
self.itemId = item_id
self.itemType = item_type
self.quantity = quantity
def make(self) -> List:
return [ self.itemType, self.itemId, self.quantity ]
return [self.itemType, self.itemId, self.quantity]
class GenericItemSend:
def __init__(self, itemId: int, itemType: int, whenAcquired: int) -> None:
self.itemId = itemId
self.itemType = itemType
self.whenAcquired = whenAcquired
def make(self) -> List:
return [
self.itemId,
self.itemType,
self.whenAcquired
]
return [self.itemId, self.itemType, self.whenAcquired]
class IconItem(GenericItemSend):
uses: int = 0
def __init__(self, itemId: int, itemType: int, uses: int, whenAcquired: int) -> None:
def __init__(
self, itemId: int, itemType: int, uses: int, whenAcquired: int
) -> None:
super().__init__(itemId, itemType, whenAcquired)
self.uses = uses
def make(self) -> List:
return [
self.itemId,
self.itemType,
self.uses,
self.whenAcquired
]
return [self.itemId, self.itemType, self.uses, self.whenAcquired]
class TrophyItem:
trophyId: int = 0
trophyId: int = 0
season: int = 1
progress: int = 0
badgeType: int = 0
def __init__(self, trophyId: int, season: int, progress: int, badgeType: int) -> None:
def __init__(
self, trophyId: int, season: int, progress: int, badgeType: int
) -> None:
self.trophyId = trophyId
self.season = season
self.season = season
self.progress = progress
self.badgeType = badgeType
def make(self) -> List:
return [
self.trophyId,
self.season,
self.progress,
self.badgeType
]
return [self.trophyId, self.season, self.progress, self.badgeType]
class TicketItem:
userTicketId: int = 0
@@ -296,18 +323,17 @@ class TicketItem:
self.userTicketId = userTicketId
self.ticketId = ticketId
self.whenExpires = whenExpires
def make(self) -> List:
return [
self.userTicketId,
self.ticketId,
self.whenExpires
]
return [self.userTicketId, self.ticketId, self.whenExpires]
class NavigatorItem(IconItem):
usesToday: int = 0
def __init__(self, itemId: int, itemType: int, whenAcquired: int, uses: int, usesToday: int) -> None:
def __init__(
self, itemId: int, itemType: int, whenAcquired: int, uses: int, usesToday: int
) -> None:
super().__init__(itemId, itemType, uses, whenAcquired)
self.usesToday = usesToday
@@ -317,9 +343,10 @@ class NavigatorItem(IconItem):
self.itemType,
self.whenAcquired,
self.uses,
self.usesToday
self.usesToday,
]
class SkillItem:
skill_type: int
level: int
@@ -327,12 +354,8 @@ class SkillItem:
badge: int
def make(self) -> List:
return [
self.skill_type,
self.level,
self.flag,
self.badge
]
return [self.skill_type, self.level, self.flag, self.badge]
class UserItemInfoV1:
def __init__(self) -> None:
@@ -383,6 +406,7 @@ class UserItemInfoV1:
sounds,
]
class UserItemInfoV2(UserItemInfoV1):
def __init__(self) -> None:
super().__init__()
@@ -391,18 +415,19 @@ class UserItemInfoV2(UserItemInfoV1):
def make(self) -> List:
ret = super().make()
plates = []
plates = []
navs = []
for x in self.navigators:
navs.append(x.make())
for x in self.plates:
plates.append(x.make())
ret.append(navs)
ret.append(plates)
return ret
class UserItemInfoV3(UserItemInfoV2):
def __init__(self) -> None:
super().__init__()
@@ -414,29 +439,44 @@ class UserItemInfoV3(UserItemInfoV2):
for x in self.touchEffect:
effect.append(x.make())
ret.append(effect)
return ret
class SongDetailClearCounts:
def __init__(self, play_ct: int = 0, clear_ct: int = 0, ml_ct: int = 0, fc_ct: int = 0,
am_ct: int = 0, counts: Optional[List[int]] = None) -> None:
class SongDetailClearCounts:
def __init__(
self,
play_ct: int = 0,
clear_ct: int = 0,
ml_ct: int = 0,
fc_ct: int = 0,
am_ct: int = 0,
counts: Optional[List[int]] = None,
) -> None:
if counts is None:
self.playCt = play_ct
self.clearCt = clear_ct
self.misslessCt = ml_ct
self.fullComboCt = fc_ct
self.allMarvelousCt = am_ct
else:
self.playCt = counts[0]
self.clearCt = counts[1]
self.misslessCt = counts[2]
self.fullComboCt = counts[3]
self.allMarvelousCt = counts[4]
def make(self) -> List:
return [self.playCt, self.clearCt, self.misslessCt, self.fullComboCt, self.allMarvelousCt]
return [
self.playCt,
self.clearCt,
self.misslessCt,
self.fullComboCt,
self.allMarvelousCt,
]
class SongDetailGradeCountsV1:
dCt: int
@@ -450,8 +490,20 @@ class SongDetailGradeCountsV1:
sssCt: int
masterCt: int
def __init__(self, d: int = 0, c: int = 0, b: int = 0, a: int = 0, aa: int = 0, aaa: int = 0, s: int = 0,
ss: int = 0, sss: int = 0, master: int = 0, counts: Optional[List[int]] = None) -> None:
def __init__(
self,
d: int = 0,
c: int = 0,
b: int = 0,
a: int = 0,
aa: int = 0,
aaa: int = 0,
s: int = 0,
ss: int = 0,
sss: int = 0,
master: int = 0,
counts: Optional[List[int]] = None,
) -> None:
if counts is None:
self.dCt = d
self.cCt = c
@@ -463,7 +515,7 @@ class SongDetailGradeCountsV1:
self.ssCt = ss
self.sssCt = sss
self.masterCt = master
else:
self.dCt = counts[0]
self.cCt = counts[1]
@@ -474,24 +526,51 @@ class SongDetailGradeCountsV1:
self.sCt = counts[6]
self.ssCt = counts[7]
self.sssCt = counts[8]
self.masterCt =counts[9]
self.masterCt = counts[9]
def make(self) -> List:
return [self.dCt, self.cCt, self.bCt, self.aCt, self.aaCt, self.aaaCt, self.sCt, self.ssCt, self.sssCt, self.masterCt]
return [
self.dCt,
self.cCt,
self.bCt,
self.aCt,
self.aaCt,
self.aaaCt,
self.sCt,
self.ssCt,
self.sssCt,
self.masterCt,
]
class SongDetailGradeCountsV2(SongDetailGradeCountsV1):
spCt: int
sspCt: int
ssspCt: int
def __init__(self, d: int = 0, c: int = 0, b: int = 0, a: int = 0, aa: int = 0, aaa: int = 0, s: int = 0,
ss: int = 0, sss: int = 0, master: int = 0, sp: int = 0, ssp: int = 0, sssp: int = 0, counts: Optional[List[int]] = None) -> None:
def __init__(
self,
d: int = 0,
c: int = 0,
b: int = 0,
a: int = 0,
aa: int = 0,
aaa: int = 0,
s: int = 0,
ss: int = 0,
sss: int = 0,
master: int = 0,
sp: int = 0,
ssp: int = 0,
sssp: int = 0,
counts: Optional[List[int]] = None,
) -> None:
super().__init__(d, c, b, a, aa, aaa, s, ss, sss, master, counts)
if counts is None:
self.spCt = sp
self.sspCt = ssp
self.ssspCt = sssp
else:
self.spCt = counts[10]
self.sspCt = counts[11]
@@ -500,6 +579,7 @@ class SongDetailGradeCountsV2(SongDetailGradeCountsV1):
def make(self) -> List:
return super().make() + [self.spCt, self.sspCt, self.ssspCt]
class BestScoreDetailV1:
songId: int = 0
difficulty: int = 1
@@ -527,49 +607,59 @@ class BestScoreDetailV1:
self.bestCombo,
self.lowestMissCtMaybe,
self.isUnlock,
self.rating
self.rating,
]
class BestScoreDetailV2(BestScoreDetailV1):
gradeCounts: SongDetailGradeCountsV2 = SongDetailGradeCountsV2()
class SongUpdateJudgementCounts:
marvCt: int
greatCt: int
goodCt: int
missCt: int
def __init__(self, marvs: int = 0, greats: int = 0, goods: int = 0, misses: int = 0) -> None:
def __init__(
self, marvs: int = 0, greats: int = 0, goods: int = 0, misses: int = 0
) -> None:
self.marvCt = marvs
self.greatCt = greats
self.goodCt = goods
self.missCt = misses
def make(self) -> List:
return [self.marvCt, self.greatCt, self.goodCt, self.missCt]
class SongUpdateDetailV1:
def __init__(self, data: List) -> None:
def __init__(self, data: List) -> None:
if data is not None:
self.songId = data[0]
self.difficulty = data[1]
self.level = data[2]
self.score = data[3]
self.judgements = SongUpdateJudgementCounts(data[4][0], data[4][1], data[4][2], data[4][3])
self.judgements = SongUpdateJudgementCounts(
data[4][0], data[4][1], data[4][2], data[4][3]
)
self.maxCombo = data[5]
self.grade = WaccaConstants.GRADES(data[6]) # .value to get number, .name to get letter
self.grade = WaccaConstants.GRADES(
data[6]
) # .value to get number, .name to get letter
self.flagCleared = False if data[7] == 0 else True
self.flagMissless = False if data[8] == 0 else True
self.flagFullcombo = False if data[9] == 0 else True
self.flagAllMarvelous = False if data[10] == 0 else True
self.flagGiveUp = False if data[11] == 0 else True
self.skillPt = data[12]
self.skillPt = data[12]
self.fastCt = 0
self.slowCt = 0
self.flagNewRecord = False
class SongUpdateDetailV2(SongUpdateDetailV1):
def __init__(self, data: List) -> None:
super().__init__(data)
@@ -578,6 +668,7 @@ class SongUpdateDetailV2(SongUpdateDetailV1):
self.slowCt = data[14]
self.flagNewRecord = False if data[15] == 0 else True
class SeasonalInfoV1:
def __init__(self) -> None:
self.level: int = 0
@@ -586,7 +677,7 @@ class SeasonalInfoV1:
self.cumulativeScore: int = 0
self.titlesObtained: int = 0
self.iconsObtained: int = 0
self.skillPts: int = 0
self.skillPts: int = 0
self.noteColorsObtained: int = 0
self.noteSoundsObtained: int = 0
@@ -600,9 +691,10 @@ class SeasonalInfoV1:
self.iconsObtained,
self.skillPts,
self.noteColorsObtained,
self.noteSoundsObtained
self.noteSoundsObtained,
]
class SeasonalInfoV2(SeasonalInfoV1):
def __init__(self) -> None:
super().__init__()
@@ -612,6 +704,7 @@ class SeasonalInfoV2(SeasonalInfoV1):
def make(self) -> List:
return super().make() + [self.platesObtained, self.cumulativeGatePts]
class BingoPageStatus:
id = 0
location = 1
@@ -625,23 +718,30 @@ class BingoPageStatus:
def make(self) -> List:
return [self.id, self.location, self.progress]
class BingoDetail:
def __init__(self, pageNumber: int) -> None:
self.pageNumber = pageNumber
self.pageStatus: List[BingoPageStatus] = []
def make(self) -> List:
status = []
for x in self.pageStatus:
status.append(x.make())
return [
self.pageNumber,
status
]
return [self.pageNumber, status]
class GateDetailV1:
def __init__(self, gate_id: int = 1, page: int = 1, progress: int = 0, loops: int = 0, last_used: int = 0, mission_flg = 0) -> None:
def __init__(
self,
gate_id: int = 1,
page: int = 1,
progress: int = 0,
loops: int = 0,
last_used: int = 0,
mission_flg=0,
) -> None:
self.id = gate_id
self.page = page
self.progress = progress
@@ -652,14 +752,17 @@ class GateDetailV1:
def make(self) -> List:
return [self.id, 1, self.page, self.progress, self.loops, self.lastUsed]
class GateDetailV2(GateDetailV1):
def make(self) -> List:
return super().make() + [self.missionFlg]
class GachaInfo:
def make(self) -> List:
return []
class LastSongDetail:
lastSongId = 90
lastSongDiff = 1
@@ -667,8 +770,14 @@ class LastSongDetail:
lastFolderId = 1
lastSongOrd = 1
def __init__(self, last_song: int = 90, last_diff: int = 1, last_folder_ord: int = 1,
last_folder_id: int = 1, last_song_ord: int = 1) -> None:
def __init__(
self,
last_song: int = 90,
last_diff: int = 1,
last_folder_ord: int = 1,
last_folder_id: int = 1,
last_song_ord: int = 1,
) -> None:
self.lastSongId = last_song
self.lastSongDiff = last_diff
self.lastFolderOrd = last_folder_ord
@@ -676,13 +785,20 @@ class LastSongDetail:
self.lastSongOrd = last_song_ord
def make(self) -> List:
return [self.lastSongId, self.lastSongDiff, self.lastFolderOrd, self.lastFolderId,
self.lastSongOrd]
return [
self.lastSongId,
self.lastSongDiff,
self.lastFolderOrd,
self.lastFolderId,
self.lastSongOrd,
]
class FriendDetail:
def make(self) -> List:
return []
class LoginBonusInfo:
def __init__(self) -> None:
self.tickets: List[TicketItem] = []
@@ -695,27 +811,38 @@ class LoginBonusInfo:
for ticket in self.tickets:
tks.append(ticket.make())
for item in self.items:
itms.append(item.make())
return [ tks, itms, self.message ]
return [tks, itms, self.message]
class VipLoginBonus:
id = 1
unknown = 0
item: GenericItemRecv
def __init__(self, id: int = 1, unk: int = 0, item_type: int = 1, item_id: int = 1, item_qt: int = 1) -> None:
def __init__(
self,
id: int = 1,
unk: int = 0,
item_type: int = 1,
item_id: int = 1,
item_qt: int = 1,
) -> None:
self.id = id
self.unknown = unk
self.item = GenericItemRecv(item_type, item_id, item_qt)
def make(self) -> List:
return [ self.id, self.unknown, self.item.make() ]
return [self.id, self.unknown, self.item.make()]
class VipInfo:
def __init__(self, year: int = 2019, month: int = 1, day: int = 1, num_item: int = 1) -> None:
def __init__(
self, year: int = 2019, month: int = 1, day: int = 1, num_item: int = 1
) -> None:
self.pageYear = year
self.pageMonth = month
self.pageDay = day
@@ -729,22 +856,32 @@ class VipInfo:
for present in self.presentInfo:
pres.append(present.make())
for b in self.vipLoginBonus:
vipBonus.append(b.make())
return [ self.pageYear, self.pageMonth, self.pageDay, self.numItem, pres, vipBonus ]
return [
self.pageYear,
self.pageMonth,
self.pageDay,
self.numItem,
pres,
vipBonus,
]
class PurchaseType(Enum):
PurchaseTypeCredit = 1
PurchaseTypeWP = 2
class PlayType(Enum):
PlayTypeSingle = 1
PlayTypeVs = 2
PlayTypeCoop = 3
PlayTypeStageup = 4
class StageInfo:
danId: int = 0
danLevel: int = 0
@@ -770,15 +907,17 @@ class StageInfo:
self.song2BestScore,
self.song3BestScore,
],
self.unk5
self.unk5,
]
class StageupClearType(Enum):
FAIL = 0
CLEAR_BLUE = 1
CLEAR_SILVER = 2
CLEAR_GOLD = 3
class MusicUpdateDetailV1:
def __init__(self) -> None:
self.songId = 0
@@ -790,7 +929,7 @@ class MusicUpdateDetailV1:
self.lowestMissCount = 0
self.maxSkillPts = 0
self.locked = 0
def make(self) -> List:
return [
self.songId,
@@ -804,25 +943,30 @@ class MusicUpdateDetailV1:
self.locked,
]
class MusicUpdateDetailV2(MusicUpdateDetailV1):
def __init__(self) -> None:
super().__init__()
self.rating = 0
def make(self) -> List:
return super().make() + [self.rating]
class MusicUpdateDetailV3(MusicUpdateDetailV2):
def __init__(self) -> None:
super().__init__()
self.grades = SongDetailGradeCountsV2()
class SongRatingUpdate:
def __init__(self, song_id: int = 0, difficulty: int = 1, new_rating: int = 0) -> None:
def __init__(
self, song_id: int = 0, difficulty: int = 1, new_rating: int = 0
) -> None:
self.songId = song_id
self.difficulty = difficulty
self.rating = new_rating
def make(self) -> List:
return [
self.songId,
@@ -830,21 +974,20 @@ class SongRatingUpdate:
self.rating,
]
class GateTutorialFlag:
def __init__(self, tutorial_id: int = 1, flg_watched: bool = False) -> None:
self.tutorialId = tutorial_id
self.flagWatched = flg_watched
def make(self) -> List:
return [
self.tutorialId,
int(self.flagWatched)
]
return [self.tutorialId, int(self.flagWatched)]
class DateUpdate:
def __init__(self, date_id: int = 0, timestamp: int = 0) -> None:
self.id = date_id
self.timestamp = timestamp
def make(self) -> List:
return [self.id, self.timestamp]

View File

@@ -4,6 +4,7 @@ from titles.wacca.handlers.base import BaseRequest, BaseResponse
from titles.wacca.handlers.helpers import HousingInfo
from titles.wacca.const import WaccaConstants
# ---housing/get----
class HousingGetResponse(BaseResponse):
def __init__(self, housingId: int) -> None:
@@ -15,6 +16,7 @@ class HousingGetResponse(BaseResponse):
self.params = [self.housingId, self.regionId]
return super().make()
# ---housing/start----
class HousingStartRequestV1(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -26,6 +28,7 @@ class HousingStartRequestV1(BaseRequest):
for info in self.params[2]:
self.info.append(HousingInfo(info[0], info[1]))
class HousingStartRequestV2(HousingStartRequestV1):
def __init__(self, data: Dict) -> None:
super(HousingStartRequestV1, self).__init__(data)
@@ -37,20 +40,84 @@ class HousingStartRequestV2(HousingStartRequestV1):
for info in self.params[3]:
self.info.append(HousingInfo(info[0], info[1]))
class HousingStartResponseV1(BaseResponse):
def __init__(self, regionId: WaccaConstants.Region = WaccaConstants.Region.HOKKAIDO, songList: List[int] = []) -> None:
def __init__(
self,
regionId: WaccaConstants.Region = WaccaConstants.Region.HOKKAIDO,
songList: List[int] = [],
) -> None:
super().__init__()
self.regionId = regionId
self.songList = songList # Recomended songs
self.songList = songList # Recomended songs
if not self.songList:
self.songList = [
1269,1007,1270,1002,1020,1003,1008,1211,1018,1092,1056,32,
1260,1230,1258,1251,2212,1264,1125,1037,2001,1272,1126,1119,
1104,1070,1047,1044,1027,1004,1001,24,2068,2062,2021,1275,
1249,1207,1203,1107,1021,1009,9,4,3,23,22,2014,13,1276,1247,
1240,1237,1128,1114,1110,1109,1102,1045,1043,1036,1035,1030,
1023,1015
self.songList = [
1269,
1007,
1270,
1002,
1020,
1003,
1008,
1211,
1018,
1092,
1056,
32,
1260,
1230,
1258,
1251,
2212,
1264,
1125,
1037,
2001,
1272,
1126,
1119,
1104,
1070,
1047,
1044,
1027,
1004,
1001,
24,
2068,
2062,
2021,
1275,
1249,
1207,
1203,
1107,
1021,
1009,
9,
4,
3,
23,
22,
2014,
13,
1276,
1247,
1240,
1237,
1128,
1114,
1110,
1109,
1102,
1045,
1043,
1036,
1035,
1030,
1023,
1015,
]
def make(self) -> Dict:

View File

@@ -3,6 +3,7 @@ from typing import List, Dict
from titles.wacca.handlers.base import BaseRequest, BaseResponse
from titles.wacca.handlers.helpers import UserOption, DateUpdate
# ---user/info/update---
class UserInfoUpdateRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -16,17 +17,20 @@ class UserInfoUpdateRequest(BaseRequest):
for x in self.params[1]:
self.optsUpdated.append(UserOption(x[0], x[1]))
for x in self.params[3]:
self.datesUpdated.append(DateUpdate(x[0], x[1]))
# ---user/info/getMyroom--- TODO: Understand this better
class UserInfogetMyroomRequest(BaseRequest):
game_id = 0
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.game_id = int(self.params[0])
class UserInfogetMyroomResponseV1(BaseResponse):
def __init__(self) -> None:
super().__init__()
@@ -49,6 +53,7 @@ class UserInfogetMyroomResponseV1(BaseResponse):
return super().make()
class UserInfogetMyroomResponseV2(UserInfogetMyroomResponseV1):
def __init__(self) -> None:
super().__init__()
@@ -58,13 +63,16 @@ class UserInfogetMyroomResponseV2(UserInfogetMyroomResponseV1):
self.params += [0, 0, 0]
return super(UserInfogetMyroomResponseV1, self).make()
# ---user/info/getRanking---
class UserInfogetRankingRequest(BaseRequest):
game_id = 0
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.game_id = int(self.params[0])
class UserInfogetRankingResponse(BaseResponse):
def __init__(self) -> None:
super().__init__()
@@ -85,4 +93,4 @@ class UserInfogetRankingResponse(BaseResponse):
self.wacca_points_ranking,
]
return super().make()
return super().make()

View File

@@ -5,6 +5,7 @@ from titles.wacca.handlers.helpers import PurchaseType, GenericItemRecv
from titles.wacca.handlers.helpers import TicketItem, SongRatingUpdate, BingoDetail
from titles.wacca.handlers.helpers import BingoPageStatus, GateTutorialFlag
# ---user/goods/purchase---
class UserGoodsPurchaseRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -14,14 +15,17 @@ class UserGoodsPurchaseRequest(BaseRequest):
self.purchaseCount = int(self.params[2])
self.purchaseType = PurchaseType(self.params[3])
self.cost = int(self.params[4])
self.itemObtained: GenericItemRecv = GenericItemRecv(self.params[5][0], self.params[5][1], self.params[5][2])
self.itemObtained: GenericItemRecv = GenericItemRecv(
self.params[5][0], self.params[5][1], self.params[5][2]
)
class UserGoodsPurchaseResponse(BaseResponse):
def __init__(self, wp: int = 0, tickets: List = []) -> None:
super().__init__()
self.currentWp = wp
self.tickets: List[TicketItem] = []
for ticket in tickets:
self.tickets.append(TicketItem(ticket[0], ticket[1], ticket[2]))
@@ -34,6 +38,7 @@ class UserGoodsPurchaseResponse(BaseResponse):
return super().make()
# ---user/sugaroku/update---
class UserSugarokuUpdateRequestV1(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -44,17 +49,19 @@ class UserSugarokuUpdateRequestV1(BaseRequest):
self.progress = int(self.params[3])
self.loops = int(self.params[4])
self.boostsUsed = self.params[5]
self.totalPts = int(self.params[7])
self.totalPts = int(self.params[7])
self.itemsObtainted: List[GenericItemRecv] = []
for item in self.params[6]:
self.itemsObtainted.append(GenericItemRecv(item[0], item[1], item[2]))
class UserSugarokuUpdateRequestV2(UserSugarokuUpdateRequestV1):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.mission_flag = int(self.params[8])
# ---user/rating/update---
class UserRatingUpdateRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -66,8 +73,9 @@ class UserRatingUpdateRequest(BaseRequest):
for x in self.params[2]:
self.songs.append(SongRatingUpdate(x[0], x[1], x[2]))
# ---user/mission/update---
class UserMissionUpdateRequest(BaseRequest):
class UserMissionUpdateRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.profileId = self.params[0]

View File

@@ -1,11 +1,20 @@
from typing import List, Dict
from titles.wacca.handlers.base import BaseRequest, BaseResponse
from titles.wacca.handlers.helpers import GenericItemRecv, SongUpdateDetailV2, TicketItem
from titles.wacca.handlers.helpers import (
GenericItemRecv,
SongUpdateDetailV2,
TicketItem,
)
from titles.wacca.handlers.helpers import MusicUpdateDetailV2, MusicUpdateDetailV3
from titles.wacca.handlers.helpers import SeasonalInfoV2, SeasonalInfoV1, SongUpdateDetailV1
from titles.wacca.handlers.helpers import (
SeasonalInfoV2,
SeasonalInfoV1,
SongUpdateDetailV1,
)
from titles.wacca.handlers.helpers import MusicUpdateDetailV1
# ---user/music/update---
class UserMusicUpdateRequestV1(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -18,82 +27,86 @@ class UserMusicUpdateRequestV1(BaseRequest):
for itm in data["params"][3]:
self.itemsObtained.append(GenericItemRecv(itm[0], itm[1], itm[2]))
class UserMusicUpdateRequestV2(UserMusicUpdateRequestV1):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.songDetail = SongUpdateDetailV2(self.params[2])
class UserMusicUpdateResponseV1(BaseResponse):
def __init__(self) -> None:
super().__init__()
self.songDetail = MusicUpdateDetailV1()
self.seasonInfo = SeasonalInfoV1()
self.rankingInfo: List[List[int]] = []
def make(self) -> Dict:
self.params = [
self.songDetail.make(),
[self.songDetail.songId, self.songDetail.clearCounts.playCt],
self.seasonInfo.make(),
self.rankingInfo
self.rankingInfo,
]
return super().make()
class UserMusicUpdateResponseV2(UserMusicUpdateResponseV1):
def __init__(self) -> None:
super().__init__()
self.songDetail = MusicUpdateDetailV2()
self.seasonInfo = SeasonalInfoV2()
class UserMusicUpdateResponseV3(UserMusicUpdateResponseV2):
def __init__(self) -> None:
super().__init__()
self.songDetail = MusicUpdateDetailV3()
# ---user/music/updateCoop---
class UserMusicUpdateCoopRequest(UserMusicUpdateRequestV2):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.coopData = self.params[4]
# ---user/music/updateVs---
class UserMusicUpdateVsRequest(UserMusicUpdateRequestV2):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.vsData = self.params[4]
# ---user/music/unlock---
class UserMusicUnlockRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.profileId = self.params[0]
self.songId = self.params[1]
self.difficulty = self.params[2]
self.difficulty = self.params[2]
self.itemsUsed: List[GenericItemRecv] = []
for itm in self.params[3]:
self.itemsUsed.append(GenericItemRecv(itm[0], itm[1], itm[2]))
class UserMusicUnlockResponse(BaseResponse):
def __init__(self, current_wp: int = 0, tickets_remaining: List = []) -> None:
super().__init__()
self.wp = current_wp
self.wp = current_wp
self.tickets: List[TicketItem] = []
for ticket in tickets_remaining:
self.tickets.append(TicketItem(ticket[0], ticket[1], ticket[2]))
def make(self)-> Dict:
def make(self) -> Dict:
tickets = []
for ticket in self.tickets:
tickets.append(ticket.make())
self.params = [
self.wp,
tickets
]
self.params = [self.wp, tickets]
return super().make()

View File

@@ -3,6 +3,7 @@ from typing import List, Dict, Optional
from titles.wacca.handlers.base import BaseRequest, BaseResponse
from titles.wacca.handlers.helpers import *
# ---user/status/get----
class UserStatusGetRequest(BaseRequest):
aimeId: int = 0
@@ -11,6 +12,7 @@ class UserStatusGetRequest(BaseRequest):
super().__init__(data)
self.aimeId = int(data["params"][0])
class UserStatusGetV1Response(BaseResponse):
def __init__(self) -> None:
super().__init__()
@@ -27,14 +29,12 @@ class UserStatusGetV1Response(BaseResponse):
self.setTitleId,
self.setIconId,
self.profileStatus.value,
[
self.versionStatus.value,
str(self.lastGameVersion)
]
[self.versionStatus.value, str(self.lastGameVersion)],
]
return super().make()
class UserStatusGetV2Response(UserStatusGetV1Response):
def __init__(self) -> None:
super().__init__()
@@ -48,6 +48,7 @@ class UserStatusGetV2Response(UserStatusGetV1Response):
return super(UserStatusGetV1Response, self).make()
# ---user/status/getDetail----
class UserStatusGetDetailRequest(BaseRequest):
userId: int = 0
@@ -56,6 +57,7 @@ class UserStatusGetDetailRequest(BaseRequest):
super().__init__(data)
self.userId = data["params"][0]
class UserStatusGetDetailResponseV1(BaseResponse):
def __init__(self) -> None:
super().__init__()
@@ -64,22 +66,32 @@ class UserStatusGetDetailResponseV1(BaseResponse):
self.seasonalPlayModeCounts: List[PlayModeCounts] = []
self.userItems: UserItemInfoV1 = UserItemInfoV1()
self.scores: List[BestScoreDetailV1] = []
self.songPlayStatus: List[int] = [0,0]
self.songPlayStatus: List[int] = [0, 0]
self.seasonInfo: SeasonalInfoV1 = SeasonalInfoV1()
self.playAreaList: List = [ [0],[0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0],[0,0,0,0],[0,0,0,0,0,0,0],[0] ]
self.playAreaList: List = [
[0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0],
]
self.songUpdateTime: int = 0
def make(self)-> Dict:
def make(self) -> Dict:
opts = []
play_modes = []
scores = []
for x in self.seasonalPlayModeCounts:
play_modes.append(x.make())
for x in self.scores:
scores.append(x.make())
for x in self.options:
opts.append(x.make())
@@ -92,21 +104,31 @@ class UserStatusGetDetailResponseV1(BaseResponse):
self.songPlayStatus,
self.seasonInfo.make(),
self.playAreaList,
self.songUpdateTime
self.songUpdateTime,
]
return super().make()
def find_score_idx(self, song_id: int, difficulty: int = 1, start_idx: int = 0, stop_idx: Optional[int] = None) -> Optional[int]:
def find_score_idx(
self,
song_id: int,
difficulty: int = 1,
start_idx: int = 0,
stop_idx: Optional[int] = None,
) -> Optional[int]:
if stop_idx is None or stop_idx > len(self.scores):
stop_idx = len(self.scores)
for x in range(start_idx, stop_idx):
if self.scores[x].songId == song_id and self.scores[x].difficulty == difficulty:
if (
self.scores[x].songId == song_id
and self.scores[x].difficulty == difficulty
):
return x
return None
class UserStatusGetDetailResponseV2(UserStatusGetDetailResponseV1):
def __init__(self) -> None:
super().__init__()
@@ -122,7 +144,7 @@ class UserStatusGetDetailResponseV2(UserStatusGetDetailResponseV1):
self.gatchaInfo: List[GachaInfo] = []
self.friendList: List[FriendDetail] = []
def make(self)-> Dict:
def make(self) -> Dict:
super().make()
gates = []
friends = []
@@ -130,13 +152,13 @@ class UserStatusGetDetailResponseV2(UserStatusGetDetailResponseV1):
for x in self.gateInfo:
gates.append(x.make())
for x in self.friendList:
friends.append(x.make())
for x in self.gateTutorialFlags:
tut_flg.append(x.make())
while len(tut_flg) < 5:
flag_id = len(tut_flg) + 1
tut_flg.append([flag_id, 0])
@@ -152,11 +174,13 @@ class UserStatusGetDetailResponseV2(UserStatusGetDetailResponseV1):
return super(UserStatusGetDetailResponseV1, self).make()
class UserStatusGetDetailResponseV3(UserStatusGetDetailResponseV2):
def __init__(self) -> None:
super().__init__()
self.gateInfo: List[GateDetailV2] = []
class UserStatusGetDetailResponseV4(UserStatusGetDetailResponseV3):
def __init__(self) -> None:
super().__init__()
@@ -164,12 +188,13 @@ class UserStatusGetDetailResponseV4(UserStatusGetDetailResponseV3):
self.bingoStatus: BingoDetail = BingoDetail(0)
self.scores: List[BestScoreDetailV2] = []
def make(self)-> Dict:
def make(self) -> Dict:
super().make()
self.params.append(self.bingoStatus.make())
return super(UserStatusGetDetailResponseV1, self).make()
# ---user/status/login----
class UserStatusLoginRequest(BaseRequest):
userId: int = 0
@@ -178,16 +203,19 @@ class UserStatusLoginRequest(BaseRequest):
super().__init__(data)
self.userId = data["params"][0]
class UserStatusLoginResponseV1(BaseResponse):
def __init__(self, is_first_login_daily: bool = False, last_login_date: int = 0) -> None:
def __init__(
self, is_first_login_daily: bool = False, last_login_date: int = 0
) -> None:
super().__init__()
self.dailyBonus: List[LoginBonusInfo] = []
self.consecBonus: List[LoginBonusInfo] = []
self.otherBonus: List[LoginBonusInfo] = []
self.otherBonus: List[LoginBonusInfo] = []
self.firstLoginDaily = is_first_login_daily
self.lastLoginDate = last_login_date
def make(self)-> Dict:
def make(self) -> Dict:
super().make()
daily = []
consec = []
@@ -202,32 +230,39 @@ class UserStatusLoginResponseV1(BaseResponse):
for bonus in self.otherBonus:
other.append(bonus.make())
self.params = [ daily, consec, other, int(self.firstLoginDaily)]
self.params = [daily, consec, other, int(self.firstLoginDaily)]
return super().make()
class UserStatusLoginResponseV2(UserStatusLoginResponseV1):
def __init__(self, is_first_login_daily: bool = False, last_login_date: int = 0) -> None:
def __init__(
self, is_first_login_daily: bool = False, last_login_date: int = 0
) -> None:
super().__init__(is_first_login_daily)
self.lastLoginDate = last_login_date
self.vipInfo = VipInfo()
def make(self)-> Dict:
def make(self) -> Dict:
super().make()
self.params.append(self.vipInfo.make())
self.params.append(self.lastLoginDate)
return super(UserStatusLoginResponseV1, self).make()
class UserStatusLoginResponseV3(UserStatusLoginResponseV2):
def __init__(self, is_first_login_daily: bool = False, last_login_date: int = 0) -> None:
def __init__(
self, is_first_login_daily: bool = False, last_login_date: int = 0
) -> None:
super().__init__(is_first_login_daily, last_login_date)
self.unk: List = []
def make(self)-> Dict:
def make(self) -> Dict:
super().make()
self.params.append(self.unk)
return super(UserStatusLoginResponseV1, self).make()
# ---user/status/create---
class UserStatusCreateRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -235,26 +270,27 @@ class UserStatusCreateRequest(BaseRequest):
self.aimeId = data["params"][0]
self.username = data["params"][1]
class UserStatusCreateResponseV1(BaseResponse):
def __init__(self, userId: int, username: str) -> None:
super().__init__()
self.userStatus = UserStatusV1()
self.userStatus.userId = userId
self.userStatus.username = username
def make(self)-> Dict:
self.params = [
self.userStatus.make()
]
def make(self) -> Dict:
self.params = [self.userStatus.make()]
return super().make()
class UserStatusCreateResponseV2(UserStatusCreateResponseV1):
def __init__(self, userId: int, username: str) -> None:
super().__init__(userId, username)
self.userStatus: UserStatusV2 = UserStatusV2()
self.userStatus: UserStatusV2 = UserStatusV2()
self.userStatus.userId = userId
self.userStatus.username = username
# ---user/status/logout---
class UserStatusLogoutRequest(BaseRequest):
userId: int
@@ -263,6 +299,7 @@ class UserStatusLogoutRequest(BaseRequest):
super().__init__(data)
self.userId = data["params"][0]
# ---user/status/update---
class UserStatusUpdateRequestV1(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -274,11 +311,17 @@ class UserStatusUpdateRequestV1(BaseRequest):
for itm in data["params"][2]:
self.itemsRecieved.append(GenericItemRecv(itm[0], itm[1], itm[2]))
class UserStatusUpdateRequestV2(UserStatusUpdateRequestV1):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.isContinue = bool(data["params"][3])
self.isFirstPlayFree = bool(data["params"][4])
self.itemsUsed = data["params"][5]
self.lastSongInfo = LastSongDetail(data["params"][6][0], data["params"][6][1],
data["params"][6][2], data["params"][6][3], data["params"][6][4])
self.lastSongInfo = LastSongDetail(
data["params"][6][0],
data["params"][6][1],
data["params"][6][2],
data["params"][6][3],
data["params"][6][4],
)

View File

@@ -2,6 +2,7 @@ from typing import Dict, List
from titles.wacca.handlers.base import BaseRequest, BaseResponse
from titles.wacca.handlers.helpers import StageInfo, StageupClearType, GenericItemRecv
# --user/trial/get--
class UserTrialGetRequest(BaseRequest):
profileId: int = 0
@@ -10,20 +11,22 @@ class UserTrialGetRequest(BaseRequest):
super().__init__(data)
self.profileId = self.params[0]
class UserTrialGetResponse(BaseResponse):
def __init__(self) -> None:
super().__init__()
self.stageList: List[StageInfo] = []
def make(self) -> Dict:
dans = []
for x in self.stageList:
dans.append(x.make())
self.params = [dans]
return super().make()
# --user/trial/update--
class UserTrialUpdateRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -43,9 +46,10 @@ class UserTrialUpdateRequest(BaseRequest):
if len(self.params) == 8:
self.unk7 = self.params[7]
class UserTrialUpdateResponse(BaseResponse):
def __init__(self) -> None:
super().__init__()
def make(self) -> Dict:
return super().make()
return super().make()

View File

@@ -2,12 +2,14 @@ from typing import Dict, List
from titles.wacca.handlers.base import BaseRequest, BaseResponse
from titles.wacca.handlers.helpers import VipLoginBonus
# --user/vip/get--
class UserVipGetRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.profileId = self.params[0]
class UserVipGetResponse(BaseResponse):
def __init__(self) -> None:
super().__init__()
@@ -15,22 +17,16 @@ class UserVipGetResponse(BaseResponse):
self.unknown1: int = 1
self.unknown2: int = 1
self.presents: List[VipLoginBonus] = []
def make(self) -> Dict:
pres = []
for x in self.presents:
pres.append(x.make())
self.params = [
self.vipDays,
[
self.unknown1,
self.unknown2,
pres
]
]
self.params = [self.vipDays, [self.unknown1, self.unknown2, pres]]
return super().make()
# --user/vip/start--
class UserVipStartRequest(BaseRequest):
def __init__(self, data: Dict) -> None:
@@ -39,6 +35,7 @@ class UserVipStartRequest(BaseRequest):
self.cost = self.params[1]
self.days = self.params[2]
class UserVipStartResponse(BaseResponse):
def __init__(self, expires: int = 0) -> None:
super().__init__()
@@ -46,9 +43,6 @@ class UserVipStartResponse(BaseResponse):
self.presents = []
def make(self) -> Dict:
self.params = [
self.whenExpires,
self.presents
]
self.params = [self.whenExpires, self.presents]
return super().make()
return super().make()