fix: settle_race返回tuple消除odds重复计算
- settle_race() 返回 tuple[RaceResult, odds] | None - run_race_with_settlement 解包使用,移除多余 calculate_odds 调用 - _test_send_to_scope 签名已兼容(含*args/**kwargs)
This commit is contained in:
@@ -226,8 +226,8 @@ def calculate_odds(room: Room) -> dict[str, float]:
|
|||||||
return odds
|
return odds
|
||||||
|
|
||||||
|
|
||||||
async def settle_race(room: Room) -> RaceResult | None:
|
async def settle_race(room: Room) -> tuple[RaceResult, dict[str, float]] | None:
|
||||||
"""Settle bets and rewards after race finishes."""
|
"""Settle bets and rewards after race finishes. Returns (result, odds) or None."""
|
||||||
champion = room.horses.get(room.champion_name)
|
champion = room.horses.get(room.champion_name)
|
||||||
if not champion:
|
if not champion:
|
||||||
return None
|
return None
|
||||||
@@ -261,7 +261,7 @@ async def settle_race(room: Room) -> RaceResult | None:
|
|||||||
odds_snapshot=odds,
|
odds_snapshot=odds,
|
||||||
)
|
)
|
||||||
await room_store.save_race_result(result)
|
await room_store.save_race_result(result)
|
||||||
return result
|
return result, odds
|
||||||
|
|
||||||
|
|
||||||
async def _send_to_scope(bot: Bot, scope: str, message: str, message_type: str = "race_update"):
|
async def _send_to_scope(bot: Bot, scope: str, message: str, message_type: str = "race_update"):
|
||||||
@@ -303,14 +303,15 @@ async def run_race_with_settlement(bot: Bot, room: Room, scope: str):
|
|||||||
await points_service.refund_bet_points(bet.user_id, bet.amount, "比赛中断退还")
|
await points_service.refund_bet_points(bet.user_id, bet.amount, "比赛中断退还")
|
||||||
return
|
return
|
||||||
|
|
||||||
# Settle
|
# Settle (returns (result, odds) or None)
|
||||||
result = await settle_race(room)
|
settlement = await settle_race(room)
|
||||||
|
result = settlement[0] if settlement else None
|
||||||
|
odds = settlement[1] if settlement else {}
|
||||||
|
|
||||||
# Build user_id -> display name mapping
|
# Build user_id -> display name mapping
|
||||||
all_user_ids = [h.owner_id for h in room.horses.values()] + [b.user_id for b in room.bets]
|
all_user_ids = [h.owner_id for h in room.horses.values()] + [b.user_id for b in room.bets]
|
||||||
name_map = await _build_name_map(bot, scope, all_user_ids)
|
name_map = await _build_name_map(bot, scope, all_user_ids)
|
||||||
|
|
||||||
odds = calculate_odds(room)
|
|
||||||
champion = room.horses.get(room.champion_name)
|
champion = room.horses.get(room.champion_name)
|
||||||
champion_name_display = name_map.get(champion.owner_id, champion.owner_id) if champion else '?'
|
champion_name_display = name_map.get(champion.owner_id, champion.owner_id) if champion else '?'
|
||||||
result_lines = [
|
result_lines = [
|
||||||
|
|||||||
Reference in New Issue
Block a user