Wishlist: per-user avatars on voice puppets (platform-blocked — webhook trick is text-only) #65

Open
opened 2026-07-07 03:54:07 +00:00 by robocub · 0 comments
Collaborator

Wishlist / platform limitation record. Users coming from mautrix-discord ask why relayed text gets per-user avatars but bridged voice participants all wear the generic slot icon.

Why mautrix-discord can: its text relay uses webhooks, and Discord allows a per-message username + avatar_url on webhook execution. Webhooks are not guild members and cannot join voice — the facility does not exist for voice.

Why voice puppets can't (CLAUDE.md constraint #4):

  • A voice participant must be a real bot account; a bot's avatar is global to the account — one image across every guild/channel it serves. Since #46 one bot serves multiple guilds simultaneously, so a per-speaker swap in one guild would flap the bot's identity everywhere.
  • Avatar changes are hard rate-limited (~a couple of changes per hour); dynamic slot allocation reassigns speakers far faster than that.
  • There is no bot API for per-guild member avatars (guild avatars are a user-profile/Nitro feature; PATCH /guilds/{id}/members/@me exposes nick only).

What we do instead: instant per-guild nicknames ([Matrix] <display name>), which are effectively unlimited.

Actionable today (no code): give the 7 puppet applications distinct static avatars (numbered/colored variants) in the Developer Portal so slots are at least visually distinguishable.

Revisit if: Discord ever ships bot-settable per-guild member avatars — then a conservative change-budget version (e.g. only re-avatar on assignment when the slot's avatar differs AND the per-account budget allows, accepting staleness) could be evaluated. Until then this is a platform limitation, not a bridge gap.

**Wishlist / platform limitation record.** Users coming from mautrix-discord ask why relayed text gets per-user avatars but bridged voice participants all wear the generic slot icon. **Why mautrix-discord can:** its text relay uses **webhooks**, and Discord allows a per-message `username` + `avatar_url` on webhook execution. Webhooks are not guild members and cannot join voice — the facility does not exist for voice. **Why voice puppets can't (CLAUDE.md constraint #4):** - A voice participant must be a real bot account; a bot's avatar is **global to the account** — one image across every guild/channel it serves. Since #46 one bot serves multiple guilds simultaneously, so a per-speaker swap in one guild would flap the bot's identity everywhere. - Avatar changes are hard rate-limited (~a couple of changes per hour); dynamic slot allocation reassigns speakers far faster than that. - There is **no bot API for per-guild member avatars** (guild avatars are a user-profile/Nitro feature; `PATCH /guilds/{id}/members/@me` exposes `nick` only). What we do instead: instant per-guild **nicknames** (`[Matrix] <display name>`), which are effectively unlimited. **Actionable today (no code):** give the 7 puppet applications distinct static avatars (numbered/colored variants) in the Developer Portal so slots are at least visually distinguishable. **Revisit if:** Discord ever ships bot-settable per-guild member avatars — then a conservative change-budget version (e.g. only re-avatar on assignment when the slot's avatar differs AND the per-account budget allows, accepting staleness) could be evaluated. Until then this is a platform limitation, not a bridge gap.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dark/nether-voicebridge#65
No description provided.