From 78238c85d425fef9c9087bf89b1d5723f2fcc58b Mon Sep 17 00:00:00 2001
From: Wim <wim@42.be>
Date: Fri, 23 Feb 2018 00:49:32 +0100
Subject: Add share support between slack instances. Closes #369

---
 bridge/slack/slack.go | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go
index 422f0f4a..a7945911 100644
--- a/bridge/slack/slack.go
+++ b/bridge/slack/slack.go
@@ -137,8 +137,7 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 	if b.Config.WebhookURL != "" {
 		if msg.Extra != nil {
 			for _, rmsg := range helper.HandleExtra(&msg, b.General) {
-				matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL, Channel: channel, UserName: rmsg.Username,
-					Text: rmsg.Text}
+				matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL, Channel: channel, UserName: rmsg.Username, Text: rmsg.Text}
 				b.mh.Send(matterMessage)
 			}
 			if len(msg.Extra["file"]) > 0 {
@@ -150,8 +149,15 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 				}
 			}
 		}
+		// if we have native slack_attachments add them
+		var attachs []slack.Attachment
+		if len(msg.Extra["slack_attachment"]) > 0 {
+			for _, attach := range msg.Extra["slack_attachment"] {
+				attachs = append(attachs, attach.([]slack.Attachment)...)
+			}
+		}
 
-		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
+		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL, Attachments: attachs}
 		matterMessage.Channel = channel
 		matterMessage.UserName = nick
 		matterMessage.Type = ""
@@ -178,6 +184,11 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 	}
 	np.Attachments = append(np.Attachments, slack.Attachment{CallbackID: "matterbridge"})
 	np.Attachments = append(np.Attachments, b.createAttach(msg.Extra)...)
+	if len(msg.Extra["slack_attachment"]) > 0 {
+		for _, attach := range msg.Extra["slack_attachment"] {
+			np.Attachments = append(np.Attachments, attach.([]slack.Attachment)...)
+		}
+	}
 
 	// replace mentions
 	np.LinkNames = 1
@@ -308,6 +319,11 @@ func (b *Bslack) handleSlack() {
 			msg.Event = config.EVENT_TOPIC_CHANGE
 		}
 
+		// save the attachments, so that we can send them to other slack (compatible) bridges
+		if len(message.Raw.Attachments) > 0 {
+			msg.Extra["slack_attachment"] = append(msg.Extra["slack_attachment"], message.Raw.Attachments)
+		}
+
 		// if we have a file attached, download it (in memory) and put a pointer to it in msg.Extra
 		if message.Raw.File != nil {
 			// limit to 1MB for now
-- 
cgit v1.2.3