bridgev2/portal: add support for per-message profiles in relay mode
Some checks are pending
Go / Lint (latest) (push) Waiting to run
Go / Build (old, libolm) (push) Waiting to run
Go / Build (latest, libolm) (push) Waiting to run
Go / Build (old, goolm) (push) Waiting to run
Go / Build (latest, goolm) (push) Waiting to run

This commit is contained in:
Tulir Asokan 2025-07-01 01:34:42 +03:00
commit 4f6d4d7c63
2 changed files with 21 additions and 0 deletions

View file

@ -1180,6 +1180,7 @@ type OrigSender struct {
RequiresDisambiguation bool
DisambiguatedName string
FormattedName string
PerMessageProfile event.BeeperPerMessageProfile
event.MemberEventContent
}

View file

@ -544,6 +544,8 @@ func (portal *Portal) checkConfusableName(ctx context.Context, userID id.UserID,
return false
}
var fakePerMessageProfileEventType = event.Type{Class: event.StateEventType, Type: "m.per_message_profile"}
func (portal *Portal) handleMatrixEvent(ctx context.Context, sender *User, evt *event.Event) {
log := zerolog.Ctx(ctx)
if evt.Mautrix.EventSource&event.SourceEphemeral != 0 {
@ -589,6 +591,24 @@ func (portal *Portal) handleMatrixEvent(ctx context.Context, sender *User, evt *
} else {
origSender.DisambiguatedName = sender.MXID.String()
}
msg := evt.Content.AsMessage()
if msg != nil && msg.BeeperPerMessageProfile != nil && msg.BeeperPerMessageProfile.Displayname != "" {
pmp := msg.BeeperPerMessageProfile
origSender.PerMessageProfile = *pmp
roomPLs, err := portal.Bridge.Matrix.GetPowerLevels(ctx, portal.MXID)
if err != nil {
log.Warn().Err(err).Msg("Failed to get power levels to check relay profile")
}
if roomPLs != nil &&
roomPLs.GetUserLevel(sender.MXID) >= roomPLs.GetEventLevel(fakePerMessageProfileEventType) &&
!portal.checkConfusableName(ctx, sender.MXID, pmp.Displayname) {
origSender.DisambiguatedName = pmp.Displayname
origSender.RequiresDisambiguation = false
} else {
origSender.DisambiguatedName = fmt.Sprintf("%s via %s", pmp.Displayname, origSender.DisambiguatedName)
}
}
origSender.FormattedName = portal.Bridge.Config.Relay.FormatName(origSender)
}
// Copy logger because many of the handlers will use UpdateContext