Files
miku-discord/bot/routes/evil_mode.py

112 lines
4.0 KiB
Python
Raw Permalink Normal View History

"""Evil mode routes."""
from fastapi import APIRouter
from fastapi.responses import JSONResponse
import globals
from routes.models import EvilMoodSetRequest
from utils.logger import get_logger
logger = get_logger('api')
router = APIRouter()
@router.get("/evil-mode")
def get_evil_mode_status():
"""Get current evil mode status"""
from utils.evil_mode import is_evil_mode, get_current_evil_mood
evil_mode = is_evil_mode()
if evil_mode:
mood, mood_desc = get_current_evil_mood()
return {
"evil_mode": True,
"mood": mood,
"description": mood_desc,
"available_moods": globals.EVIL_AVAILABLE_MOODS
}
return {
"evil_mode": False,
"mood": None,
"description": None,
"available_moods": globals.EVIL_AVAILABLE_MOODS
}
@router.post("/evil-mode/enable")
def enable_evil_mode():
"""Enable evil mode"""
from utils.evil_mode import apply_evil_mode_changes
if globals.EVIL_MODE:
return {"status": "ok", "message": "Evil mode is already enabled", "evil_mode": True}
if globals.client and globals.client.loop and globals.client.loop.is_running():
globals.client.loop.create_task(apply_evil_mode_changes(globals.client))
return {"status": "ok", "message": "Evil mode enabled", "evil_mode": True}
else:
return JSONResponse(status_code=503, content={"status": "error", "message": "Discord client not ready"})
@router.post("/evil-mode/disable")
def disable_evil_mode():
"""Disable evil mode"""
from utils.evil_mode import revert_evil_mode_changes
if not globals.EVIL_MODE:
return {"status": "ok", "message": "Evil mode is already disabled", "evil_mode": False}
if globals.client and globals.client.loop and globals.client.loop.is_running():
globals.client.loop.create_task(revert_evil_mode_changes(globals.client))
return {"status": "ok", "message": "Evil mode disabled", "evil_mode": False}
else:
return JSONResponse(status_code=503, content={"status": "error", "message": "Discord client not ready"})
@router.post("/evil-mode/toggle")
def toggle_evil_mode():
"""Toggle evil mode on/off"""
from utils.evil_mode import apply_evil_mode_changes, revert_evil_mode_changes
if not globals.client or not globals.client.loop or not globals.client.loop.is_running():
return JSONResponse(status_code=503, content={"status": "error", "message": "Discord client not ready"})
if globals.EVIL_MODE:
globals.client.loop.create_task(revert_evil_mode_changes(globals.client))
return {"status": "ok", "message": "Evil mode disabled", "evil_mode": False}
else:
globals.client.loop.create_task(apply_evil_mode_changes(globals.client))
return {"status": "ok", "message": "Evil mode enabled", "evil_mode": True}
@router.get("/evil-mode/mood")
def get_evil_mood():
"""Get current evil mood"""
from utils.evil_mode import get_current_evil_mood
mood, mood_desc = get_current_evil_mood()
return {
"mood": mood,
"description": mood_desc,
"available_moods": globals.EVIL_AVAILABLE_MOODS
}
@router.post("/evil-mode/mood")
def set_evil_mood_endpoint(data: EvilMoodSetRequest):
"""Set evil mood"""
from utils.evil_mode import set_evil_mood, is_valid_evil_mood, update_all_evil_nicknames
if not is_valid_evil_mood(data.mood):
return JSONResponse(status_code=400, content={
"status": "error",
"message": f"Mood '{data.mood}' not recognized. Available evil moods: {', '.join(globals.EVIL_AVAILABLE_MOODS)}"
})
success = set_evil_mood(data.mood)
if success:
# Update nicknames if evil mode is active
if globals.EVIL_MODE and globals.client and globals.client.loop and globals.client.loop.is_running():
globals.client.loop.create_task(update_all_evil_nicknames(globals.client))
return {"status": "ok", "new_mood": data.mood}
return JSONResponse(status_code=500, content={"status": "error", "message": "Failed to set evil mood"})