Fix webhook avatar mismatch: pass avatar_url at send time
- Fixed missing client parameter in animated GIF webhook update path - Added get_persona_avatar_urls() helper that returns bot's current Discord avatar URL for Miku persona (always fresh, no cache lag) - Pass avatar_url on every webhook.send() call in bipolar_mode.py, persona_dialogue.py, and api.py so avatars always match current pfp regardless of webhook cache state
This commit is contained in:
@@ -259,6 +259,26 @@ def toggle_bipolar_mode() -> bool:
|
||||
# WEBHOOK MANAGEMENT
|
||||
# ============================================================================
|
||||
|
||||
def get_persona_avatar_urls() -> dict:
|
||||
"""Get current avatar URLs for Miku and Evil Miku personas.
|
||||
|
||||
Returns a dict with 'miku' and 'evil_miku' avatar URL strings (or None).
|
||||
Uses the bot's current Discord avatar for Miku (always up-to-date).
|
||||
Evil Miku falls back to the webhook's stored avatar (passed as None).
|
||||
"""
|
||||
miku_url = None
|
||||
evil_url = None
|
||||
|
||||
# For Miku: use the bot's actual Discord avatar URL (always matches current pfp)
|
||||
if globals.client and globals.client.user:
|
||||
try:
|
||||
miku_url = str(globals.client.user.display_avatar.url)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return {"miku": miku_url, "evil_miku": evil_url}
|
||||
|
||||
|
||||
async def get_or_create_webhooks_for_channel(channel: discord.TextChannel) -> dict:
|
||||
"""Get or create webhooks for a channel for bipolar mode messaging
|
||||
|
||||
@@ -887,15 +907,18 @@ async def run_argument(channel: discord.TextChannel, client, trigger_context: st
|
||||
return
|
||||
|
||||
# Send via webhook
|
||||
avatar_urls = get_persona_avatar_urls()
|
||||
if initiator == "evil":
|
||||
await webhooks["evil_miku"].send(
|
||||
content=initial_message,
|
||||
username=get_evil_miku_display_name()
|
||||
username=get_evil_miku_display_name(),
|
||||
avatar_url=avatar_urls.get("evil_miku")
|
||||
)
|
||||
else:
|
||||
await webhooks["miku"].send(
|
||||
content=initial_message,
|
||||
username=get_miku_display_name()
|
||||
username=get_miku_display_name(),
|
||||
avatar_url=avatar_urls.get("miku")
|
||||
)
|
||||
|
||||
# Add to conversation history for context
|
||||
@@ -991,15 +1014,18 @@ async def run_argument(channel: discord.TextChannel, client, trigger_context: st
|
||||
|
||||
if final_message and not final_message.startswith("Error") and not final_message.startswith("Sorry"):
|
||||
# Send winner's final message via webhook
|
||||
avatar_urls = get_persona_avatar_urls()
|
||||
if winner == "evil":
|
||||
await webhooks["evil_miku"].send(
|
||||
content=final_message,
|
||||
username=get_evil_miku_display_name()
|
||||
username=get_evil_miku_display_name(),
|
||||
avatar_url=avatar_urls.get("evil_miku")
|
||||
)
|
||||
else:
|
||||
await webhooks["miku"].send(
|
||||
content=final_message,
|
||||
username=get_miku_display_name()
|
||||
username=get_miku_display_name(),
|
||||
avatar_url=avatar_urls.get("miku")
|
||||
)
|
||||
|
||||
# Record result in scoreboard with arbiter's reasoning
|
||||
@@ -1057,15 +1083,18 @@ async def run_argument(channel: discord.TextChannel, client, trigger_context: st
|
||||
return
|
||||
|
||||
# Send via webhook
|
||||
avatar_urls = get_persona_avatar_urls()
|
||||
if current_speaker == "evil":
|
||||
await webhooks["evil_miku"].send(
|
||||
content=response,
|
||||
username=get_evil_miku_display_name()
|
||||
username=get_evil_miku_display_name(),
|
||||
avatar_url=avatar_urls.get("evil_miku")
|
||||
)
|
||||
else:
|
||||
await webhooks["miku"].send(
|
||||
content=response,
|
||||
username=get_miku_display_name()
|
||||
username=get_miku_display_name(),
|
||||
avatar_url=avatar_urls.get("miku")
|
||||
)
|
||||
|
||||
# Add to conversation history for context
|
||||
|
||||
Reference in New Issue
Block a user