forked from Hay1tsme/artemis
mai2: add rivals support
This commit is contained in:
parent
123ec99a97
commit
eccbd1ad81
@ -942,6 +942,64 @@ class Mai2Base:
|
|||||||
"itemId": -1,
|
"itemId": -1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async def handle_get_user_rival_data_api_request(self, data: Dict) -> Dict:
|
||||||
|
user_id = data.get("userId", 0)
|
||||||
|
rival_id = data.get("rivalId", 0)
|
||||||
|
|
||||||
|
if not user_id or not rival_id: return {}
|
||||||
|
|
||||||
|
rival_pf = await self.data.profile.get_profile_detail(rival_id)
|
||||||
|
if not rival_pf: return {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"userId": user_id,
|
||||||
|
"userRivalData": {
|
||||||
|
"rivalId": rival_id,
|
||||||
|
"rivalName": rival_pf['userName']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async def handle_get_user_rival_music_api_request(self, data: Dict) -> Dict:
|
||||||
|
user_id = data.get("userId", 0)
|
||||||
|
rival_id = data.get("rivalId", 0)
|
||||||
|
next_index = data.get("nextIndex", 0)
|
||||||
|
max_ct = 100
|
||||||
|
upper_lim = next_index + max_ct
|
||||||
|
rival_music_list: Dict[int, List] = {}
|
||||||
|
|
||||||
|
songs = await self.data.score.get_best_scores(rival_id)
|
||||||
|
if songs is None:
|
||||||
|
self.logger.debug("handle_get_user_rival_music_api_request: get_best_scores returned None!")
|
||||||
|
return {
|
||||||
|
"userId": user_id,
|
||||||
|
"rivalId": rival_id,
|
||||||
|
"nextIndex": 0,
|
||||||
|
"userRivalMusicList": [] # musicId userRivalMusicDetailList -> level achievement deluxscoreMax
|
||||||
|
}
|
||||||
|
|
||||||
|
num_user_songs = len(songs)
|
||||||
|
|
||||||
|
for x in range(next_index, upper_lim):
|
||||||
|
|
||||||
|
tmp = songs[x]._asdict()
|
||||||
|
if tmp['musicId'] in rival_music_list:
|
||||||
|
rival_music_list[tmp['musicId']].append([{"level": tmp['level'], 'achievement': tmp['achievement'], 'deluxscoreMax': tmp['deluxscoreMax']}])
|
||||||
|
|
||||||
|
else:
|
||||||
|
if len(rival_music_list) >= max_ct:
|
||||||
|
break
|
||||||
|
rival_music_list[tmp['musicId']] = [{"level": tmp['level'], 'achievement': tmp['achievement'], 'deluxscoreMax': tmp['deluxscoreMax']}]
|
||||||
|
|
||||||
|
next_index = 0 if len(rival_music_list) < max_ct or num_user_songs == upper_lim else upper_lim
|
||||||
|
self.logger.info(f"Send rival {rival_id} songs {next_index}-{upper_lim} ({len(rival_music_list)}) out of {num_user_songs} for user {user_id} (next idx {next_index})")
|
||||||
|
|
||||||
|
return {
|
||||||
|
"userId": user_id,
|
||||||
|
"rivalId": rival_id,
|
||||||
|
"nextIndex": next_index,
|
||||||
|
"userRivalMusicList": [{"musicId": x, "userRivalMusicDetailList": y} for x, y in rival_music_list.items()]
|
||||||
|
}
|
||||||
|
|
||||||
# CardMaker support added in Universe
|
# CardMaker support added in Universe
|
||||||
async def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
|
async def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
|
||||||
p = await self.data.profile.get_profile_detail(data["userId"], self.version)
|
p = await self.data.profile.get_profile_detail(data["userId"], self.version)
|
||||||
|
@ -319,16 +319,16 @@ class Mai2ScoreData(BaseData):
|
|||||||
sql = best_score.select(
|
sql = best_score.select(
|
||||||
and_(
|
and_(
|
||||||
best_score.c.user == user_id,
|
best_score.c.user == user_id,
|
||||||
(best_score.c.song_id == song_id) if song_id is not None else True,
|
(best_score.c.musicId == song_id) if song_id is not None else True,
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
).order_by(best_score.c.musicId).order_by(best_score.c.level)
|
||||||
else:
|
else:
|
||||||
sql = best_score_old.select(
|
sql = best_score_old.select(
|
||||||
and_(
|
and_(
|
||||||
best_score_old.c.user == user_id,
|
best_score_old.c.user == user_id,
|
||||||
(best_score_old.c.song_id == song_id) if song_id is not None else True,
|
(best_score_old.c.musicId == song_id) if song_id is not None else True,
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
).order_by(best_score.c.musicId).order_by(best_score.c.level)
|
||||||
|
|
||||||
result = await self.execute(sql)
|
result = await self.execute(sql)
|
||||||
if result is None:
|
if result is None:
|
||||||
|
Loading…
Reference in New Issue
Block a user