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:
@@ -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
|
||||
# ============================================================================
|
||||
|
||||
Reference in New Issue
Block a user