feat(m2d): support MSC4144 per-message profiles

Override webhook username and avatar_url from m.per_message_profile
(and unstable com.beeper.per_message_profile) when present.
The stable key takes priority over the unstable prefix.
This commit is contained in:
Bea
2026-03-25 03:10:54 +00:00
committed by cadence
parent d8c0a947f2
commit 41692b11ff
2 changed files with 106 additions and 0 deletions
+4
View File
@@ -557,6 +557,10 @@ async function eventToMessage(event, guild, channel, di) {
const member = await getMemberFromCacheOrHomeserver(event.room_id, event.sender, di?.api)
if (member.displayname) displayName = member.displayname
if (member.avatar_url) avatarURL = mxUtils.getPublicUrlForMxc(member.avatar_url)
// Override display name and avatar from MSC4144 per-message profile if present
const perMessageProfile = event.content["m.per_message_profile"] || event.content["com.beeper.per_message_profile"]
if (perMessageProfile?.displayname) displayName = perMessageProfile.displayname
if (perMessageProfile?.avatar_url) avatarURL = mxUtils.getPublicUrlForMxc(perMessageProfile.avatar_url)
// If the display name is too long to be put into the webhook (80 characters is the maximum),
// put the excess characters into displayNameRunoff, later to be put at the top of the message
let [displayNameShortened, displayNameRunoff] = splitDisplayName(displayName)