fix: break circular import in horse racing commands

Extract shared.py from commands/__init__.py to break circular dependency:
- shared.py: shared variables/services/helper functions
- access.py: get_scope/check_access/get_event_id (canonical source)
- __init__.py: re-exports from shared.py for backward compat
- register/bet/race/help: import from .shared instead of package
This commit is contained in:
2026-05-02 15:38:17 +08:00
parent 5fae4a271a
commit a952760cf8
7 changed files with 1146 additions and 409 deletions

View File

@@ -1,14 +1,18 @@
import asyncio
from nonebot import on_command
from nonebot.adapters.onebot.v11 import Bot, Event
from . import (
from .shared import (
room_store, race_engine, config, logger,
get_scope, check_access, get_event_id,
_find_user_horse, _find_duplicate_horse, _get_horses_in_order,
_format_horse_label, _send_to_scope, _build_race_image_message,
_get_user_name, _normalize_horse_name,
run_race_with_settlement,
)
from ..models import HorseState, RoomState
from ..models import HorseState, RoomState, Horse
register_cmd = on_command("赛马报名", priority=5)
@register_cmd.handle()
async def handle_register(bot: Bot, event: Event):
@@ -25,7 +29,6 @@ async def handle_register(bot: Bot, event: Event):
if not horse_name:
scope = get_scope(event)
horse_name = await _get_user_name(bot, scope, user_id)
# Ensure name is not too long when using nickname as default
if len(horse_name) > 10:
horse_name = horse_name[:10]
@@ -67,8 +70,3 @@ async def handle_register(bot: Bot, event: Event):
count = len(room.horses)
registered_horse = room.horses[horse_name]
await register_cmd.finish(f"报名成功!{_format_horse_label(registered_horse)} 已加入比赛({count}/8")
cancel_cmd = on_command("赛马取消报名", priority=5)