# Miku Discord Bot — Commands & Features Reference > **Last updated:** February 18, 2026 > > Comprehensive documentation of every Discord command, API endpoint, and feature in the Miku bot. --- ## Table of Contents - [Discord Commands](#discord-commands) - [Voice Commands (`!miku`)](#voice-commands-miku) - [UNO Commands (`!uno`)](#uno-commands-uno) - [Inline / Special Commands](#inline--special-commands) - [Conversational Features](#conversational-features) - [Addressing Miku](#addressing-miku) - [Direct Messages (DMs)](#direct-messages-dms) - [Media Analysis](#media-analysis) - [Image Generation](#image-generation) - [Kindness Reactions](#kindness-reactions) - [Mood System](#mood-system) - [Available Moods](#available-moods) - [Evil Mode Moods](#evil-mode-moods) - [Mood Auto-Detection](#mood-auto-detection) - [Personality Modes](#personality-modes) - [Evil Mode](#evil-mode) - [Bipolar Mode](#bipolar-mode) - [Persona Dialogue](#persona-dialogue) - [Voice Chat System](#voice-chat-system) - [Architecture](#voice-architecture) - [STT (Speech-to-Text)](#stt-speech-to-text) - [TTS (Text-to-Speech)](#tts-text-to-speech) - [Resource Locking](#resource-locking) - [Autonomous Behavior System](#autonomous-behavior-system) - [Memory System (Cheshire Cat)](#memory-system-cheshire-cat) - [Profile Picture System](#profile-picture-system) - [Language Modes](#language-modes) - [Figurine Notifier](#figurine-notifier) - [Web UI API Endpoints](#web-ui-api-endpoints) - [General Status](#general-status) - [Mood Management (DM)](#mood-management-dm) - [Mood Management (Per-Server)](#mood-management-per-server) - [Language](#language) - [Evil Mode API](#evil-mode-api) - [Bipolar Mode API](#bipolar-mode-api) - [GPU Selection](#gpu-selection) - [Autonomous Actions](#autonomous-actions) - [Profile Picture & Role Color](#profile-picture--role-color) - [Manual Messaging](#manual-messaging) - [Server Management](#server-management) - [DM Logging & Management](#dm-logging--management) - [DM Interaction Analysis](#dm-interaction-analysis) - [Image Generation API](#image-generation-api) - [Figurine DM Subscriptions](#figurine-dm-subscriptions) - [Chat Interface](#chat-interface) - [Voice Call Management](#voice-call-management) - [Memory (Cheshire Cat) API](#memory-cheshire-cat-api) - [Configuration Management](#configuration-management) - [Logging Configuration](#logging-configuration) - [Message Reactions](#message-reactions) - [Autonomous V2 Endpoints](#autonomous-v2-endpoints) - [Conversation Management](#conversation-management) --- ## Discord Commands ### Voice Commands (`!miku`) All voice commands are prefixed with `!miku` and must be used in a **server** (not DMs). | Command | Arguments | Description | File | |---------|-----------|-------------|------| | `!miku join` | `[#channel]` | Join the user's voice channel (or the mentioned channel). Locks GPU resources for voice. | `bot/commands/voice.py` ~L57 | | `!miku leave` | — | Leave the current voice channel and release all resources. | `bot/commands/voice.py` ~L131 | | `!miku voice-status` | — | Show current voice session status, resource allocation, and active features. | `bot/commands/voice.py` ~L168 | | `!miku test` | `[text]` | Test TTS audio playback with custom or default text. | `bot/commands/voice.py` ~L252 | | `!miku say` | `` | Send a message to the LLM, speak the response in voice chat. | `bot/commands/voice.py` ~L284 | | `!miku listen` | `[@user]` | Start listening to a user's voice via STT (defaults to command author). | `bot/commands/voice.py` ~L381 | | `!miku stop-listening` | `[@user]` | Stop listening to a user's voice (defaults to command author). | `bot/commands/voice.py` ~L431 | **Permissions required:** Bot needs `Connect` and `Speak` permissions in the target voice channel. --- ### UNO Commands (`!uno`) Miku can play UNO card games as Player 2, controlled via a Playwright browser automation. | Command | Arguments | Description | File | |---------|-----------|-------------|------| | `!uno join` | `` | Join an existing UNO game room as Player 2. | `bot/commands/uno.py` ~L25 | | `!uno list` | — | List all active UNO games Miku is playing. | `bot/commands/uno.py` ~L82 | | `!uno quit` | `[room_code]` | Quit a specific game (or all games if no code provided). | `bot/commands/uno.py` ~L106 | | `!uno help` | — | Show UNO command help and how to play. | `bot/commands/uno.py` ~L158 | **No special permissions required.** Miku uses AI to make strategic moves and trash-talks during games. --- ### Inline / Special Commands These are handled directly in the `on_message` handler in `bot/bot.py`: | Command / Trigger | Description | File | |-------------------|-------------|------| | `!monday` | Manually trigger the Monday video feature. Server messages only. | `bot/bot.py` ~L708 | | `miku, rape this nigga balls` | *Must be a reply to another message.* Overlays the replied-to user's name on the `MikuMikuBeam.mp4` video and sends it as a reply. Easter egg command. | `bot/bot.py` ~L196 | --- ## Conversational Features ### Addressing Miku Miku responds when she detects she is being addressed. The detection logic is in `bot/utils/core.py` (`is_miku_addressed`). **Miku will respond when:** - **In DMs:** Always responds to every message. - **@Mentioned** in a server channel. - **Replying** to one of Miku's messages. - **Her name is mentioned** — supports multiple scripts: - Latin: `miku` - Cyrillic: `мику` - Hiragana: `みく` - Katakana: `ミク` - Kanji: `未来` - Plus any combination with Japanese honorifics (`-chan`, `-san`, `-kun`, `-nyan`, `-senpai`, etc.) in all scripts. ### Direct Messages (DMs) - Any user can DM Miku directly and get a response. - DMs use the global `DM_MOOD` (auto-rotating) instead of per-server moods. - All DM conversations are logged for the admin Web UI. - Users can be **blocked** from DMs via the API. - The bot logs reactions added/removed in DM conversations. ### Media Analysis When a user sends media while addressing Miku, she analyzes it with the vision model: | Media Type | Supported Formats | Description | |------------|-------------------|-------------| | **Images** | `.jpg`, `.jpeg`, `.png`, `.webp` | Analyzed by Qwen vision model, then rephrased as Miku | | **Videos** | `.mp4`, `.webm`, `.mov` | Frames extracted, analyzed by vision model | | **GIFs** | `.gif` | Converted to MP4, frames extracted, analyzed | | **Tenor GIFs** | Discord `/gif` embeds | Extracted from Tenor URLs, processed as GIFs | | **Rich embeds** | Articles, images, videos, links | Text extracted and images/videos analyzed | All media analysis is blocked during active voice sessions. ### Image Generation Miku can generate images using ComfyUI when users make natural language requests. Detection is pattern-based in `bot/utils/image_generation.py`. **Trigger phrases include:** - "draw me a picture of..." - "generate an image of..." - "show me yourself swimming" - "can you paint..." - "I want to see you..." - "what do you look like?" Image generation is blocked during voice sessions. ### Kindness Reactions Defined in `bot/utils/kindness.py`. When users say kind things to Miku, she reacts with a heart emoji. **Keyword triggers:** "thank you", "love you", "luv u", "you're the best", "so cute", "adorable", "amazing", "sweet", "kind", "great job", "well done", "precious", "good girl", "cutie", "angel", "my favorite", "so helpful" **Heart reactions pool:** 💙 💝 💖 💕 💜 ❤️‍🔥 ☺️ Falls back to LLM-based kindness detection if keywords don't match. --- ## Mood System ### Available Moods Each mood changes Miku's personality, response style, and nickname emoji. Defined in `bot/moods/` (one `.txt` file per mood) and `bot/globals.py`. | Mood | Emoji | Description File | |------|-------|------------------| | `neutral` | *(none)* | `moods/neutral.txt` | | `bubbly` | ✨ | `moods/bubbly.txt` | | `sleepy` | 💤 | `moods/sleepy.txt` | | `curious` | 🔍 | `moods/curious.txt` | | `shy` | 🥺 | `moods/shy.txt` | | `serious` | 😐 | `moods/serious.txt` | | `excited` | 🎉 | `moods/excited.txt` | | `silly` | 🤪 | `moods/silly.txt` | | `melancholy` | 💙 | `moods/melancholy.txt` | | `flirty` | 💕 | `moods/flirty.txt` | | `romantic` | 💖 | `moods/romantic.txt` | | `irritated` | 😤 | `moods/irritated.txt` | | `angry` | 😠 | `moods/angry.txt` | | `asleep` | 😴 | `moods/asleep.txt` | **Mood behavior:** - **DM moods** rotate automatically on a schedule. - **Server moods** are per-server and can be set manually via the API or auto-detected from conversation tone. - Mood affects the system prompt, nickname emoji, and profile picture selection. - The `asleep` mood can only be reached from `sleepy` (prevents accidental sleep). ### Evil Mode Moods When Evil Mode is active, a separate mood set is used: | Evil Mood | Emoji | |-----------|-------| | `aggressive` | 👿 | | `cunning` | 🐍 | | `sarcastic` | 😈 | | `evil_neutral` | *(none)* | ### Mood Auto-Detection After Miku responds in a server, the system analyzes her response to detect if a mood shift occurred naturally. Handled by `detect_mood_shift()` in `bot/utils/moods.py`. If detected, the server mood updates automatically and the bot nickname updates. --- ## Personality Modes ### Evil Mode **File:** `bot/utils/evil_mode.py` Evil Mode transforms Miku into "Evil Miku" — an uncensored, darker alter ego. When enabled: - Uses the `EVIL_TEXT_MODEL` (DarkIdol uncensored model) instead of the standard text model. - Loads evil-specific prompts from `bot/evil_miku_prompt.txt`, `bot/evil_miku_lore.txt`, `bot/evil_miku_lyrics.txt`. - Changes the bot's username and profile picture across all servers. - Changes role color to a dark theme. - Uses the evil mood set (`aggressive`, `cunning`, `sarcastic`, `evil_neutral`). - State persists across restarts via `memory/evil_mode_state.json`. ### Bipolar Mode **File:** `bot/utils/bipolar_mode.py` When enabled, **both** Regular Miku and Evil Miku coexist. After Miku responds to a message, there's a chance (15%) the opposite persona "breaks through" and starts an argument. Arguments happen via Discord webhooks so both personas appear as different users. **Features:** - Minimum 4 exchanges before an argument can end. - 2-5 second delay between messages for realism. - Scoreboard tracks wins (`memory/bipolar_scoreboard.json`). - Webhooks are created per-channel and cached. - Paused during voice sessions. - Arguments can be manually triggered via the API. ### Persona Dialogue **File:** `bot/utils/persona_dialogue.py` After Miku sends a response in bipolar mode, the system checks if the opposite persona wants to "interject" and start a dialogue. This creates multi-turn conversations between the two Miku personas. --- ## Voice Chat System ### Voice Architecture The voice system uses a dual-GPU setup: - **AMD RX 6800 XT:** Text model inference + RVC (voice conversion) - **GTX 1660:** Soprano TTS (text-to-speech) ### STT (Speech-to-Text) **File:** `bot/utils/stt_client.py`, `bot/utils/voice_receiver.py` - Uses a separate STT server container. - Listens to user audio via Discord voice receive. - Transcribes speech and sends it to the LLM for a response. - Can be enabled per-user with `!miku listen`. ### TTS (Text-to-Speech) **File:** `bot/utils/voice_audio.py` - Streams LLM output tokens directly to Soprano TTS. - Audio is played back through the Discord voice connection. - RVC converts the voice to sound like Miku. ### Resource Locking When a voice session is active, the following features are **blocked**: - ❌ Vision model (images/videos can't be analyzed) - ❌ Image generation (ComfyUI) - ❌ Bipolar mode arguments - ❌ Profile picture changes - ⏸️ Autonomous engine (paused) - ⏸️ Scheduled events (paused) - 📦 Other text channel messages (queued for later) Resources are fully released when the session ends with `!miku leave`. --- ## Autonomous Behavior System **Files:** `bot/utils/autonomous.py`, `bot/utils/autonomous_engine.py`, `bot/utils/autonomous_v1_legacy.py` Miku has an AI-driven autonomous system (V2) that decides when and how to interact without being prompted. The system uses context signals and mood profiles to make decisions. **Autonomous actions:** | Action | Description | |--------|-------------| | `general` | Say something spontaneous in the autonomous channel | | `engage_user` | Engage a random active user (based on activity, status, etc.) | | `share_tweet` | Share a Miku-related tweet | | `join_conversation` | Detect and join an ongoing conversation | | `change_profile_picture` | Autonomously change the bot's profile picture | | `reaction` | React to a recent message with an emoji | **Context signals the engine considers:** - Messages in the last 5 minutes / last hour - Unique active users - Conversation momentum - Users who recently joined / changed status / started activities - Time since last action / last interaction - Hour of day and whether it's a weekend - Current mood energy level **Scheduling:** Each server has its own autonomous tick scheduler. Actions are rate-limited (minimum 30s between actions). --- ## Memory System (Cheshire Cat) **Files:** `bot/utils/cat_client.py`, `cheshire-cat/` directory Miku uses the Cheshire Cat AI framework for long-term memory: - **Declarative memory:** Learned facts about users and the world. - **Episodic memory:** Conversation snippets and experiences. - Memories are stored in vector databases (Qdrant). - When enabled, all responses are augmented with relevant memories. - Falls back to direct LLM queries if Cat is unavailable. - Memory consolidation can be triggered manually (like a "sleep" process). - Individual memories can be created, edited, and deleted via the API. Toggle state: `USE_CHESHIRE_CAT` global (default: `true`). --- ## Profile Picture System **File:** `bot/utils/profile_picture_manager.py`, `bot/utils/danbooru_client.py`, `bot/utils/pfp_context.py` - Miku's profile picture can change based on mood. - Sources images from Danbooru (anime art database). - Extracts dominant colors for role color matching. - Face detection ensures the selected image has a face. - Saves a fallback image for restoration. - Can be triggered autonomously or manually via the API. - Custom images can be uploaded. --- ## Language Modes Miku supports switching between English and Japanese: - **English mode** (default): Uses the standard `TEXT_MODEL`. - **Japanese mode**: Uses `JAPANESE_TEXT_MODEL` (Llama 3.1 Swallow) for Japanese responses. - Persisted across restarts via `config_runtime.yaml`. --- ## Figurine Notifier **File:** `bot/utils/figurine_notifier.py` DM-based subscription system for Miku figurine notifications: - Users can subscribe/unsubscribe to figurine alerts. - When new Miku figurines are posted (via tweet URLs), subscribers get DMs. - Individual or bulk DM sending supported. --- ## Web UI API Endpoints The bot runs a FastAPI server on port `3939` for the Web UI dashboard. All endpoints are defined in `bot/api.py`. ### General Status | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/` | Serve the Web UI dashboard | | `GET` | `/status` | Bot status, DM mood, server count, per-server moods | | `GET` | `/logs` | Last 100 lines of `bot.log` | | `GET` | `/prompt` | Last full prompt sent to the LLM | ### Mood Management (DM) | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/mood` | Get current DM mood and description | | `POST` | `/mood` | Set DM mood (`{ "mood": "bubbly" }`) | | `POST` | `/mood/reset` | Reset DM mood to `neutral` | | `POST` | `/mood/calm` | Calm DM mood to `neutral` | | `GET` | `/moods/available` | List all available mood names | ### Mood Management (Per-Server) | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/servers/{guild_id}/mood` | Get current mood for a server | | `POST` | `/servers/{guild_id}/mood` | Set mood for a server | | `POST` | `/servers/{guild_id}/mood/reset` | Reset server mood to `neutral` | | `GET` | `/servers/{guild_id}/mood/state` | Get complete mood state for a server | | `POST` | `/test/mood/{guild_id}` | Debug endpoint to test mood changes | ### Language | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/language` | Get current language mode and model | | `POST` | `/language/toggle` | Toggle between English and Japanese | | `POST` | `/language/set` | Set language (`?language=english` or `japanese`) | ### Evil Mode API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/evil-mode` | Get evil mode status and current mood | | `POST` | `/evil-mode/enable` | Enable evil mode | | `POST` | `/evil-mode/disable` | Disable evil mode | | `POST` | `/evil-mode/toggle` | Toggle evil mode | | `GET` | `/evil-mode/mood` | Get current evil mood | | `POST` | `/evil-mode/mood` | Set evil mood (`{ "mood": "aggressive" }`) | ### Bipolar Mode API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/bipolar-mode` | Status, active arguments, webhooks count | | `POST` | `/bipolar-mode/enable` | Enable bipolar mode | | `POST` | `/bipolar-mode/disable` | Disable bipolar mode | | `POST` | `/bipolar-mode/toggle` | Toggle bipolar mode | | `POST` | `/bipolar-mode/trigger-argument` | Manually trigger an argument in a channel | | `POST` | `/bipolar-mode/trigger-dialogue` | Force persona dialogue from a message | | `GET` | `/bipolar-mode/scoreboard` | Miku vs Evil Miku win/loss record | | `GET` | `/bipolar-mode/arguments` | Get all currently active arguments | | `POST` | `/bipolar-mode/cleanup-webhooks` | Clean up all bipolar webhooks | ### GPU Selection | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/gpu-status` | Current GPU selection (`nvidia` or `amd`) | | `POST` | `/gpu-select` | Switch GPU (`{ "gpu": "nvidia" }` or `"amd"`) | ### Autonomous Actions | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/autonomous/general` | Trigger a general autonomous message (all servers or `?guild_id=`) | | `POST` | `/autonomous/engage` | Trigger user engagement (`?guild_id=`, `?user_id=`, `?engagement_type=`) | | `POST` | `/autonomous/tweet` | Share a Miku tweet | | `POST` | `/autonomous/custom` | Send custom prompt as autonomous message (`{ "prompt": "..." }`) | | `POST` | `/autonomous/reaction` | Trigger an emoji reaction to a recent message | | `POST` | `/autonomous/join-conversation` | Detect and join an active conversation | | `GET` | `/autonomous/stats` | V1 autonomous engine stats for all servers | | `POST` | `/servers/{guild_id}/autonomous/general` | Trigger general message for one server | | `POST` | `/servers/{guild_id}/autonomous/engage` | Trigger engagement for one server | | `POST` | `/servers/{guild_id}/autonomous/custom` | Send custom prompt to one server | | `POST` | `/servers/{guild_id}/autonomous/tweet` | Share tweet in one server | ### Profile Picture & Role Color | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/profile-picture/change` | Change PFP (optional `file` upload, optional `?guild_id=`) | | `GET` | `/profile-picture/metadata` | Get current PFP metadata (source, tags, etc.) | | `POST` | `/profile-picture/restore-fallback` | Restore the original saved PFP | | `POST` | `/role-color/custom` | Set custom role color (form field `hex_color`) | | `POST` | `/role-color/reset-fallback` | Reset role color to Miku teal (#86cecb) | ### Manual Messaging | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/manual/send` | Send a message to a channel (supports files, replies) | | `POST` | `/manual/send-webhook` | Send as Miku or Evil Miku via webhook (`persona=miku|evil`) | | `POST` | `/dm/{user_id}/custom` | Send a custom LLM-generated DM to a user | | `POST` | `/dm/{user_id}/manual` | Send a manual DM message (supports files, replies) | ### Server Management | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/servers` | List all configured servers | | `POST` | `/servers` | Add a new server configuration | | `PUT` | `/servers/{guild_id}` | Update server configuration | | `DELETE` | `/servers/{guild_id}` | Remove a server | | `POST` | `/servers/{guild_id}/bedtime-range` | Update bedtime reminder schedule | | `GET` | `/servers/{guild_id}/memory` | Get server-specific memory | | `POST` | `/servers/{guild_id}/memory` | Set server-specific memory | | `POST` | `/servers/repair` | Repair corrupted server configuration | ### DM Logging & Management | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/dms/users` | List all users who have DMed the bot | | `GET` | `/dms/users/{user_id}` | Get conversation summary for a user | | `GET` | `/dms/users/{user_id}/conversations` | Get recent conversations (`?limit=50`) | | `GET` | `/dms/users/{user_id}/search` | Search conversations (`?query=...`) | | `GET` | `/dms/users/{user_id}/export` | Export conversations (`?format=json`) | | `DELETE` | `/dms/users/{user_id}` | Delete all DM logs for a user | | `GET` | `/dms/blocked-users` | List all blocked users | | `POST` | `/dms/users/{user_id}/block` | Block a user from DMs | | `POST` | `/dms/users/{user_id}/unblock` | Unblock a user | | `POST` | `/dms/users/{user_id}/conversations/{id}/delete` | Delete a specific message from Discord + logs | | `POST` | `/dms/users/{user_id}/conversations/delete-all` | Delete all conversations (Discord + logs) | | `POST` | `/dms/users/{user_id}/delete-completely` | Completely remove all user data | ### DM Interaction Analysis | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/dms/analysis/run` | Manually trigger daily DM analysis | | `POST` | `/dms/users/{user_id}/analyze` | Analyze a specific user's interactions | | `GET` | `/dms/analysis/reports` | Get recent analysis reports (`?limit=20`) | | `GET` | `/dms/analysis/reports/{user_id}` | Get reports for a specific user | ### Image Generation API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/image/generate` | Manually trigger image generation (`{ "prompt": "..." }`) | | `GET` | `/image/status` | Check ComfyUI availability | | `POST` | `/image/test-detection` | Test natural language image request detection | | `GET` | `/image/view/{filename}` | Serve a generated image file | ### Figurine DM Subscriptions | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/figurines/subscribers` | List all figurine notification subscribers | | `POST` | `/figurines/subscribers` | Add a subscriber (form field `user_id`) | | `DELETE` | `/figurines/subscribers/{user_id}` | Remove a subscriber | | `POST` | `/figurines/send_now` | Send figurine DMs to all subscribers | | `POST` | `/figurines/send_to_user` | Send figurine DM to a specific user | ### Chat Interface | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/chat/stream` | Stream a chat response via SSE (supports text and vision models, conversation history, mood selection) | ### Voice Call Management | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/voice/call` | Initiate a voice call to a user (starts containers, joins channel, sends DM invite) | | `GET` | `/voice/debug-mode` | Get voice debug mode status | | `POST` | `/voice/debug-mode` | Set voice debug mode on/off | ### Memory (Cheshire Cat) API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/memory/status` | Cat connection status, circuit breaker state | | `POST` | `/memory/toggle` | Enable/disable Cheshire Cat integration | | `GET` | `/memory/stats` | Memory collection statistics (point counts) | | `GET` | `/memory/facts` | Get all declarative memory facts | | `GET` | `/memory/episodic` | Get all episodic memories | | `POST` | `/memory/consolidate` | Trigger memory consolidation | | `POST` | `/memory/delete` | **Delete ALL memories** (requires exact confirmation string) | | `DELETE` | `/memory/point/{collection}/{point_id}` | Delete a single memory point | | `PUT` | `/memory/point/{collection}/{point_id}` | Edit a memory point's content/metadata | | `POST` | `/memory/create` | Create a new memory (declarative or episodic) | ### Configuration Management | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/config` | Full config (static + runtime + state) | | `GET` | `/config/static` | Static config from `config.yaml` | | `GET` | `/config/runtime` | Runtime config (overrides) | | `POST` | `/config/set` | Set a runtime config value | | `POST` | `/config/reset` | Reset config to defaults | | `POST` | `/config/validate` | Validate current configuration | | `GET` | `/config/state` | Get current config state | ### Logging Configuration | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/api/log/config` | Get current logging configuration | | `POST` | `/api/log/config` | Update logging config for a component | | `GET` | `/api/log/components` | List all logging components and stats | | `POST` | `/api/log/reload` | Reload all loggers from config | | `POST` | `/api/log/filters` | Update API request log filters | | `POST` | `/api/log/reset` | Reset logging config to defaults | | `POST` | `/api/log/global-level` | Set global log level | | `POST` | `/api/log/timestamp-format` | Set timestamp format | | `GET` | `/api/log/files/{component}` | Get last N lines from a component's log file | ### Message Reactions | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | `/messages/react` | Add a reaction emoji to a specific message | ### Autonomous V2 Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/autonomous/v2/stats/{guild_id}` | V2 social stats for a server | | `GET` | `/autonomous/v2/check/{guild_id}` | Manual V2 context check (debug) | | `GET` | `/autonomous/v2/status` | V2 system status for all servers | ### Conversation Management | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | `/conversation/{user_id}` | Get conversation history for a user | | `POST` | `/conversation/reset` | Reset conversation history (`{ "user_id": "..." }`) | | `POST` | `/sleep` | Force Miku to sleep (legacy) | | `POST` | `/wake` | Wake Miku up (legacy) | | `POST` | `/bedtime` | Send bedtime reminder (`?guild_id=` or all servers) | --- ## Discord Event Handlers These are non-command behaviors handled by Discord events in `bot/bot.py`: | Event | Handler | Description | |-------|---------|-------------| | `on_ready` | `bot.py` ~L89 | Initialize all systems, restore modes, start schedulers | | `on_message` | `bot.py` ~L160 | Main message handler — routes commands, handles conversations | | `on_raw_reaction_add` | `bot.py` ~L716 | Log DM reactions (user and bot) | | `on_raw_reaction_remove` | `bot.py` ~L756 | Log DM reaction removals | | `on_presence_update` | `bot.py` ~L793 | Track user presence for autonomous V2 | | `on_member_join` | `bot.py` ~L799 | Track member joins for autonomous V2 | | `on_voice_state_update` | `bot.py` ~L803 | Track voice channel joins/leaves, auto-listen for voice calls | --- ## Environment Variables Key configuration from `bot/globals.py` and `bot/config.py`: | Variable | Default | Description | |----------|---------|-------------| | `DISCORD_BOT_TOKEN` | — | Discord bot token | | `LLAMA_URL` | `http://llama-swap:8080` | NVIDIA GPU llama-swap URL | | `LLAMA_AMD_URL` | `http://llama-swap-amd:8080` | AMD GPU llama-swap URL | | `TEXT_MODEL` | `llama3.1` | Default text model name | | `VISION_MODEL` | `vision` | Vision model name (Qwen) | | `EVIL_TEXT_MODEL` | `darkidol` | Uncensored model for evil mode | | `JAPANESE_TEXT_MODEL` | `swallow` | Japanese text model | | `OWNER_USER_ID` | `209381657369772032` | Bot owner's Discord ID (for reports) | | `CHESHIRE_CAT_URL` | `http://cheshire-cat:80` | Cheshire Cat memory server URL | | `USE_CHESHIRE_CAT` | `true` | Enable/disable memory system | | `AUTONOMOUS_DEBUG` | `false` | Verbose autonomous decision logging | | `VOICE_DEBUG_MODE` | `false` | Show voice transcriptions in text channel |