From 2f8de6635a250bc9a2adbfef06f48c54afe4f269 Mon Sep 17 00:00:00 2001 From: Skip R Date: Tue, 27 Jan 2026 19:08:32 -0800 Subject: [PATCH] msgconv/from-discord: refactor forwarded message conversion --- pkg/msgconv/from-discord.go | 73 +++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/pkg/msgconv/from-discord.go b/pkg/msgconv/from-discord.go index 58511fc..2c25771 100644 --- a/pkg/msgconv/from-discord.go +++ b/pkg/msgconv/from-discord.go @@ -51,6 +51,10 @@ func (mc *MessageConverter) ToMatrix( parts = append(parts, textPart) } + ctx = zerolog.Ctx(ctx).With(). + Str("action", "convert discord message to matrix"). + Str("message_id", msg.ID). + Logger().WithContext(ctx) log := zerolog.Ctx(ctx) handledIDs := make(map[string]struct{}) @@ -167,38 +171,7 @@ func (mc *MessageConverter) renderDiscordTextMessage(ctx context.Context, intent len(msg.MessageSnapshots) > 0 && msg.MessageSnapshots[0].Message != nil { // Bridge forwarded messages. - - forwardedHTML := mc.renderDiscordMarkdownOnlyHTMLNoUnwrap(portal, msg.MessageSnapshots[0].Message.Content, true) - msgTSText := msg.MessageSnapshots[0].Message.Timestamp.Format("2006-01-02 15:04 MST") - origLink := fmt.Sprintf("unknown channel • %s", msgTSText) - if forwardedFromPortal, err := mc.Bridge.DB.Portal.GetByKey(ctx, discordid.MakePortalKeyWithID(msg.MessageReference.ChannelID)); err == nil && forwardedFromPortal != nil { - if origMessage, err := mc.Bridge.DB.Message.GetFirstPartByID(ctx, source.ID, networkid.MessageID(msg.MessageReference.MessageID)); err == nil && origMessage != nil { - // We've bridged the message that was forwarded, so we can link to it directly. - origLink = fmt.Sprintf( - `#%s • %s`, - forwardedFromPortal.MXID.EventURI(origMessage.MXID, mc.Bridge.Matrix.ServerName()), - forwardedFromPortal.Name, - msgTSText, - ) - } else if err != nil { - log.Err(err).Msg("Couldn't find corresponding message when bridging forwarded message") - } else if forwardedFromPortal.MXID != "" { - // We don't have the message but we have the portal, so link to that. - origLink = fmt.Sprintf( - `#%s • %s`, - forwardedFromPortal.MXID.URI(mc.Bridge.Matrix.ServerName()), - forwardedFromPortal.Name, - msgTSText, - ) - } else if forwardedFromPortal.Name != "" { - // We only have the name of the portal. - origLink = fmt.Sprintf("%s • %s", forwardedFromPortal.Name, msgTSText) - } - } else { - log.Err(err).Msg("Couldn't find corresponding portal when bridging forwarded message") - } - - htmlParts = append(htmlParts, fmt.Sprintf(forwardTemplateHTML, forwardedHTML, origLink)) + htmlParts = append(htmlParts, mc.forwardedMessageHtmlPart(ctx, portal, source, msg)) } previews := make([]*event.BeeperLinkPreview, 0) @@ -247,6 +220,42 @@ func (mc *MessageConverter) renderDiscordTextMessage(ctx context.Context, intent return &bridgev2.ConvertedMessagePart{Type: event.EventMessage, Content: &content, Extra: extraContent} } +func (mc *MessageConverter) forwardedMessageHtmlPart(ctx context.Context, portal *bridgev2.Portal, source *bridgev2.UserLogin, msg *discordgo.Message) string { + log := zerolog.Ctx(ctx) + + forwardedHTML := mc.renderDiscordMarkdownOnlyHTMLNoUnwrap(portal, msg.MessageSnapshots[0].Message.Content, true) + msgTSText := msg.MessageSnapshots[0].Message.Timestamp.Format("2006-01-02 15:04 MST") + origLink := fmt.Sprintf("unknown channel • %s", msgTSText) + if forwardedFromPortal, err := mc.Bridge.DB.Portal.GetByKey(ctx, discordid.MakePortalKeyWithID(msg.MessageReference.ChannelID)); err == nil && forwardedFromPortal != nil { + if origMessage, err := mc.Bridge.DB.Message.GetFirstPartByID(ctx, source.ID, networkid.MessageID(msg.MessageReference.MessageID)); err == nil && origMessage != nil { + // We've bridged the message that was forwarded, so we can link to it directly. + origLink = fmt.Sprintf( + `#%s • %s`, + forwardedFromPortal.MXID.EventURI(origMessage.MXID, mc.Bridge.Matrix.ServerName()), + forwardedFromPortal.Name, + msgTSText, + ) + } else if err != nil { + log.Err(err).Msg("Couldn't find corresponding message when bridging forwarded message") + } else if forwardedFromPortal.MXID != "" { + // We don't have the message but we have the portal, so link to that. + origLink = fmt.Sprintf( + `#%s • %s`, + forwardedFromPortal.MXID.URI(mc.Bridge.Matrix.ServerName()), + forwardedFromPortal.Name, + msgTSText, + ) + } else if forwardedFromPortal.Name != "" { + // We only have the name of the portal. + origLink = fmt.Sprintf("%s • %s", forwardedFromPortal.Name, msgTSText) + } + } else { + log.Err(err).Msg("Couldn't find corresponding portal when bridging forwarded message") + } + + return fmt.Sprintf(forwardTemplateHTML, forwardedHTML, origLink) +} + func mediaFailedMessage(err error) *event.MessageEventContent { return &event.MessageEventContent{ Body: fmt.Sprintf("Failed to bridge media: %v", err),