fix(daily-challenge): correct the duration

This commit is contained in:
MingxuanGame
2025-08-09 15:38:15 +00:00
parent 7f224aee8d
commit cc0413ea41

View File

@@ -19,7 +19,7 @@ from sqlmodel.ext.asyncio.session import AsyncSession
async def create_daily_challenge_room( async def create_daily_challenge_room(
beatmap: int, ruleset_id: int, required_mods: list[APIMod] = [] beatmap: int, ruleset_id: int, duration: int, required_mods: list[APIMod] = []
) -> Room: ) -> Room:
async with AsyncSession(engine) as session: async with AsyncSession(engine) as session:
today = datetime.now(UTC).date() today = datetime.now(UTC).date()
@@ -38,7 +38,7 @@ async def create_daily_challenge_room(
) )
], ],
category=RoomCategory.DAILY_CHALLENGE, category=RoomCategory.DAILY_CHALLENGE,
duration=24 * 60 - 2, # remain 2 minute to apply new daily challenge duration=duration,
) )
@@ -46,9 +46,9 @@ async def create_daily_challenge_room(
async def daily_challenge_job(): async def daily_challenge_job():
from app.signalr.hub import MetadataHubs from app.signalr.hub import MetadataHubs
today = datetime.now(UTC).date() now = datetime.now(UTC)
redis = get_redis() redis = get_redis()
key = f"daily_challenge:{today}" key = f"daily_challenge:{now.date()}"
if not await redis.exists(key): if not await redis.exists(key):
return return
async with AsyncSession(engine) as session: async with AsyncSession(engine) as session:
@@ -70,7 +70,7 @@ async def daily_challenge_job():
if beatmap is None or ruleset_id is None: if beatmap is None or ruleset_id is None:
logger.warning( logger.warning(
f"[DailyChallenge] Missing required data for daily challenge {today}." f"[DailyChallenge] Missing required data for daily challenge {now}."
" Will try again in 5 minutes." " Will try again in 5 minutes."
) )
get_scheduler().add_job( get_scheduler().add_job(
@@ -87,10 +87,14 @@ async def daily_challenge_job():
if required_mods: if required_mods:
mods_list = json.loads(required_mods) mods_list = json.loads(required_mods)
next_day = (now + timedelta(days=1)).replace(
hour=0, minute=0, second=0, microsecond=0
)
room = await create_daily_challenge_room( room = await create_daily_challenge_room(
beatmap=beatmap_int, beatmap=beatmap_int,
ruleset_id=ruleset_id_int, ruleset_id=ruleset_id_int,
required_mods=mods_list, required_mods=mods_list,
duration=int((next_day - now - timedelta(minutes=2)).total_seconds() / 60),
) )
await MetadataHubs.broadcast_call( await MetadataHubs.broadcast_call(
"DailyChallengeUpdated", DailyChallengeInfo(room_id=room.id) "DailyChallengeUpdated", DailyChallengeInfo(room_id=room.id)