mirror of
https://mau.dev/mautrix/go.git
synced 2026-03-14 14:25:53 +01:00
bridgev2/portal: add support for per-message profiles in relay mode
This commit is contained in:
parent
94950585c9
commit
4f6d4d7c63
2 changed files with 21 additions and 0 deletions
|
|
@ -1180,6 +1180,7 @@ type OrigSender struct {
|
|||
RequiresDisambiguation bool
|
||||
DisambiguatedName string
|
||||
FormattedName string
|
||||
PerMessageProfile event.BeeperPerMessageProfile
|
||||
|
||||
event.MemberEventContent
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue