Code organization and refactoring

This commit is contained in:
2026-01-26 16:13:29 -05:00
parent 9c3b4c8335
commit a64f9a3d74
23 changed files with 495 additions and 396 deletions

46
routers/bot.py Normal file
View File

@@ -0,0 +1,46 @@
"""Discord bot control endpoints."""
from fastapi import APIRouter, HTTPException
from typing import Optional
from models import BotControl
from services.server_state import STATE
from services.bot_assignment import BotAssignmentManager
router = APIRouter(prefix="/api", tags=["bot"])
# Global reference to assignment manager (set by main.py)
assignment_manager: Optional[BotAssignmentManager] = None
def set_assignment_manager(manager: BotAssignmentManager):
"""Set the global assignment manager reference."""
global assignment_manager
assignment_manager = manager
@router.get("/bot_status")
async def api_bot_status():
"""Get current bot status"""
active_count = len(assignment_manager.active_targets) if assignment_manager else 0
return {
"bot_running": STATE.bot_running,
"active_assignments": active_count,
"discord_mappings_count": len(assignment_manager.discord_mapping) if assignment_manager else 0
}
@router.post("/bot_control")
async def api_bot_control(req: BotControl):
if req.action not in ("start", "stop"):
raise HTTPException(status_code=400, detail="invalid action")
STATE.bot_running = (req.action == "start")
# Start or stop the assignment manager
if assignment_manager:
if req.action == "start":
await assignment_manager.start()
else:
await assignment_manager.stop()
return {"status": "ok", "bot_running": STATE.bot_running}