added new evil mood emoji map to web UI and minor fixes

This commit is contained in:
2026-02-26 12:08:41 +02:00
parent 9e5511da21
commit 7aafd06da1
2 changed files with 64 additions and 11 deletions

View File

@@ -1275,9 +1275,13 @@ def status():
mood_name, _ = server_manager.get_server_mood(guild_id) mood_name, _ = server_manager.get_server_mood(guild_id)
server_moods[str(guild_id)] = mood_name server_moods[str(guild_id)] = mood_name
# Return evil mood when in evil mode
current_mood = globals.EVIL_DM_MOOD if globals.EVIL_MODE else globals.DM_MOOD
return { return {
"status": "online", "status": "online",
"mood": globals.DM_MOOD, "mood": current_mood,
"evil_mode": globals.EVIL_MODE,
"servers": len(server_manager.servers), "servers": len(server_manager.servers),
"active_schedulers": len(server_manager.schedulers), "active_schedulers": len(server_manager.schedulers),
"server_moods": server_moods "server_moods": server_moods

View File

@@ -1806,7 +1806,13 @@ const EVIL_MOOD_EMOJIS = {
"aggressive": "👿", "aggressive": "👿",
"cunning": "🐍", "cunning": "🐍",
"sarcastic": "😈", "sarcastic": "😈",
"evil_neutral": "" "evil_neutral": "",
"bored": "🥱",
"manic": "🤪",
"jealous": "💚",
"melancholic": "🌑",
"playful_cruel": "🎭",
"contemptuous": "👑"
}; };
// Tab switching functionality // Tab switching functionality
@@ -2522,10 +2528,17 @@ async function setMood() {
async function resetMood() { async function resetMood() {
try { try {
if (evilMode) {
await apiCall('/evil-mode/mood', 'POST', { mood: 'evil_neutral' });
showNotification('Evil mood reset to evil_neutral');
currentMood = 'evil_neutral';
document.getElementById('mood').value = 'evil_neutral';
} else {
await apiCall('/mood/reset', 'POST'); await apiCall('/mood/reset', 'POST');
showNotification('Mood reset to neutral'); showNotification('Mood reset to neutral');
currentMood = 'neutral'; currentMood = 'neutral';
document.getElementById('mood').value = 'neutral'; document.getElementById('mood').value = 'neutral';
}
} catch (error) { } catch (error) {
console.error('Failed to reset mood:', error); console.error('Failed to reset mood:', error);
} }
@@ -2533,8 +2546,15 @@ async function resetMood() {
async function calmMiku() { async function calmMiku() {
try { try {
if (evilMode) {
await apiCall('/evil-mode/mood', 'POST', { mood: 'evil_neutral' });
showNotification('Evil Miku has been calmed down');
currentMood = 'evil_neutral';
document.getElementById('mood').value = 'evil_neutral';
} else {
await apiCall('/mood/calm', 'POST'); await apiCall('/mood/calm', 'POST');
showNotification('Miku has been calmed down'); showNotification('Miku has been calmed down');
}
} catch (error) { } catch (error) {
console.error('Failed to calm Miku:', error); console.error('Failed to calm Miku:', error);
} }
@@ -2630,9 +2650,15 @@ function updateEvilModeUI() {
// Switch mood dropdown to evil moods // Switch mood dropdown to evil moods
moodSelect.innerHTML = ` moodSelect.innerHTML = `
<option value="aggressive">👿 aggressive</option> <option value="aggressive">👿 aggressive</option>
<option value="bored">🥱 bored</option>
<option value="contemptuous">👑 contemptuous</option>
<option value="cunning">🐍 cunning</option> <option value="cunning">🐍 cunning</option>
<option value="sarcastic">😈 sarcastic</option>
<option value="evil_neutral" selected>evil neutral</option> <option value="evil_neutral" selected>evil neutral</option>
<option value="jealous">💚 jealous</option>
<option value="manic">🤪 manic</option>
<option value="melancholic">🌑 melancholic</option>
<option value="playful_cruel">🎭 playful cruel</option>
<option value="sarcastic">😈 sarcastic</option>
`; `;
} else { } else {
body.classList.remove('evil-mode'); body.classList.remove('evil-mode');
@@ -3900,20 +3926,43 @@ async function loadStatus() {
const result = await apiCall('/status'); const result = await apiCall('/status');
const statusDiv = document.getElementById('status'); const statusDiv = document.getElementById('status');
// Sync evil mode state from server (may change via Discord commands)
if (result.evil_mode !== undefined && result.evil_mode !== evilMode) {
evilMode = result.evil_mode;
updateEvilModeUI();
if (evilMode && result.mood) {
const moodSelect = document.getElementById('mood');
if (moodSelect) moodSelect.value = result.mood;
}
}
// Update mood dropdown selection to match current server mood
if (result.mood) {
const moodSelect = document.getElementById('mood');
if (moodSelect && moodSelect.querySelector(`option[value="${result.mood}"]`)) {
moodSelect.value = result.mood;
}
currentMood = result.mood;
}
let serverMoodsHtml = ''; let serverMoodsHtml = '';
if (result.server_moods) { if (result.server_moods) {
serverMoodsHtml = '<div style="margin-top: 0.5rem;"><strong>Server Moods:</strong><br>'; serverMoodsHtml = '<div style="margin-top: 0.5rem;"><strong>Server Moods:</strong><br>';
for (const [guildId, mood] of Object.entries(result.server_moods)) { for (const [guildId, mood] of Object.entries(result.server_moods)) {
const server = servers.find(s => s.guild_id == guildId); const server = servers.find(s => s.guild_id == guildId);
const serverName = server ? server.guild_name : `Server ${guildId}`; const serverName = server ? server.guild_name : `Server ${guildId}`;
serverMoodsHtml += `${serverName}: ${mood} ${MOOD_EMOJIS[mood] || ''}<br>`; const emojiMap = evilMode ? EVIL_MOOD_EMOJIS : MOOD_EMOJIS;
serverMoodsHtml += `${serverName}: ${mood} ${emojiMap[mood] || ''}<br>`;
} }
serverMoodsHtml += '</div>'; serverMoodsHtml += '</div>';
} }
const moodEmoji = evilMode ? (EVIL_MOOD_EMOJIS[result.mood] || '') : (MOOD_EMOJIS[result.mood] || '');
const moodLabel = evilMode ? `😈 ${result.mood} ${moodEmoji}` : `${result.mood} ${moodEmoji}`;
statusDiv.innerHTML = ` statusDiv.innerHTML = `
<div><strong>Status:</strong> ${result.status}</div> <div><strong>Status:</strong> ${result.status}</div>
<div><strong>DM Mood:</strong> ${result.mood}</div> <div><strong>DM Mood:</strong> ${moodLabel}</div>
<div><strong>Servers:</strong> ${result.servers}</div> <div><strong>Servers:</strong> ${result.servers}</div>
<div><strong>Active Schedulers:</strong> ${result.active_schedulers}</div> <div><strong>Active Schedulers:</strong> ${result.active_schedulers}</div>
<div style="margin-top: 0.5rem; padding: 0.5rem; background: #2a2a2a; border-radius: 4px; font-size: 0.9rem;"> <div style="margin-top: 0.5rem; padding: 0.5rem; background: #2a2a2a; border-radius: 4px; font-size: 0.9rem;">