mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-06-27 08:49:24 +00:00
Download files from slack and reupload to mattermost (slack/mattermost). Closes #255
Refactor message.Extra to a map[string][]interface{} to have a bit more flexibility for stuffing extra stuff. For attached files from slack, files < 1MB size get downloaded (in memory), and get put into Extra["file"][]config.FileInfo (containing a pointer to the buffer and the filename). This is not async so slack channels with lots of attached files may suffer a slowdown. (the download timeout is set at 5 seconds).
This commit is contained in:
@ -26,7 +26,7 @@ type MMMessage struct {
|
||||
UserID string
|
||||
ID string
|
||||
Event string
|
||||
Extra []interface{}
|
||||
Extra map[string][]interface{}
|
||||
}
|
||||
|
||||
type Bmattermost struct {
|
||||
@ -179,6 +179,21 @@ func (b *Bmattermost) Send(msg config.Message) (string, error) {
|
||||
}
|
||||
return msg.ID, b.mc.DeleteMessage(msg.ID)
|
||||
}
|
||||
if msg.Extra != nil {
|
||||
for _, f := range msg.Extra["file"] {
|
||||
fi := f.(config.FileInfo)
|
||||
id, err := b.mc.UploadFile(*fi.Data, b.mc.GetChannelId(channel, ""), fi.Name)
|
||||
if err != nil {
|
||||
flog.Debugf("ERROR %#v", err)
|
||||
return "", err
|
||||
}
|
||||
message = "uploaded a file: " + fi.Name
|
||||
if b.Config.PrefixMessagesWithNick {
|
||||
message = nick + "uploaded a file: " + fi.Name
|
||||
}
|
||||
return b.mc.PostMessageWithFiles(b.mc.GetChannelId(channel, ""), message, []string{id})
|
||||
}
|
||||
}
|
||||
if msg.ID != "" {
|
||||
return b.mc.EditMessage(msg.ID, message)
|
||||
}
|
||||
@ -225,7 +240,7 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) {
|
||||
continue
|
||||
}
|
||||
|
||||
m := &MMMessage{}
|
||||
m := &MMMessage{Extra: make(map[string][]interface{})}
|
||||
|
||||
props := message.Post.Props
|
||||
if props != nil {
|
||||
@ -237,7 +252,7 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) {
|
||||
message.Username = props["override_username"].(string)
|
||||
}
|
||||
if _, ok := props["attachments"].([]interface{}); ok {
|
||||
m.Extra = props["attachments"].([]interface{})
|
||||
m.Extra["attachments"] = props["attachments"].([]interface{})
|
||||
}
|
||||
}
|
||||
// do not post our own messages back to irc
|
||||
|
Reference in New Issue
Block a user