Thumbnail

rani/matterbridge.git

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

commit 0e182032c68860007fce2db07a7c74e034bc7940 Author: Alexander <korelskiy@uteka.ru> Date: Wed Mar 30 23:22:37 2022 +0000 Preserve threading for messages with files (slack) (#1781) * Preserve threading for slack messages with files * Update bridge/slack/slack.go Co-authored-by: Wim <wim@42.be> diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go index 55231c3..c39c608 100644 --- a/bridge/slack/slack.go +++ b/bridge/slack/slack.go @@ -3217 +3217 @@ func (b *Bslack) sendRTM(msg config.Message) (string, error) {   }     // Upload a file if it exists. - if msg.Extra != nil { + if len(msg.Extra) > 0 {   extraMsgs := helper.HandleExtra(&msg, b.General)   for i := range extraMsgs {   rmsg := &extraMsgs[i] @@ -3327 +3327 @@ func (b *Bslack) sendRTM(msg config.Message) (string, error) {   }   }   // Upload files if necessary (from Slack, Telegram or Mattermost). - b.uploadFile(&msg, channelInfo.ID) + return b.uploadFile(&msg, channelInfo.ID)   }     // Post message. @@ -4437 +4438 @@ func (b *Bslack) postMessage(msg *config.Message, channelInfo *slack.Channel) (s  }    // uploadFile handles native upload of files -func (b *Bslack) uploadFile(msg *config.Message, channelID string) { +func (b *Bslack) uploadFile(msg *config.Message, channelID string) (string, error) { + var messageID string   for _, f := range msg.Extra["file"] {   fi, ok := f.(config.FileInfo)   if !ok { @@ -47113 +47222 @@ func (b *Bslack) uploadFile(msg *config.Message, channelID string) {   })   if err != nil {   b.Log.Errorf("uploadfile %#v", err) - return + return "", err   }   if res.ID != "" {   b.Log.Debugf("Adding file ID %s to cache with timestamp %s", res.ID, ts.String())   b.cache.Add("file"+res.ID, ts) + + // search for message id by uploaded file in private/public channels, get thread timestamp from uploaded file + if v, ok := res.Shares.Private[channelID]; ok && len(v) > 0 { + messageID = v[0].Ts + } + if v, ok := res.Shares.Public[channelID]; ok && len(v) > 0 { + messageID = v[0].Ts + }   }   } + return messageID, nil  }    func (b *Bslack) prepareMessageOptions(msg *config.Message) []slack.MsgOption {