mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-14 11:47:28 +08:00
maimai: Initial Festival support
This commit is contained in:
@@ -71,12 +71,12 @@ map = Table(
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("map_id", Integer, nullable=False),
|
||||
Column("mapId", Integer, nullable=False),
|
||||
Column("distance", Integer, nullable=False),
|
||||
Column("is_lock", Boolean, nullable=False, server_default="0"),
|
||||
Column("is_clear", Boolean, nullable=False, server_default="0"),
|
||||
Column("is_complete", Boolean, nullable=False, server_default="0"),
|
||||
UniqueConstraint("user", "map_id", name="mai2_item_map_uk"),
|
||||
Column("isLock", Boolean, nullable=False, server_default="0"),
|
||||
Column("isClear", Boolean, nullable=False, server_default="0"),
|
||||
Column("isComplete", Boolean, nullable=False, server_default="0"),
|
||||
UniqueConstraint("user", "mapId", name="mai2_item_map_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
@@ -89,11 +89,11 @@ login_bonus = Table(
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("bonus_id", Integer, nullable=False),
|
||||
Column("bonusId", Integer, nullable=False),
|
||||
Column("point", Integer, nullable=False),
|
||||
Column("is_current", Boolean, nullable=False, server_default="0"),
|
||||
Column("is_complete", Boolean, nullable=False, server_default="0"),
|
||||
UniqueConstraint("user", "bonus_id", name="mai2_item_login_bonus_uk"),
|
||||
Column("isCurrent", Boolean, nullable=False, server_default="0"),
|
||||
Column("isComplete", Boolean, nullable=False, server_default="0"),
|
||||
UniqueConstraint("user", "bonusId", name="mai2_item_login_bonus_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
@@ -106,13 +106,15 @@ friend_season_ranking = Table(
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("season_id", Integer, nullable=False),
|
||||
Column("seasonId", Integer, nullable=False),
|
||||
Column("point", Integer, nullable=False),
|
||||
Column("rank", Integer, nullable=False),
|
||||
Column("reward_get", Boolean, nullable=False),
|
||||
Column("user_name", String(8), nullable=False),
|
||||
Column("record_date", String(255), nullable=False),
|
||||
UniqueConstraint("user", "season_id", "user_name", name="mai2_item_login_bonus_uk"),
|
||||
Column("rewardGet", Boolean, nullable=False),
|
||||
Column("userName", String(8), nullable=False),
|
||||
Column("recordDate", TIMESTAMP, nullable=False),
|
||||
UniqueConstraint(
|
||||
"user", "seasonId", "userName", name="mai2_item_friend_season_ranking_uk"
|
||||
),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
@@ -293,18 +295,18 @@ class Mai2ItemData(BaseData):
|
||||
) -> None:
|
||||
sql = insert(map).values(
|
||||
user=user_id,
|
||||
map_id=map_id,
|
||||
mapId=map_id,
|
||||
distance=distance,
|
||||
is_lock=is_lock,
|
||||
is_clear=is_clear,
|
||||
is_complete=is_complete,
|
||||
isLock=is_lock,
|
||||
isClear=is_clear,
|
||||
isComplete=is_complete,
|
||||
)
|
||||
|
||||
conflict = sql.on_duplicate_key_update(
|
||||
distance=distance,
|
||||
is_lock=is_lock,
|
||||
is_clear=is_clear,
|
||||
is_complete=is_complete,
|
||||
isLock=is_lock,
|
||||
isClear=is_clear,
|
||||
isComplete=is_complete,
|
||||
)
|
||||
|
||||
result = self.execute(conflict)
|
||||
@@ -324,7 +326,7 @@ class Mai2ItemData(BaseData):
|
||||
return result.fetchall()
|
||||
|
||||
def get_map(self, user_id: int, map_id: int) -> Optional[Row]:
|
||||
sql = map.select(and_(map.c.user == user_id, map.c.map_id == map_id))
|
||||
sql = map.select(and_(map.c.user == user_id, map.c.mapId == map_id))
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
@@ -341,16 +343,16 @@ class Mai2ItemData(BaseData):
|
||||
) -> None:
|
||||
sql = insert(character).values(
|
||||
user=user_id,
|
||||
character_id=character_id,
|
||||
characterId=character_id,
|
||||
level=level,
|
||||
awakening=awakening,
|
||||
use_count=use_count,
|
||||
useCount=use_count,
|
||||
)
|
||||
|
||||
conflict = sql.on_duplicate_key_update(
|
||||
level=level,
|
||||
awakening=awakening,
|
||||
use_count=use_count,
|
||||
useCount=use_count,
|
||||
)
|
||||
|
||||
result = self.execute(conflict)
|
||||
@@ -385,7 +387,25 @@ class Mai2ItemData(BaseData):
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
return result.fetchall()
|
||||
|
||||
def put_friend_season_ranking(
|
||||
self, aime_id: int, friend_season_ranking_data: Dict
|
||||
) -> Optional[int]:
|
||||
sql = insert(friend_season_ranking).values(
|
||||
user=aime_id, **friend_season_ranking_data
|
||||
)
|
||||
|
||||
conflict = sql.on_duplicate_key_update(**friend_season_ranking_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_friend_season_ranking: failed to insert",
|
||||
f"friend_season_ranking! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_favorite(
|
||||
self, user_id: int, kind: int, item_id_list: List[int]
|
||||
|
||||
@@ -158,6 +158,7 @@ extend = Table(
|
||||
Column("sortMusicSetting", Integer),
|
||||
Column("selectedCardList", JSON),
|
||||
Column("encountMapNpcList", JSON),
|
||||
Column("playStatusSetting", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "version", name="mai2_profile_extend_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
@@ -178,6 +179,7 @@ option = Table(
|
||||
Column("slideSpeed", Integer),
|
||||
Column("touchSpeed", Integer),
|
||||
Column("tapDesign", Integer),
|
||||
Column("tapSe", Integer, server_default="0"),
|
||||
Column("holdDesign", Integer),
|
||||
Column("slideDesign", Integer),
|
||||
Column("starType", Integer),
|
||||
@@ -298,8 +300,8 @@ class Mai2ProfileData(BaseData):
|
||||
|
||||
def get_profile_detail(self, user_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(detail).where(
|
||||
and_(detail.c.user == user_id, detail.c.version == version)
|
||||
)
|
||||
and_(detail.c.user == user_id, detail.c.version <= version)
|
||||
).order_by(detail.c.version.desc())
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
@@ -323,8 +325,8 @@ class Mai2ProfileData(BaseData):
|
||||
|
||||
def get_profile_ghost(self, user_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(ghost).where(
|
||||
and_(ghost.c.user == user_id, ghost.c.version_int == version)
|
||||
)
|
||||
and_(ghost.c.user == user_id, ghost.c.version_int <= version)
|
||||
).order_by(ghost.c.version.desc())
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
@@ -348,8 +350,8 @@ class Mai2ProfileData(BaseData):
|
||||
|
||||
def get_profile_extend(self, user_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(extend).where(
|
||||
and_(extend.c.user == user_id, extend.c.version == version)
|
||||
)
|
||||
and_(extend.c.user == user_id, extend.c.version <= version)
|
||||
).order_by(extend.c.version.desc())
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
@@ -373,8 +375,8 @@ class Mai2ProfileData(BaseData):
|
||||
|
||||
def get_profile_option(self, user_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(option).where(
|
||||
and_(option.c.user == user_id, option.c.version == version)
|
||||
)
|
||||
and_(option.c.user == user_id, option.c.version <= version)
|
||||
).order_by(option.c.version.desc())
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
@@ -398,8 +400,8 @@ class Mai2ProfileData(BaseData):
|
||||
|
||||
def get_profile_rating(self, user_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(rating).where(
|
||||
and_(rating.c.user == user_id, rating.c.version == version)
|
||||
)
|
||||
and_(rating.c.user == user_id, rating.c.version <= version)
|
||||
).order_by(rating.c.version.desc())
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
|
||||
@@ -25,6 +25,7 @@ best_score = Table(
|
||||
Column("syncStatus", Integer),
|
||||
Column("deluxscoreMax", Integer),
|
||||
Column("scoreRank", Integer),
|
||||
Column("extNum1", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "musicId", "level", name="mai2_score_best_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
@@ -143,6 +144,7 @@ playlog = Table(
|
||||
Column("isNewFree", Boolean),
|
||||
Column("extNum1", Integer),
|
||||
Column("extNum2", Integer),
|
||||
Column("extNum4", Integer, server_default="0"),
|
||||
Column("trialPlayAchievement", Integer),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
@@ -16,6 +16,7 @@ event = Table(
|
||||
Column("eventId", Integer),
|
||||
Column("type", Integer),
|
||||
Column("name", String(255)),
|
||||
Column("startDate", TIMESTAMP, server_default=func.now()),
|
||||
Column("enabled", Boolean, server_default="1"),
|
||||
UniqueConstraint("version", "eventId", "type", name="mai2_static_event_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
@@ -108,7 +109,7 @@ class Mai2StaticData(BaseData):
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def toggle_game_events(
|
||||
def toggle_game_event(
|
||||
self, version: int, event_id: int, toggle: bool
|
||||
) -> Optional[List]:
|
||||
sql = event.update(
|
||||
@@ -118,7 +119,7 @@ class Mai2StaticData(BaseData):
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.warning(
|
||||
f"toggle_game_events: Failed to update event! event_id {event_id} toggle {toggle}"
|
||||
f"toggle_game_event: Failed to update event! event_id {event_id} toggle {toggle}"
|
||||
)
|
||||
return result.last_updated_params()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user