Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 55045d27d4b2013b04582090f8b092d8d704d910 Author: Wim <wim@42.be> Date: Thu Dec 31 16:59:47 2020 +0000 Add threading support with token (discord) (#1342) Webhooks don't support the threading yet, so this is token only. In discord you can reply on each message of a thread, but this is not possible in mattermost (so some changes added there to make sure we always answer on the rootID of the thread). Also needs some more testing with slack. update : It now also uses the token when replying to a thread (even if webhooks are enabled), until webhooks have support for threads. diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go index d63006a..c8b810c 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -2447 +2447 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {     // Use webhook to send the message   useWebhooks := b.shouldMessageUseWebhooks(&msg) - if useWebhooks && msg.Event != config.EventMsgDelete { + if useWebhooks && msg.Event != config.EventMsgDelete && msg.ParentID == "" {   return b.handleEventWebhook(&msg, channelID)   }   @@ -28711 +28724 @@ func (b *Bdiscord) handleEventBotUser(msg *config.Message, channelID string) (st   return msg.ID, err   }   + m := discordgo.MessageSend{ + Content: msg.Username + msg.Text, + } + + if msg.ParentID != "" && msg.ParentID != "msg-parent-not-found" { + m.Reference = &discordgo.MessageReference{ + MessageID: msg.ParentID, + ChannelID: channelID, + GuildID: b.guildID, + } + } +   // Post normal message - res, err := b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) + res, err := b.c.ChannelMessageSendComplex(channelID, &m)   if err != nil {   return "", err   } +   return res.ID, nil  }   diff --git a/bridge/discord/handlers.go b/bridge/discord/handlers.go index 370b891..d2b3853 100644 --- a/bridge/discord/handlers.go +++ b/bridge/discord/handlers.go @@ -1276 +12711 @@ func (b *Bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat   // Replace emotes   rmsg.Text = replaceEmotes(rmsg.Text)   + // Add our parent id if it exists + if m.MessageReference != nil { + rmsg.ParentID = m.MessageReference.MessageID + } +   b.Log.Debugf("<= Sending message from %s on %s to gateway", m.Author.Username, b.Account)   b.Log.Debugf("<= Message is %#v", rmsg)   b.Remote <- rmsg diff --git a/bridge/mattermost/handlers.go b/bridge/mattermost/handlers.go index 67e68d0..58af43a 100644 --- a/bridge/mattermost/handlers.go +++ b/bridge/mattermost/handlers.go @@ -1087 +1087 @@ func (b *Bmattermost) handleMatterClient(messages chan *config.Message) {   Channel: message.Channel,   Text: message.Text,   ID: message.Post.Id, - ParentID: message.Post.ParentId, + ParentID: message.Post.RootId, // ParentID is obsolete with mattermost   Extra: make(map[string][]interface{}),   }   diff --git a/bridge/mattermost/mattermost.go b/bridge/mattermost/mattermost.go index e41b19d..2c11b79 100644 --- a/bridge/mattermost/mattermost.go +++ b/bridge/mattermost/mattermost.go @@ -1276 +12715 @@ func (b *Bmattermost) Send(msg config.Message) (string, error) {   msg.Text = fmt.Sprintf("[thread]: %s", msg.Text)   }   + // we only can reply to the root of the thread, not to a specific ID (like discord for example does) + if msg.ParentID != "" { + post, res := b.mc.Client.GetPost(msg.ParentID, "") + if res.Error != nil { + b.Log.Errorf("getting post %s failed: %s", msg.ParentID, res.Error.DetailedError) + } + msg.ParentID = post.RootId + } +   // Upload a file if it exists   if msg.Extra != nil {   for _, rmsg := range helper.HandleExtra(&msg, b.General) { diff --git a/gateway/router.go b/gateway/router.go index b07e578..468f02c 100644 --- a/gateway/router.go +++ b/gateway/router.go @@ -1607 +1607 @@ func (r *Router) handleReceive() {   // For some bridges we always add/update the message ID.   // This is necessary as msgIDs will change if a bridge returns   // a different ID in response to edits. - if !exists || msg.Protocol == "discord" { + if !exists {   gw.Messages.Add(msg.Protocol+" "+msg.ID, msgIDs)   }   }