forked from Hay1tsme/artemis
add back games, conform them to new title dispatch
This commit is contained in:
934
titles/ongeki/base.py
Normal file
934
titles/ongeki/base.py
Normal file
@ -0,0 +1,934 @@
|
||||
from datetime import date, datetime, timedelta
|
||||
from typing import Any, Dict, List
|
||||
import json
|
||||
import logging
|
||||
from enum import Enum
|
||||
|
||||
from core.config import CoreConfig
|
||||
from core.data.cache import cached
|
||||
from titles.ongeki.const import OngekiConstants
|
||||
from titles.ongeki.config import OngekiConfig
|
||||
from titles.ongeki.database import OngekiData
|
||||
from titles.ongeki.config import OngekiConfig
|
||||
|
||||
class OngekiBattleGrade(Enum):
|
||||
FAILED = 0
|
||||
DRAW = 1
|
||||
USUALLY = 2
|
||||
GOOD = 3
|
||||
GREAT = 4
|
||||
EXCELLENT = 5
|
||||
UNBELIEVABLE_GOLD = 6
|
||||
UNBELIEVABLE_RAINBOW = 7
|
||||
|
||||
class OngekiBattlePointGrade(Enum):
|
||||
FRESHMAN = 0
|
||||
KYU10 = 1
|
||||
KYU9 = 2
|
||||
KYU8 = 3
|
||||
KYU7 = 4
|
||||
KYU6 = 5
|
||||
KYU5 = 6
|
||||
KYU4 = 7
|
||||
KYU3 = 8
|
||||
KYU2 = 9
|
||||
KYU1 = 10
|
||||
DAN1 = 11
|
||||
DAN2 = 12
|
||||
DAN3 = 13
|
||||
DAN4 = 14
|
||||
DAN5 = 15
|
||||
DAN6 = 16
|
||||
DAN7 = 17
|
||||
DAN8 = 18
|
||||
DAN9 = 19
|
||||
DAN10 = 20
|
||||
SODEN = 21
|
||||
|
||||
class OngekiTechnicalGrade(Enum):
|
||||
D = 0
|
||||
C = 1
|
||||
B = 2
|
||||
BB = 3
|
||||
BBB = 4
|
||||
A = 5
|
||||
AA = 6
|
||||
AAA = 7
|
||||
S = 8
|
||||
SS = 9
|
||||
SSS = 10
|
||||
SSSp = 11
|
||||
|
||||
class OngekiDifficulty(Enum):
|
||||
BASIC = 0
|
||||
ADVANCED = 1
|
||||
EXPERT = 2
|
||||
MASTER = 3
|
||||
LUNATIC = 10
|
||||
|
||||
class OngekiGPLogKind(Enum):
|
||||
NONE = 0
|
||||
BUY1_START = 1
|
||||
BUY2_START = 2
|
||||
BUY3_START = 3
|
||||
BUY1_ADD = 4
|
||||
BUY2_ADD = 5
|
||||
BUY3_ADD = 6
|
||||
FIRST_PLAY = 7
|
||||
COMPENSATION = 8
|
||||
|
||||
PAY_PLAY = 11
|
||||
PAY_TIME = 12
|
||||
PAY_MAS_UNLOCK = 13
|
||||
PAY_MONEY = 14
|
||||
|
||||
class OngekiBase():
|
||||
|
||||
def __init__(self, core_cfg: CoreConfig, game_cfg: OngekiConfig) -> None:
|
||||
self.core_cfg = core_cfg
|
||||
self.game_cfg = game_cfg
|
||||
self.data = OngekiData(core_cfg)
|
||||
self.date_time_format = "%Y-%m-%d %H:%M:%S"
|
||||
self.date_time_format_ext = "%Y-%m-%d %H:%M:%S.%f" # needs to be lopped off at [:-5]
|
||||
self.date_time_format_short = "%Y-%m-%d"
|
||||
self.logger = logging.getLogger("ongeki")
|
||||
self.game = OngekiConstants.GAME_CODE
|
||||
self.version = OngekiConstants.VER_ONGEKI
|
||||
|
||||
def handle_get_game_setting_api_request(self, data: Dict) -> Dict:
|
||||
reboot_start = date.strftime(datetime.now() + timedelta(hours=3), self.date_time_format)
|
||||
reboot_end = date.strftime(datetime.now() + timedelta(hours=4), self.date_time_format)
|
||||
return {
|
||||
"gameSetting": {
|
||||
"dataVersion": "1.00.00",
|
||||
"onlineDataVersion": "1.00.00",
|
||||
"isMaintenance": "false",
|
||||
"requestInterval": 10,
|
||||
"rebootStartTime": reboot_start,
|
||||
"rebootEndTime": reboot_end,
|
||||
"isBackgroundDistribute": "false",
|
||||
"maxCountCharacter": 50,
|
||||
"maxCountCard": 300,
|
||||
"maxCountItem": 300,
|
||||
"maxCountMusic": 50,
|
||||
"maxCountMusicItem": 300,
|
||||
"macCountRivalMusic": 300,
|
||||
},
|
||||
"isDumpUpload": "false",
|
||||
"isAou": "true",
|
||||
}
|
||||
|
||||
def handle_get_game_idlist_api_request(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Gets lists of song IDs, either disabled songs or recomended songs depending on type?
|
||||
"""
|
||||
# type - int
|
||||
# id - int
|
||||
return {"type": data["type"], "length": 0, "gameIdlistList": []}
|
||||
|
||||
def handle_get_game_ranking_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameRankingList": []}
|
||||
|
||||
def handle_get_game_point_api_request(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Sets the GP ammount for A and B sets for 1 - 3 crdits
|
||||
"""
|
||||
return {"length":6,"gamePointList":[
|
||||
{"type":0,"cost":100,"startDate":"2000-01-01 05:00:00.0","endDate":"2099-01-01 05:00:00.0"},
|
||||
{"type":1,"cost":200,"startDate":"2000-01-01 05:00:00.0","endDate":"2099-01-01 05:00:00.0"},
|
||||
{"type":2,"cost":300,"startDate":"2000-01-01 05:00:00.0","endDate":"2099-01-01 05:00:00.0"},
|
||||
{"type":3,"cost":120,"startDate":"2000-01-01 05:00:00.0","endDate":"2099-01-01 05:00:00.0"},
|
||||
{"type":4,"cost":240,"startDate":"2000-01-01 05:00:00.0","endDate":"2099-01-01 05:00:00.0"},
|
||||
{"type":5,"cost":360,"startDate":"2000-01-01 05:00:00.0","endDate":"2099-01-01 05:00:00.0"}
|
||||
]}
|
||||
|
||||
def handle_game_login_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "gameLogin"}
|
||||
|
||||
def handle_game_logout_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "gameLogout"}
|
||||
|
||||
def handle_extend_lock_time_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "ExtendLockTimeApi"}
|
||||
|
||||
def handle_get_game_reward_api_request(self, data: Dict) -> Dict:
|
||||
# TODO: reward list
|
||||
return {"length": 0, "gameRewardList": []}
|
||||
|
||||
def handle_get_game_present_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gamePresentList": []}
|
||||
|
||||
def handle_get_game_message_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameMessageList": []}
|
||||
|
||||
def handle_get_game_sale_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameSaleList": []}
|
||||
|
||||
def handle_get_game_tech_music_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameTechMusicList": []}
|
||||
|
||||
def handle_upsert_client_setting_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "UpsertClientSettingApi"}
|
||||
|
||||
def handle_upsert_client_testmode_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "UpsertClientTestmodeApi"}
|
||||
|
||||
def handle_upsert_client_bookkeeping_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "upsertClientBookkeeping"}
|
||||
|
||||
def handle_upsert_client_develop_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "upsertClientDevelop"}
|
||||
|
||||
def handle_upsert_client_error_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "upsertClientError"}
|
||||
|
||||
def handle_upsert_user_gplog_api_request(self, data: Dict) -> Dict:
|
||||
user = data["userId"]
|
||||
if user >= 200000000000000: # Account for guest play
|
||||
user = None
|
||||
|
||||
self.data.log.put_gp_log(user, data["usedCredit"], data["placeName"], data["userGplog"]["trxnDate"],
|
||||
data["userGplog"]["placeId"], data["userGplog"]["kind"], data["userGplog"]["pattern"], data["userGplog"]["currentGP"])
|
||||
|
||||
return {"returnCode": 1, "apiName": "UpsertUserGplogApi"}
|
||||
|
||||
def handle_extend_lock_time_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "ExtendLockTimeApi"}
|
||||
|
||||
def handle_get_game_event_api_request(self, data: Dict) -> Dict:
|
||||
evts = self.data.static.get_enabled_events(self.version)
|
||||
|
||||
evt_list = []
|
||||
for event in evts:
|
||||
evt_list.append({
|
||||
"type": event["type"],
|
||||
"id": event["eventId"],
|
||||
"startDate": "2017-12-05 07:00:00.0",
|
||||
"endDate": "2099-12-31 00:00:00.0"
|
||||
})
|
||||
|
||||
return {"type": data["type"], "length": len(evt_list), "gameEventList": evt_list}
|
||||
|
||||
def handle_get_game_id_list_api_request(self, data: Dict) -> Dict:
|
||||
game_idlist: list[str, Any] = [] #1 to 230 & 8000 to 8050
|
||||
|
||||
if data["type"] == 1:
|
||||
for i in range(1,231):
|
||||
game_idlist.append({"type": 1, "id": i})
|
||||
return {"type": data["type"], "length": len(game_idlist), "gameIdlistList": game_idlist}
|
||||
elif data["type"] == 2:
|
||||
for i in range(8000,8051):
|
||||
game_idlist.append({"type": 2, "id": i})
|
||||
return {"type": data["type"], "length": len(game_idlist), "gameIdlistList": game_idlist}
|
||||
|
||||
def handle_get_user_region_api_request(self, data: Dict) -> Dict:
|
||||
return {"userId": data["userId"], "length": 0, "userRegionList": []}
|
||||
|
||||
def handle_get_user_preview_api_request(self, data: Dict) -> Dict:
|
||||
profile = self.data.profile.get_profile_preview(data["userId"], self.version)
|
||||
|
||||
if profile is None:
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"isLogin": False,
|
||||
"lastLoginDate": "0000-00-00 00:00:00",
|
||||
"userName": "",
|
||||
"reincarnationNum": 0,
|
||||
"level": 0,
|
||||
"exp": 0,
|
||||
"playerRating": 0,
|
||||
"lastGameId": "",
|
||||
"lastRomVersion": "",
|
||||
"lastDataVersion": "",
|
||||
"lastPlayDate": "",
|
||||
"nameplateId": 0,
|
||||
"trophyId": 0,
|
||||
"cardId": 0,
|
||||
"dispPlayerLv": 0,
|
||||
"dispRating": 0,
|
||||
"dispBP": 0,
|
||||
"headphone": 0,
|
||||
"banStatus": 0,
|
||||
"isWarningConfirmed": True,
|
||||
}
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"isLogin": False,
|
||||
"lastLoginDate": profile["lastPlayDate"],
|
||||
"userName": profile["userName"],
|
||||
"reincarnationNum": profile["reincarnationNum"],
|
||||
"level": profile["level"],
|
||||
"exp": profile["exp"],
|
||||
"playerRating": profile["playerRating"],
|
||||
"lastGameId": profile["lastGameId"],
|
||||
"lastRomVersion": profile["lastRomVersion"],
|
||||
"lastDataVersion": profile["lastDataVersion"],
|
||||
"lastPlayDate": profile["lastPlayDate"],
|
||||
"nameplateId": profile["nameplateId"],
|
||||
"trophyId": profile["trophyId"],
|
||||
"cardId": profile["cardId"],
|
||||
"dispPlayerLv": profile["dispPlayerLv"],
|
||||
"dispRating": profile["dispRating"],
|
||||
"dispBP": profile["dispBP"],
|
||||
"headphone": profile["headphone"],
|
||||
"banStatus": profile["banStatus"],
|
||||
"isWarningConfirmed": True,
|
||||
}
|
||||
|
||||
def handle_get_user_tech_count_api_request(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Gets the number of AB and ABPs a player has per-difficulty (7, 7+, 8, etc)
|
||||
The game sends this in upsert so we don't have to calculate it all out thankfully
|
||||
"""
|
||||
utcl = self.data.score.get_tech_count(data["userId"])
|
||||
userTechCountList = []
|
||||
|
||||
for tc in utcl:
|
||||
tc.pop("id")
|
||||
tc.pop("user")
|
||||
userTechCountList.append(tc)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(userTechCountList),
|
||||
"userTechCountList": userTechCountList,
|
||||
}
|
||||
|
||||
def handle_get_user_tech_event_api_request(self, data: Dict) -> Dict:
|
||||
user_tech_event_list = self.data.item.get_tech_event(data["userId"])
|
||||
if user_tech_event_list is None: return {}
|
||||
|
||||
tech_evt = []
|
||||
for evt in user_tech_event_list:
|
||||
tmp = evt._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
tech_evt.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(tech_evt),
|
||||
"userTechEventList": tech_evt,
|
||||
}
|
||||
|
||||
def handle_get_user_tech_event_ranking_api_request(self, data: Dict) -> Dict:
|
||||
#user_event_ranking_list = self.data.item.get_tech_event_ranking(data["userId"])
|
||||
#if user_event_ranking_list is None: return {}
|
||||
|
||||
evt_ranking = []
|
||||
#for evt in user_event_ranking_list:
|
||||
# tmp = evt._asdict()
|
||||
# tmp.pop("id")
|
||||
# tmp.pop("user")
|
||||
# evt_ranking.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(evt_ranking),
|
||||
"userTechEventRankingList": evt_ranking,
|
||||
}
|
||||
|
||||
def handle_get_user_kop_api_request(self, data: Dict) -> Dict:
|
||||
kop_list = self.data.profile.get_kop(data["userId"])
|
||||
if kop_list is None: return {}
|
||||
|
||||
for kop in kop_list:
|
||||
kop.pop("user")
|
||||
kop.pop("id")
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(kop_list),
|
||||
"userKopList": kop_list,
|
||||
}
|
||||
|
||||
def handle_get_user_music_api_request(self, data: Dict) -> Dict:
|
||||
song_list = self.util_generate_music_list(data["userId"])
|
||||
max_ct = data["maxCount"]
|
||||
next_idx = data["nextIndex"]
|
||||
start_idx = next_idx
|
||||
end_idx = max_ct + start_idx
|
||||
|
||||
if len(song_list[start_idx:]) > max_ct:
|
||||
next_idx += max_ct
|
||||
|
||||
else:
|
||||
next_idx = -1
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(song_list[start_idx:end_idx]),
|
||||
"nextIndex": next_idx,
|
||||
"userMusicList": song_list[start_idx:end_idx]
|
||||
}
|
||||
|
||||
def handle_get_user_item_api_request(self, data: Dict) -> Dict:
|
||||
kind = data["nextIndex"] / 10000000000
|
||||
p = self.data.item.get_items(data["userId"], kind)
|
||||
|
||||
if p is None:
|
||||
return {"userId": data["userId"], "nextIndex": -1, "itemKind": kind, "userItemList": []}
|
||||
|
||||
items: list[Dict[str, Any]] = []
|
||||
for i in range(data["nextIndex"] % 10000000000, len(p)):
|
||||
if len(items) > data["maxCount"]:
|
||||
break
|
||||
tmp = p[i]._asdict()
|
||||
tmp.pop("user")
|
||||
tmp.pop("id")
|
||||
items.append(tmp)
|
||||
|
||||
xout = kind * 10000000000 + (data["nextIndex"] % 10000000000) + len(items)
|
||||
|
||||
if len(items) < data["maxCount"] or data["maxCount"] == 0: nextIndex = 0
|
||||
else: nextIndex = xout
|
||||
|
||||
return {"userId": data["userId"], "nextIndex": int(nextIndex), "itemKind": int(kind), "length": len(items), "userItemList": items}
|
||||
|
||||
def handle_get_user_option_api_request(self, data: Dict) -> Dict:
|
||||
o = self.data.profile.get_profile_options(data["userId"])
|
||||
if o is None: return {}
|
||||
|
||||
# get the dict representation of the row so we can modify values
|
||||
user_opts = o._asdict()
|
||||
|
||||
# remove the values the game doesn't want
|
||||
user_opts.pop("id")
|
||||
user_opts.pop("user")
|
||||
|
||||
return {"userId": data["userId"], "userOption": user_opts}
|
||||
|
||||
def handle_get_user_data_api_request(self, data: Dict) -> Dict:
|
||||
p = self.data.profile.get_profile_data(data["userId"], self.version)
|
||||
if p is None: return {}
|
||||
|
||||
cards = self.data.card.get_user_cards(data["userId"])
|
||||
if cards is None or len(cards) == 0:
|
||||
# This should never happen
|
||||
self.logger.error(f"handle_get_user_data_api_request: Internal error - No cards found for user id {data['userId']}")
|
||||
return {}
|
||||
|
||||
# get the dict representation of the row so we can modify values
|
||||
user_data = p._asdict()
|
||||
|
||||
# remove the values the game doesn't want
|
||||
user_data.pop("id")
|
||||
user_data.pop("user")
|
||||
user_data.pop("version")
|
||||
|
||||
# TODO: replace datetime objects with strings
|
||||
|
||||
# add access code that we don't store
|
||||
user_data["accessCode"] = cards[0]["access_code"]
|
||||
|
||||
return {"userId": data["userId"], "userData":user_data}
|
||||
|
||||
def handle_get_user_event_ranking_api_request(self, data: Dict) -> Dict:
|
||||
#user_event_ranking_list = self.data.item.get_event_ranking(data["userId"])
|
||||
#if user_event_ranking_list is None: return {}
|
||||
|
||||
evt_ranking = []
|
||||
#for evt in user_event_ranking_list:
|
||||
# tmp = evt._asdict()
|
||||
# tmp.pop("id")
|
||||
# tmp.pop("user")
|
||||
# evt_ranking.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(evt_ranking),
|
||||
"userEventRankingList": evt_ranking,
|
||||
}
|
||||
|
||||
def handle_get_user_login_bonus_api_request(self, data: Dict) -> Dict:
|
||||
user_login_bonus_list = self.data.item.get_login_bonuses(data["userId"])
|
||||
if user_login_bonus_list is None: return {}
|
||||
|
||||
login_bonuses = []
|
||||
for scenerio in user_login_bonus_list:
|
||||
tmp = scenerio._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
login_bonuses.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(login_bonuses),
|
||||
"userLoginBonusList": login_bonuses
|
||||
}
|
||||
|
||||
def handle_get_user_bp_base_request(self, data: Dict) -> Dict:
|
||||
p = self.data.profile.get_profile(self.game, self.version, user_id = data["userId"])
|
||||
if p is None: return {}
|
||||
profile = json.loads(p["data"])
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(profile["userBpBaseList"]),
|
||||
"userBpBaseList": profile["userBpBaseList"],
|
||||
}
|
||||
|
||||
def handle_get_user_recent_rating_api_request(self, data: Dict) -> Dict:
|
||||
recent_rating = self.data.profile.get_profile_recent_rating(data["userId"])
|
||||
if recent_rating is None: return {}
|
||||
|
||||
userRecentRatingList = recent_rating["recentRating"]
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(userRecentRatingList),
|
||||
"userRecentRatingList": userRecentRatingList,
|
||||
}
|
||||
|
||||
def handle_get_user_activity_api_request(self, data: Dict) -> Dict:
|
||||
activity = self.data.profile.get_profile_activity(data["userId"], data["kind"])
|
||||
if activity is None: return {}
|
||||
|
||||
user_activity = []
|
||||
|
||||
for act in activity:
|
||||
user_activity.append({
|
||||
"kind": act["kind"],
|
||||
"id": act["activityId"],
|
||||
"sortNumber": act["sortNumber"],
|
||||
"param1": act["param1"],
|
||||
"param2": act["param2"],
|
||||
"param3": act["param3"],
|
||||
"param4": act["param4"],
|
||||
})
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(user_activity),
|
||||
"kind": data["kind"],
|
||||
"userActivityList": user_activity
|
||||
}
|
||||
|
||||
def handle_get_user_story_api_request(self, data: Dict) -> Dict:
|
||||
user_stories = self.data.item.get_stories(data["userId"])
|
||||
if user_stories is None: return {}
|
||||
|
||||
story_list = []
|
||||
for story in user_stories:
|
||||
tmp = story._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
story_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(story_list),
|
||||
"userStoryList": story_list
|
||||
}
|
||||
|
||||
def handle_get_user_chapter_api_request(self, data: Dict) -> Dict:
|
||||
user_chapters = self.data.item.get_chapters(data["userId"])
|
||||
if user_chapters is None: return {}
|
||||
|
||||
chapter_list = []
|
||||
for chapter in user_chapters:
|
||||
tmp = chapter._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
chapter_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(chapter_list),
|
||||
"userChapterList": chapter_list
|
||||
}
|
||||
|
||||
def handle_get_user_training_room_by_key_api_request(self, data: Dict) -> Dict:
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": 0,
|
||||
"userTrainingRoomList": [],
|
||||
}
|
||||
|
||||
def handle_get_user_character_api_request(self, data: Dict) -> Dict:
|
||||
user_characters = self.data.item.get_characters(data["userId"])
|
||||
if user_characters is None: return {}
|
||||
|
||||
character_list = []
|
||||
for character in user_characters:
|
||||
tmp = character._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
character_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(character_list),
|
||||
"userCharacterList": character_list
|
||||
}
|
||||
|
||||
def handle_get_user_card_api_request(self, data: Dict) -> Dict:
|
||||
user_cards = self.data.item.get_cards(data["userId"])
|
||||
if user_cards is None: return {}
|
||||
|
||||
card_list = []
|
||||
for card in user_cards:
|
||||
tmp = card._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
card_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(card_list),
|
||||
"userCardList": card_list
|
||||
}
|
||||
|
||||
def handle_get_user_deck_by_key_api_request(self, data: Dict) -> Dict:
|
||||
# Auth key doesn't matter, it just wants all the decks
|
||||
decks = self.data.item.get_decks(data["userId"])
|
||||
if decks is None: return {}
|
||||
|
||||
deck_list = []
|
||||
for deck in decks:
|
||||
tmp = deck._asdict()
|
||||
tmp.pop("user")
|
||||
tmp.pop("id")
|
||||
deck_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(deck_list),
|
||||
"userDeckList": deck_list,
|
||||
}
|
||||
|
||||
def handle_get_user_trade_item_api_request(self, data: Dict) -> Dict:
|
||||
user_trade_items = self.data.item.get_trade_items(data["userId"])
|
||||
if user_trade_items is None: return {}
|
||||
|
||||
trade_item_list = []
|
||||
for trade_item in user_trade_items:
|
||||
tmp = trade_item._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
trade_item_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(trade_item_list),
|
||||
"userTradeItemList": trade_item_list,
|
||||
}
|
||||
|
||||
def handle_get_user_scenario_api_request(self, data: Dict) -> Dict:
|
||||
user_scenerio = self.data.item.get_scenerios(data["userId"])
|
||||
if user_scenerio is None: return {}
|
||||
|
||||
scenerio_list = []
|
||||
for scenerio in user_scenerio:
|
||||
tmp = scenerio._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
scenerio_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(scenerio_list),
|
||||
"userScenarioList": scenerio_list,
|
||||
}
|
||||
|
||||
def handle_get_user_ratinglog_api_request(self, data: Dict) -> Dict:
|
||||
rating_log = self.data.profile.get_profile_rating_log(data["userId"])
|
||||
if rating_log is None: return {}
|
||||
|
||||
userRatinglogList = []
|
||||
for rating in rating_log:
|
||||
tmp = rating._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
userRatinglogList.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(userRatinglogList),
|
||||
"userRatinglogList": userRatinglogList,
|
||||
}
|
||||
|
||||
def handle_get_user_mission_point_api_request(self, data: Dict) -> Dict:
|
||||
user_mission_point_list = self.data.item.get_mission_points(data["userId"])
|
||||
if user_mission_point_list is None: return {}
|
||||
|
||||
mission_point_list = []
|
||||
for evt_music in user_mission_point_list:
|
||||
tmp = evt_music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
mission_point_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(mission_point_list),
|
||||
"userMissionPointList": mission_point_list,
|
||||
}
|
||||
|
||||
def handle_get_user_event_point_api_request(self, data: Dict) -> Dict:
|
||||
user_event_point_list = self.data.item.get_event_points(data["userId"])
|
||||
if user_event_point_list is None: return {}
|
||||
|
||||
event_point_list = []
|
||||
for evt_music in user_event_point_list:
|
||||
tmp = evt_music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
event_point_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(event_point_list),
|
||||
"userEventPointList": event_point_list,
|
||||
}
|
||||
|
||||
def handle_get_user_music_item_api_request(self, data: Dict) -> Dict:
|
||||
user_music_item_list = self.data.item.get_music_items(data["userId"])
|
||||
if user_music_item_list is None: return {}
|
||||
|
||||
music_item_list = []
|
||||
for evt_music in user_music_item_list:
|
||||
tmp = evt_music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
music_item_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(music_item_list),
|
||||
"userMusicItemList": music_item_list,
|
||||
}
|
||||
|
||||
def handle_get_user_event_music_api_request(self, data: Dict) -> Dict:
|
||||
user_evt_music_list = self.data.item.get_event_music(data["userId"])
|
||||
if user_evt_music_list is None: return {}
|
||||
|
||||
evt_music_list = []
|
||||
for evt_music in user_evt_music_list:
|
||||
tmp = evt_music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
evt_music_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(evt_music_list),
|
||||
"userEventMusicList": evt_music_list,
|
||||
}
|
||||
|
||||
def handle_get_user_boss_api_request(self, data: Dict) -> Dict:
|
||||
p = self.data.item.get_bosses(data["userId"])
|
||||
if p is None: return {}
|
||||
|
||||
boss_list = []
|
||||
for boss in p:
|
||||
tmp = boss._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
boss_list.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(boss_list),
|
||||
"userBossList": boss_list,
|
||||
}
|
||||
|
||||
def handle_upsert_user_all_api_request(self, data: Dict) -> Dict:
|
||||
upsert = data["upsertUserAll"]
|
||||
user_id = data["userId"]
|
||||
|
||||
# The isNew fields are new as of Red and up. We just won't use them for now.
|
||||
|
||||
if "userData" in upsert and len(upsert["userData"]) > 0:
|
||||
self.data.profile.put_profile_data(user_id, self.version, upsert["userData"][0])
|
||||
|
||||
if "userOption" in upsert and len(upsert["userOption"]) > 0:
|
||||
self.data.profile.put_profile_options(user_id, upsert["userOption"][0])
|
||||
|
||||
if "userPlaylogList" in upsert:
|
||||
for playlog in upsert["userPlaylogList"]:
|
||||
self.data.score.put_playlog(user_id, playlog)
|
||||
|
||||
if "userActivityList" in upsert:
|
||||
for act in upsert["userActivityList"]:
|
||||
self.data.profile.put_profile_activity(user_id, act["kind"], act["id"], act["sortNumber"], act["param1"],
|
||||
act["param2"], act["param3"], act["param4"])
|
||||
|
||||
if "userRecentRatingList" in upsert:
|
||||
self.data.profile.put_profile_recent_rating(user_id, upsert["userRecentRatingList"])
|
||||
|
||||
if "userBpBaseList" in upsert:
|
||||
self.data.profile.put_profile_bp_list(user_id, upsert["userBpBaseList"])
|
||||
|
||||
if "userMusicDetailList" in upsert:
|
||||
for x in upsert["userMusicDetailList"]:
|
||||
self.data.score.put_best_score(user_id, x)
|
||||
|
||||
if "userCharacterList" in upsert:
|
||||
for x in upsert["userCharacterList"]:
|
||||
self.data.item.put_character(user_id, x)
|
||||
|
||||
if "userCardList" in upsert:
|
||||
for x in upsert["userCardList"]:
|
||||
self.data.item.put_card(user_id, x)
|
||||
|
||||
if "userDeckList" in upsert:
|
||||
for x in upsert["userDeckList"]:
|
||||
self.data.item.put_deck(user_id, x)
|
||||
|
||||
if "userTrainingRoomList" in upsert:
|
||||
for x in upsert["userTrainingRoomList"]:
|
||||
self.data.profile.put_training_room(user_id, x)
|
||||
|
||||
if "userStoryList" in upsert:
|
||||
for x in upsert["userStoryList"]:
|
||||
self.data.item.put_story(user_id, x)
|
||||
|
||||
if "userChapterList" in upsert:
|
||||
for x in upsert["userChapterList"]:
|
||||
self.data.item.put_chapter(user_id, x)
|
||||
|
||||
if "userItemList" in upsert:
|
||||
for x in upsert["userItemList"]:
|
||||
self.data.item.put_item(user_id, x)
|
||||
|
||||
if "userMusicItemList" in upsert:
|
||||
for x in upsert["userMusicItemList"]:
|
||||
self.data.item.put_music_item(user_id, x)
|
||||
|
||||
if "userLoginBonusList" in upsert:
|
||||
for x in upsert["userLoginBonusList"]:
|
||||
self.data.item.put_login_bonus(user_id, x)
|
||||
|
||||
if "userEventPointList" in upsert:
|
||||
for x in upsert["userEventPointList"]:
|
||||
self.data.item.put_event_point(user_id, x)
|
||||
|
||||
if "userMissionPointList" in upsert:
|
||||
for x in upsert["userMissionPointList"]:
|
||||
self.data.item.put_mission_point(user_id, x)
|
||||
|
||||
if "userRatinglogList" in upsert:
|
||||
for x in upsert["userRatinglogList"]:
|
||||
self.data.profile.put_profile_rating_log(user_id, x["dataVersion"], x["highestRating"])
|
||||
|
||||
if "userBossList" in upsert:
|
||||
for x in upsert["userBossList"]:
|
||||
self.data.item.put_boss(user_id, x)
|
||||
|
||||
if "userTechCountList" in upsert:
|
||||
for x in upsert["userTechCountList"]:
|
||||
self.data.score.put_tech_count(user_id, x)
|
||||
|
||||
if "userScenerioList" in upsert:
|
||||
for x in upsert["userScenerioList"]:
|
||||
self.data.item.put_scenerio(user_id, x)
|
||||
|
||||
if "userTradeItemList" in upsert:
|
||||
for x in upsert["userTradeItemList"]:
|
||||
self.data.item.put_trade_item(user_id, x)
|
||||
|
||||
if "userEventMusicList" in upsert:
|
||||
for x in upsert["userEventMusicList"]:
|
||||
self.data.item.put_event_music(user_id, x)
|
||||
|
||||
if "userTechEventList" in upsert:
|
||||
for x in upsert["userTechEventList"]:
|
||||
self.data.item.put_tech_event(user_id, x)
|
||||
|
||||
if "userKopList" in upsert:
|
||||
for x in upsert["userKopList"]:
|
||||
self.data.profile.put_kop(user_id, x)
|
||||
|
||||
return {'returnCode': 1, 'apiName': 'upsertUserAll'}
|
||||
|
||||
def handle_get_user_rival_api_request(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Added in Bright
|
||||
"""
|
||||
rival_list = self.data.profile.get_rivals(data["userId"])
|
||||
if rival_list is None or len(rival_list) < 1:
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": 0,
|
||||
"userRivalList": [],
|
||||
}
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(rival_list),
|
||||
"userRivalList": rival_list._asdict(),
|
||||
}
|
||||
|
||||
def handle_get_user_rival_data_api_reqiest(self, data:Dict) -> Dict:
|
||||
"""
|
||||
Added in Bright
|
||||
"""
|
||||
rivals = []
|
||||
|
||||
for rival in data["userRivalList"]:
|
||||
name = self.data.profile.get_profile_name(rival["rivalUserId"], self.version)
|
||||
if name is None:
|
||||
continue
|
||||
|
||||
rivals.append({
|
||||
"rivalUserId": rival["rival"],
|
||||
"rivalUserName": name
|
||||
})
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(rivals),
|
||||
"userRivalDataList": rivals,
|
||||
}
|
||||
|
||||
def handle_get_user_rival_music_api_request(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Added in Bright
|
||||
"""
|
||||
rival_id = data["rivalUserId"]
|
||||
next_idx = data["nextIndex"]
|
||||
max_ct = data["maxCount"]
|
||||
music = self.handle_get_user_music_api_request({
|
||||
"userId": rival_id,
|
||||
"nextIndex": next_idx,
|
||||
"maxCount": max_ct
|
||||
})
|
||||
|
||||
for song in music["userMusicList"]:
|
||||
song["userRivalMusicDetailList"] = song["userMusicDetailList"]
|
||||
song.pop("userMusicDetailList")
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"rivalUserId": rival_id,
|
||||
"length": music["length"],
|
||||
"nextIndex": music["nextIndex"],
|
||||
"userRivalMusicList": music["userMusicList"],
|
||||
}
|
||||
|
||||
@cached(2)
|
||||
def util_generate_music_list(self, user_id: int) -> List:
|
||||
music_detail = self.data.score.get_best_scores(user_id)
|
||||
song_list = []
|
||||
|
||||
for md in music_detail:
|
||||
found = False
|
||||
tmp = md._asdict()
|
||||
tmp.pop("user")
|
||||
tmp.pop("id")
|
||||
|
||||
for song in song_list:
|
||||
if song["userMusicDetailList"][0]["musicId"] == tmp["musicId"]:
|
||||
found = True
|
||||
song["userMusicDetailList"].append(tmp)
|
||||
song["length"] = len(song["userMusicDetailList"])
|
||||
break
|
||||
|
||||
if not found:
|
||||
song_list.append({
|
||||
"length": 1,
|
||||
"userMusicDetailList": [tmp]
|
||||
})
|
||||
|
||||
return song_list
|
Reference in New Issue
Block a user