47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
"""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}
|