From be96f94b41614a07f02616728fe677af53267a1d Mon Sep 17 00:00:00 2001 From: Simon Arlott Date: Mon, 18 Aug 2025 10:41:43 +0100 Subject: [PATCH] Ignore discord updates when the message hasn't been edited in the last 6 hours Discord sends spurious updates for messages that haven't been edited, or haven't been edited recently. Messages from as far back as 5 years ago have been observed to be updated, always with a URL or embedded content. These need to be ignored because it's confusing when out of date messages are bridged as new messages with no context to protocols that don't support edits. Edited messages normally arrive as updates immediately. --- bridge/discord/handlers.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bridge/discord/handlers.go b/bridge/discord/handlers.go index 34cef554..eb169108 100644 --- a/bridge/discord/handlers.go +++ b/bridge/discord/handlers.go @@ -1,6 +1,8 @@ package bdiscord import ( + "time" + "github.com/42wim/matterbridge/bridge/config" "github.com/bwmarrin/discordgo" "github.com/davecgh/go-spew/spew" @@ -63,6 +65,13 @@ func (b *Bdiscord) messageTyping(s *discordgo.Session, m *discordgo.TypingStart) b.Remote <- rmsg } +// Discord sends spurious updates for messages that haven't been edited, or +// haven't been edited recently. Messages from as far back as 5 years ago have +// been observed to be updated, always with a URL or embedded content. +// +// These need to be ignored because it's confusing when out of date messages +// are bridged as new messages with no context to protocols that don't support +// edits. Edited messages normally arrive as updates immediately. func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { //nolint:unparam if m.GuildID != b.guildID { b.Log.Debugf("Ignoring messageUpdate because it originates from a different guild") @@ -73,6 +82,12 @@ func (b *Bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdat } // only when message is actually edited if m.Message.EditedTimestamp != nil { + // message must have been edited recently + delay := time.Now().Sub(*m.Message.EditedTimestamp) + if delay >= time.Duration(6) * time.Hour { + return + } + b.Log.Debugf("Sending edit message") m.Content += b.GetString("EditSuffix") msg := &discordgo.MessageCreate{