diff options
author | Wim <wim@42.be> | 2017-09-18 23:51:27 +0200 |
---|---|---|
committer | Wim <wim@42.be> | 2017-09-18 23:51:27 +0200 |
commit | 1a40b0c1e9dd9772d760a68f2998b3bcb0f8a413 (patch) | |
tree | 794e03cd33a9ed1c4aded7040f81bd7803ec8e7b /bridge | |
parent | 27d886826cd124feded6d7856847687568a395d0 (diff) | |
download | matterbridge-msglm-1a40b0c1e9dd9772d760a68f2998b3bcb0f8a413.tar.gz matterbridge-msglm-1a40b0c1e9dd9772d760a68f2998b3bcb0f8a413.tar.bz2 matterbridge-msglm-1a40b0c1e9dd9772d760a68f2998b3bcb0f8a413.zip |
Relay attachments from mattermost to slack (slack). Closes #260
Diffstat (limited to 'bridge')
-rw-r--r-- | bridge/config/config.go | 1 | ||||
-rw-r--r-- | bridge/mattermost/mattermost.go | 10 | ||||
-rw-r--r-- | bridge/slack/slack.go | 27 |
3 files changed, 36 insertions, 2 deletions
diff --git a/bridge/config/config.go b/bridge/config/config.go index 812ce18e..229cbef7 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -29,6 +29,7 @@ type Message struct { Gateway string `json:"gateway"` Timestamp time.Time `json:"timestamp"` ID string `json:"id"` + Extra []interface{} } type ChannelInfo struct { diff --git a/bridge/mattermost/mattermost.go b/bridge/mattermost/mattermost.go index 41a3f273..f9e350e8 100644 --- a/bridge/mattermost/mattermost.go +++ b/bridge/mattermost/mattermost.go @@ -26,6 +26,7 @@ type MMMessage struct { UserID string ID string Event string + Extra []interface{} } type Bmattermost struct { @@ -195,7 +196,7 @@ func (b *Bmattermost) handleMatter() { go b.handleMatterClient(mchan) } for message := range mchan { - rmsg := config.Message{Username: message.Username, Channel: message.Channel, Account: b.Account, UserID: message.UserID, ID: message.ID, Event: message.Event} + rmsg := config.Message{Username: message.Username, Channel: message.Channel, Account: b.Account, UserID: message.UserID, ID: message.ID, Event: message.Event, Extra: message.Extra} text, ok := b.replaceAction(message.Text) if ok { rmsg.Event = config.EVENT_USER_ACTION @@ -220,11 +221,17 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) { if (message.Raw.Event == "post_edited") && b.Config.EditDisable { continue } + + m := &MMMessage{} + props := message.Post.Props if props != nil { if _, ok := props["override_username"].(string); ok { message.Username = props["override_username"].(string) } + if _, ok := props["attachments"].([]interface{}); ok { + m.Extra = props["attachments"].([]interface{}) + } } // do not post our own messages back to irc // only listen to message from our team @@ -235,7 +242,6 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) { continue } flog.Debugf("Receiving from matterclient %#v", message) - m := &MMMessage{} m.UserID = message.UserID m.Username = message.Username m.Channel = message.Channel diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go index fa847db9..21163116 100644 --- a/bridge/slack/slack.go +++ b/bridge/slack/slack.go @@ -163,6 +163,8 @@ func (b *Bslack) Send(msg config.Message) (string, error) { np.IconURL = msg.Avatar } np.Attachments = append(np.Attachments, slack.Attachment{CallbackID: "matterbridge"}) + np.Attachments = append(np.Attachments, b.createAttach(msg.Extra)...) + // replace mentions np.LinkNames = 1 @@ -389,3 +391,28 @@ func (b *Bslack) replaceURL(text string) string { } return text } + +func (b *Bslack) createAttach(extra []interface{}) []slack.Attachment { + var attachs []slack.Attachment + if extra != nil { + for _, v := range extra { + entry := v.(map[string]interface{}) + s := slack.Attachment{} + s.Fallback = entry["fallback"].(string) + s.Color = entry["color"].(string) + s.Pretext = entry["pretext"].(string) + s.AuthorName = entry["author_name"].(string) + s.AuthorLink = entry["author_link"].(string) + s.AuthorIcon = entry["author_icon"].(string) + s.Title = entry["title"].(string) + s.TitleLink = entry["title_link"].(string) + s.Text = entry["text"].(string) + s.ImageURL = entry["image_url"].(string) + s.ThumbURL = entry["thumb_url"].(string) + s.Footer = entry["footer"].(string) + s.FooterIcon = entry["footer_icon"].(string) + attachs = append(attachs, s) + } + } + return attachs +} |