When Evil Mode activates, the bot's Discord account avatar is changed to evil_pfp.png. Previously, get_persona_avatar_urls() would read this swapped avatar and pass it to the Miku webhook, causing both webhooks to display Evil Miku's pfp. Now caching the regular Miku CDN URL before Evil Mode changes the bot's avatar. When Evil Mode is active, the cached URL is used instead of reading from the bot account. Discord CDN URLs remain valid after avatar changes, so this reliably preserves the correct pfp for both regular and Evil Miku webhooks during arguments. - Added MIKU_NORMAL_AVATAR_URL global in bot/globals.py - Updated get_persona_avatar_urls() to cache and return the cached URL - Save the normal avatar URL before Evil Mode switches the bot's avatar
108 lines
4.3 KiB
Python
108 lines
4.3 KiB
Python
# globals.py
|
|
import os
|
|
from collections import defaultdict, deque
|
|
import discord
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
|
|
scheduler = AsyncIOScheduler()
|
|
|
|
GUILD_SETTINGS = {}
|
|
|
|
# Stores last 5 exchanges per user (as deque)
|
|
conversation_history = defaultdict(lambda: deque(maxlen=5))
|
|
|
|
DISCORD_BOT_TOKEN = os.getenv("DISCORD_BOT_TOKEN")
|
|
|
|
# Autonomous V2 Debug Mode (set to True to see detailed decision logging)
|
|
AUTONOMOUS_DEBUG = os.getenv("AUTONOMOUS_DEBUG", "false").lower() == "true"
|
|
|
|
# Voice Chat Debug Mode (set to True for manual commands and text notifications)
|
|
# When False (field deployment), voice chat operates silently without command notifications
|
|
VOICE_DEBUG_MODE = os.getenv("VOICE_DEBUG_MODE", "false").lower() == "true"
|
|
|
|
# Llama.cpp server settings (via llama-swap)
|
|
LLAMA_URL = os.getenv("LLAMA_URL", "http://llama-swap:8080")
|
|
LLAMA_AMD_URL = os.getenv("LLAMA_AMD_URL", "http://llama-swap-amd:8080") # Secondary AMD GPU
|
|
TEXT_MODEL = os.getenv("TEXT_MODEL", "llama3.1")
|
|
VISION_MODEL = os.getenv("VISION_MODEL", "vision")
|
|
EVIL_TEXT_MODEL = os.getenv("EVIL_TEXT_MODEL", "darkidol") # Uncensored model for evil mode
|
|
JAPANESE_TEXT_MODEL = os.getenv("JAPANESE_TEXT_MODEL", "swallow") # Llama 3.1 Swallow model for Japanese
|
|
OWNER_USER_ID = int(os.getenv("OWNER_USER_ID", "209381657369772032")) # Bot owner's Discord user ID for reports
|
|
|
|
# Cheshire Cat AI integration (Phase 3)
|
|
CHESHIRE_CAT_URL = os.getenv("CHESHIRE_CAT_URL", "http://cheshire-cat:80")
|
|
USE_CHESHIRE_CAT = os.getenv("USE_CHESHIRE_CAT", "true").lower() == "true" # Default enabled for memory system
|
|
CHESHIRE_CAT_API_KEY = os.getenv("CHESHIRE_CAT_API_KEY", "") # Empty = no auth
|
|
CHESHIRE_CAT_TIMEOUT = int(os.getenv("CHESHIRE_CAT_TIMEOUT", "120")) # Seconds
|
|
|
|
# Language mode for Miku (english or japanese)
|
|
LANGUAGE_MODE = "english" # Can be "english" or "japanese"
|
|
|
|
# Set up Discord client
|
|
intents = discord.Intents.default()
|
|
intents.message_content = True
|
|
intents.members = True
|
|
intents.presences = True
|
|
client = discord.Client(intents=intents)
|
|
|
|
# Note: llama-swap handles model loading/unloading automatically
|
|
# No need to track current_model anymore
|
|
|
|
KINDNESS_KEYWORDS = [
|
|
"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 = ["💙", "💝", "💖", "💕", "💜", "❤️🔥", "☺️"]
|
|
kindness_reacted_messages = set()
|
|
|
|
# DM Mood System (simple, auto-rotating only)
|
|
DM_MOOD = "neutral"
|
|
DM_MOOD_DESCRIPTION = "I'm feeling neutral and balanced today."
|
|
AVAILABLE_MOODS = [
|
|
"bubbly", "sleepy", "curious", "shy", "serious", "excited", "silly",
|
|
"melancholy", "flirty", "romantic", "irritated", "angry", "neutral", "asleep"
|
|
]
|
|
|
|
# Evil Mode System
|
|
EVIL_MODE = False
|
|
EVIL_DM_MOOD = "evil_neutral"
|
|
EVIL_DM_MOOD_DESCRIPTION = "Evil Miku is calculating and cold."
|
|
EVIL_AVAILABLE_MOODS = ["aggressive", "cunning", "sarcastic", "evil_neutral", "bored", "manic", "jealous", "melancholic", "playful_cruel", "contemptuous"]
|
|
# EVIL_MOOD_EMOJIS removed — canonical source is utils/moods.py
|
|
|
|
# Bipolar Mode System (both Mikus can argue via webhooks)
|
|
BIPOLAR_MODE = False
|
|
BIPOLAR_WEBHOOKS = {} # guild_id -> {"miku_webhook_url": str, "evil_webhook_url": str}
|
|
BIPOLAR_ARGUMENT_IN_PROGRESS = {} # channel_id -> {"active": bool, "exchange_count": int, "current_speaker": str}
|
|
MIKU_NORMAL_AVATAR_URL = None # Cached CDN URL of the regular Miku pfp (valid even after evil mode swaps the bot avatar)
|
|
|
|
# MOOD_EMOJIS removed — canonical source is utils/moods.py
|
|
# bipolar_mode.py now imports from there directly
|
|
|
|
BOT_USER = None
|
|
|
|
LAST_FULL_PROMPT = ""
|
|
|
|
# Cheshire Cat last interaction tracking (for Web UI Last Prompt toggle)
|
|
LAST_CAT_INTERACTION = {
|
|
"full_prompt": "",
|
|
"response": "",
|
|
"user": "",
|
|
"mood": "",
|
|
"timestamp": "",
|
|
}
|
|
|
|
# Persona Dialogue System (conversations between Miku and Evil Miku)
|
|
LAST_PERSONA_DIALOGUE_TIME = 0 # Timestamp of last dialogue for cooldown
|
|
|
|
# Voice Chat Session State
|
|
VOICE_SESSION_ACTIVE = False
|
|
TEXT_MESSAGE_QUEUE = [] # Queue for messages received during voice session
|
|
|
|
# Feature Blocking Flags (set during voice session)
|
|
VISION_MODEL_BLOCKED = False
|
|
IMAGE_GENERATION_BLOCKED = False
|
|
IMAGE_GENERATION_BLOCK_MESSAGE = None
|
|
|