From 98cd08e889e9230d3e370c80e51d1d7850123b76 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 28 Jan 2023 16:36:12 +0200 Subject: [PATCH] Add slightly hacky support for interaction messages --- formatter.go | 10 +++++++++- portal.go | 8 ++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/formatter.go b/formatter.go index 4069972..02bbfe3 100644 --- a/formatter.go +++ b/formatter.go @@ -21,6 +21,7 @@ import ( "regexp" "strings" + "github.com/bwmarrin/discordgo" "github.com/yuin/goldmark" "github.com/yuin/goldmark/parser" @@ -33,7 +34,14 @@ import ( var discordExtensions = goldmark.WithExtensions(mdext.SimpleSpoiler, mdext.DiscordUnderline) var escapeFixer = regexp.MustCompile(`\\(__[^_]|\*\*[^*])`) -func (portal *Portal) renderDiscordMarkdown(text string) event.MessageEventContent { +const msgInteractionTemplate = `> <@%s> used /%s + +` + +func (portal *Portal) renderDiscordMarkdown(text string, interaction *discordgo.MessageInteraction) event.MessageEventContent { + if interaction != nil { + text = fmt.Sprintf(msgInteractionTemplate, interaction.User.ID, interaction.Name) + text + } return format.HTMLToContent(portal.renderDiscordMarkdownOnlyHTML(text)) } diff --git a/portal.go b/portal.go index df82762..7ee4701 100644 --- a/portal.go +++ b/portal.go @@ -976,8 +976,8 @@ func (portal *Portal) handleDiscordMessageCreate(user *User, msg *discordgo.Mess var parts []database.MessagePart ts, _ := discordgo.SnowflakeTimestamp(msg.ID) - if msg.Content != "" && !isPlainGifMessage(msg) { - content := portal.renderDiscordMarkdown(msg.Content) + if (msg.Content != "" || msg.Interaction != nil) && !isPlainGifMessage(msg) { + content := portal.renderDiscordMarkdown(msg.Content, msg.Interaction) content.RelatesTo = threadRelation.Copy() extraContent := map[string]any{ @@ -1151,7 +1151,7 @@ func (portal *Portal) handleDiscordMessageUpdate(user *User, msg *discordgo.Mess deletedAttachment.Delete() } - if msg.Content == "" || existing[0].AttachmentID != "" { + if (msg.Content == "" && msg.Interaction == nil) || existing[0].AttachmentID != "" { portal.log.Debugfln("Dropping non-text edit to %s (message on matrix: %t, text on discord: %t)", msg.ID, existing[0].AttachmentID == "", len(msg.Content) > 0) return } @@ -1162,7 +1162,7 @@ func (portal *Portal) handleDiscordMessageUpdate(user *User, msg *discordgo.Mess content = *converted.Content extraContent = converted.Extra } else { - content = portal.renderDiscordMarkdown(msg.Content) + content = portal.renderDiscordMarkdown(msg.Content, msg.Interaction) extraContent = map[string]any{ "com.beeper.linkpreviews": portal.convertDiscordLinkEmbedsToBeeper(intent, msg.Embeds), }