Improved Evil Mode toggle to handle edge cases of the pfp and role color change. Japanese swallow model compatible (should be).

This commit is contained in:
2026-01-27 19:52:39 +02:00
parent c0aaab0c3a
commit 641a5b83e8
3 changed files with 175 additions and 50 deletions

View File

@@ -416,6 +416,11 @@ async def apply_evil_mode_changes(client, change_username=True, change_pfp=True,
try:
await client.user.edit(username="Evil Miku")
logger.debug("Changed bot username to 'Evil Miku'")
except discord.HTTPException as e:
if e.code == 50035:
logger.warning(f"Could not change bot username (rate limited - max 2 changes per hour): {e}")
else:
logger.error(f"Could not change bot username: {e}")
except Exception as e:
logger.error(f"Could not change bot username: {e}")
@@ -426,6 +431,15 @@ async def apply_evil_mode_changes(client, change_username=True, change_pfp=True,
# Set evil profile picture
if change_pfp:
await set_evil_profile_picture(client)
# Also update bipolar webhooks to use evil_pfp.png
if globals.BIPOLAR_MODE:
try:
from utils.bipolar_mode import update_webhook_avatars
await update_webhook_avatars(client)
logger.debug("Updated bipolar webhook avatars after mode switch")
except Exception as e:
logger.error(f"Failed to update bipolar webhook avatars: {e}")
# Set evil role color (#D60004 - dark red)
if change_role_color:
@@ -455,6 +469,11 @@ async def revert_evil_mode_changes(client, change_username=True, change_pfp=True
try:
await client.user.edit(username="Hatsune Miku")
logger.debug("Changed bot username back to 'Hatsune Miku'")
except discord.HTTPException as e:
if e.code == 50035:
logger.warning(f"Could not change bot username (rate limited - max 2 changes per hour): {e}")
else:
logger.error(f"Could not change bot username: {e}")
except Exception as e:
logger.error(f"Could not change bot username: {e}")
@@ -465,16 +484,33 @@ async def revert_evil_mode_changes(client, change_username=True, change_pfp=True
# Restore normal profile picture
if change_pfp:
await restore_normal_profile_picture(client)
# Also update bipolar webhooks to use current.png
if globals.BIPOLAR_MODE:
try:
from utils.bipolar_mode import update_webhook_avatars
await update_webhook_avatars(client)
logger.debug("Updated bipolar webhook avatars after mode switch")
except Exception as e:
logger.error(f"Failed to update bipolar webhook avatars: {e}")
# Restore saved role color
if change_role_color:
try:
_, _, saved_color = load_evil_mode_state()
if saved_color:
await set_role_color(client, saved_color)
logger.debug(f"Restored role color to {saved_color}")
# Try to get color from metadata.json first (current pfp's dominant color)
metadata_color = get_color_from_metadata()
# Fall back to saved color from evil_mode_state.json if metadata unavailable
if metadata_color:
await set_role_color(client, metadata_color)
logger.debug(f"Restored role color from metadata: {metadata_color}")
else:
logger.warning("No saved role color found, skipping color restoration")
_, _, saved_color = load_evil_mode_state()
if saved_color:
await set_role_color(client, saved_color)
logger.debug(f"Restored role color from saved state: {saved_color}")
else:
logger.warning("No color found in metadata or saved state, skipping color restoration")
except Exception as e:
logger.error(f"Failed to restore role color: {e}")
@@ -566,6 +602,29 @@ async def restore_normal_profile_picture(client):
return False
def get_color_from_metadata() -> str:
"""Get the dominant color from the profile picture metadata"""
metadata_path = "memory/profile_pictures/metadata.json"
try:
if not os.path.exists(metadata_path):
logger.warning("metadata.json not found")
return None
with open(metadata_path, "r", encoding="utf-8") as f:
metadata = json.load(f)
hex_color = metadata.get("dominant_color", {}).get("hex")
if hex_color:
logger.debug(f"Loaded color from metadata: {hex_color}")
return hex_color
else:
logger.warning("No dominant_color.hex found in metadata")
return None
except Exception as e:
logger.error(f"Failed to load color from metadata: {e}")
return None
# ============================================================================
# EVIL MODE STATE HELPERS
# ============================================================================