mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-06 23:57:41 +08:00
119 lines
4.7 KiB
Python
119 lines
4.7 KiB
Python
from typing import Dict
|
|
|
|
from core.config import CoreConfig
|
|
from titles.mai2.buddies import Mai2Buddies
|
|
from titles.mai2.const import Mai2Constants
|
|
from titles.mai2.config import Mai2Config
|
|
|
|
|
|
class Mai2BuddiesPlus(Mai2Buddies):
|
|
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
|
super().__init__(cfg, game_cfg)
|
|
self.version = Mai2Constants.VER_MAIMAI_DX_BUDDIES_PLUS
|
|
|
|
async def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
|
|
user_data = await super().handle_cm_get_user_preview_api_request(data)
|
|
|
|
# hardcode lastDataVersion for CardMaker
|
|
user_data["lastDataVersion"] = "1.45.00"
|
|
return user_data
|
|
|
|
async def handle_get_game_weekly_data_api_request(self, data: Dict) -> Dict:
|
|
return {
|
|
"gameWeeklyData": {
|
|
"missionCategory": 0,
|
|
"updateDate": "2024-03-21 09:00:00",
|
|
"beforeDate": "2099-12-31 00:00:00"
|
|
}
|
|
}
|
|
|
|
async def handle_create_token_api_request(self, data: Dict) -> Dict:
|
|
return {
|
|
"Bearer": "ARTEMiSTOKEN" # duplicate of handle_user_login_api_request from Mai2Festival
|
|
}
|
|
|
|
async def handle_remove_token_api_request(self, data: Dict) -> Dict:
|
|
return {}
|
|
|
|
async def handle_get_user_friend_bonus_api_request(self, data: Dict) -> Dict:
|
|
return {
|
|
"userId": data["userId"],
|
|
"returnCode": 1,
|
|
"getMiles": 0
|
|
}
|
|
|
|
async def handle_get_user_shop_stock_api_request(self, data: Dict) -> Dict:
|
|
return {
|
|
"userId": data["userId"],
|
|
"userShopStockList": []
|
|
}
|
|
|
|
async def handle_get_user_mission_data_api_request(self, data: Dict) -> Dict:
|
|
return {
|
|
"userId": data["userId"],
|
|
"userMissionDataList": [],
|
|
"userWeeklyData": {
|
|
"lastLoginWeek": "2024-03-21 09:00:00",
|
|
"beforeLoginWeek": "2099-12-31 00:00:00",
|
|
"friendBonusFlag": False
|
|
}
|
|
}
|
|
|
|
async def handle_get_user_friend_check_api_request(self, data: Dict) -> Dict:
|
|
user1rivalList = await self.data.profile.get_rivals(data["userId1"])
|
|
user2rivalList = await self.data.profile.get_rivals(data["userId2"])
|
|
|
|
is_user2_in_user1_rivals = any(rival["rival"] == data["userId2"] for rival in user1rivalList)
|
|
is_user1_in_user2_rivals = any(rival["rival"] == data["userId1"] for rival in user2rivalList)
|
|
|
|
if is_user2_in_user1_rivals and is_user1_in_user2_rivals:
|
|
return {"returnCode": 0}
|
|
else:
|
|
return {"returnCode": 1}
|
|
|
|
async def handle_user_friend_regist_api_request(self, data: Dict) -> Dict:
|
|
user1rivalList = await self.data.profile.get_rivals(data["userId1"]) or []
|
|
user2rivalList = await self.data.profile.get_rivals(data["userId2"]) or []
|
|
|
|
is_user2_in_user1_rivals = any(row.rival == data["userId2"] for row in user1rivalList)
|
|
is_user1_in_user2_rivals = any(row.rival == data["userId1"] for row in user2rivalList)
|
|
user1_show_count = sum(1 for row in user1rivalList if row.show is True)
|
|
user2_show_count = sum(1 for row in user2rivalList if row.show is True)
|
|
|
|
# initialize returnCode
|
|
returnCode1 = 2
|
|
returnCode2 = 2
|
|
|
|
# Case1 no rival
|
|
if not is_user2_in_user1_rivals and not is_user1_in_user2_rivals:
|
|
if user1_show_count >= 3 and user2_show_count >= 3:
|
|
returnCode1, returnCode2 = 1, 1
|
|
elif user1_show_count >= 3:
|
|
returnCode1, returnCode2 = 1, 2
|
|
elif user2_show_count >= 3:
|
|
returnCode1, returnCode2 = 2, 1
|
|
|
|
# Case2 has single rival
|
|
elif is_user2_in_user1_rivals != is_user1_in_user2_rivals:
|
|
if user1_show_count >= 3 and user2_show_count >= 3:
|
|
returnCode1, returnCode2 = 1, 1
|
|
elif user1_show_count >= 3:
|
|
returnCode1, returnCode2 = 1, 2
|
|
elif user2_show_count >= 3:
|
|
returnCode1, returnCode2 = 2, 1
|
|
|
|
# execute add_rival and show_rival
|
|
if not is_user2_in_user1_rivals:
|
|
await self.data.profile.add_rival(data["userId1"], data["userId2"])
|
|
if returnCode1 == 2 and user1_show_count < 3:
|
|
await self.data.profile.set_rival_shown(data["userId1"], data["userId2"], True)
|
|
|
|
if not is_user1_in_user2_rivals:
|
|
await self.data.profile.add_rival(data["userId2"], data["userId1"])
|
|
if returnCode2 == 2 and user2_show_count < 3:
|
|
await self.data.profile.set_rival_shown(data["userId2"], data["userId1"], True)
|
|
|
|
return {
|
|
"returnCode1": returnCode1,
|
|
"returnCode2": returnCode2
|
|
} |