summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim <wim@42.be>2016-11-05 01:11:28 +0100
committerWim <wim@42.be>2016-11-05 01:11:51 +0100
commit2dbe0eb55729620ffdfdb7e4f10003564d79c7e1 (patch)
tree65e5309a42c1cee478b5b0c8448c36d819c9d41a
parent50a0df427927b60724d8e6e00ba06822e0aa7308 (diff)
downloadmatterbridge-msglm-2dbe0eb55729620ffdfdb7e4f10003564d79c7e1.tar.gz
matterbridge-msglm-2dbe0eb55729620ffdfdb7e4f10003564d79c7e1.tar.bz2
matterbridge-msglm-2dbe0eb55729620ffdfdb7e4f10003564d79c7e1.zip
Add support for dynamic IconURL (slack). Closes #43
-rw-r--r--bridge/config/config.go16
-rw-r--r--bridge/discord/discord.go3
-rw-r--r--bridge/gitter/gitter.go3
-rw-r--r--bridge/irc/irc.go3
-rw-r--r--bridge/mattermost/mattermost.go8
-rw-r--r--bridge/slack/slack.go28
-rw-r--r--bridge/xmpp/xmpp.go3
-rw-r--r--gateway/gateway.go10
-rw-r--r--matterbridge.toml.sample23
9 files changed, 61 insertions, 36 deletions
diff --git a/bridge/config/config.go b/bridge/config/config.go
index 89222894..32c8c74f 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -122,3 +122,19 @@ func OverrideCfgFromEnv(cfg *Config, protocol string, account string) {
}
}
}
+
+func GetIconURL(msg *Message, cfg *Protocol) string {
+ iconURL := cfg.IconURL
+ iconURL = strings.Replace(iconURL, "{NICK}", msg.Username, -1)
+ iconURL = strings.Replace(iconURL, "{BRIDGE}", msg.Origin, -1)
+ iconURL = strings.Replace(iconURL, "{PROTOCOL}", msg.Protocol, -1)
+ return iconURL
+}
+
+func GetNick(msg *Message, cfg *Protocol) string {
+ nick := cfg.RemoteNickFormat
+ nick = strings.Replace(nick, "{NICK}", msg.Username, -1)
+ nick = strings.Replace(nick, "{BRIDGE}", msg.Origin, -1)
+ nick = strings.Replace(nick, "{PROTOCOL}", msg.Protocol, -1)
+ return nick
+}
diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go
index 446977ad..7995a06d 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -103,7 +103,8 @@ func (b *bdiscord) Send(msg config.Message) error {
flog.Errorf("Could not find channelID for %v", msg.Channel)
return nil
}
- b.c.ChannelMessageSend(channelID, msg.Username+msg.Text)
+ nick := config.GetNick(&msg, b.Config)
+ b.c.ChannelMessageSend(channelID, nick+msg.Text)
return nil
}
diff --git a/bridge/gitter/gitter.go b/bridge/gitter/gitter.go
index 95c41af4..5daf7773 100644
--- a/bridge/gitter/gitter.go
+++ b/bridge/gitter/gitter.go
@@ -105,8 +105,9 @@ func (b *Bgitter) Send(msg config.Message) error {
flog.Errorf("Could not find roomID for %v", msg.Channel)
return nil
}
+ nick := config.GetNick(&msg, b.Config)
// add ZWSP because gitter echoes our own messages
- return b.c.SendMessage(roomID, msg.Username+msg.Text+" ​")
+ return b.c.SendMessage(roomID, nick+msg.Text+" ​")
}
func (b *Bgitter) getRoomID(channel string) string {
diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go
index 30f27724..61b55dab 100644
--- a/bridge/irc/irc.go
+++ b/bridge/irc/irc.go
@@ -123,12 +123,13 @@ func (b *Birc) Send(msg config.Message) error {
b.Command(&msg)
return nil
}
+ nick := config.GetNick(&msg, b.Config)
for _, text := range strings.Split(msg.Text, "\n") {
if len(b.Local) < b.Config.MessageQueue {
if len(b.Local) == b.Config.MessageQueue-1 {
text = text + " <message clipped>"
}
- b.Local <- config.Message{Text: text, Username: msg.Username, Channel: msg.Channel}
+ b.Local <- config.Message{Text: text, Username: nick, Channel: msg.Channel}
} else {
flog.Debugf("flooding, dropping message (queue at %d)", len(b.Local))
}
diff --git a/bridge/mattermost/mattermost.go b/bridge/mattermost/mattermost.go
index 62365792..7f7340b6 100644
--- a/bridge/mattermost/mattermost.go
+++ b/bridge/mattermost/mattermost.go
@@ -106,10 +106,10 @@ func (b *Bmattermost) Protocol() string {
func (b *Bmattermost) Send(msg config.Message) error {
flog.Debugf("Receiving %#v", msg)
- return b.SendType(msg.Username, msg.Text, msg.Channel, "")
-}
+ nick := config.GetNick(&msg, b.Config)
+ message := msg.Text
+ channel := msg.Channel
-func (b *Bmattermost) SendType(nick string, message string, channel string, mtype string) error {
if b.Config.PrefixMessagesWithNick {
/*if IsMarkup(message) {
message = nick + "\n\n" + message
@@ -122,7 +122,7 @@ func (b *Bmattermost) SendType(nick string, message string, channel string, mtyp
matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
matterMessage.Channel = channel
matterMessage.UserName = nick
- matterMessage.Type = mtype
+ matterMessage.Type = ""
matterMessage.Text = message
err := b.mh.Send(matterMessage)
if err != nil {
diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go
index 3b0a6c85..412c925b 100644
--- a/bridge/slack/slack.go
+++ b/bridge/slack/slack.go
@@ -94,13 +94,12 @@ func (b *Bslack) Origin() string {
func (b *Bslack) Send(msg config.Message) error {
flog.Debugf("Receiving %#v", msg)
- if msg.FullOrigin != b.FullOrigin() {
- return b.SendType(msg.Username, msg.Text, msg.Channel, "")
+ if msg.FullOrigin == b.FullOrigin() {
+ return nil
}
- return nil
-}
-
-func (b *Bslack) SendType(nick string, message string, channel string, mtype string) error {
+ nick := config.GetNick(&msg, b.Config)
+ message := msg.Text
+ channel := msg.Channel
if b.Config.PrefixMessagesWithNick {
message = nick + " " + message
}
@@ -108,7 +107,7 @@ func (b *Bslack) SendType(nick string, message string, channel string, mtype str
matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
matterMessage.Channel = channel
matterMessage.UserName = nick
- matterMessage.Type = mtype
+ matterMessage.Type = ""
matterMessage.Text = message
err := b.mh.Send(matterMessage)
if err != nil {
@@ -121,8 +120,19 @@ func (b *Bslack) SendType(nick string, message string, channel string, mtype str
if err != nil {
return err
}
- newmsg := b.rtm.NewOutgoingMessage(message, schannel.ID)
- b.rtm.SendMessage(newmsg)
+ np := slack.NewPostMessageParameters()
+ if b.Config.PrefixMessagesWithNick == true {
+ np.AsUser = true
+ }
+ np.Username = nick
+ np.IconURL = config.GetIconURL(&msg, b.Config)
+ b.sc.PostMessage(schannel.ID, message, np)
+
+ /*
+ newmsg := b.rtm.NewOutgoingMessage(message, schannel.ID)
+ b.rtm.SendMessage(newmsg)
+ */
+
return nil
}
diff --git a/bridge/xmpp/xmpp.go b/bridge/xmpp/xmpp.go
index 164284e5..51237a08 100644
--- a/bridge/xmpp/xmpp.go
+++ b/bridge/xmpp/xmpp.go
@@ -71,7 +71,8 @@ func (b *Bxmpp) Origin() string {
func (b *Bxmpp) Send(msg config.Message) error {
flog.Debugf("Receiving %#v", msg)
- b.xc.Send(xmpp.Chat{Type: "groupchat", Remote: msg.Channel + "@" + b.Config.Muc, Text: msg.Username + msg.Text})
+ nick := config.GetNick(&msg, b.Config)
+ b.xc.Send(xmpp.Chat{Type: "groupchat", Remote: msg.Channel + "@" + b.Config.Muc, Text: nick + msg.Text})
return nil
}
diff --git a/gateway/gateway.go b/gateway/gateway.go
index 7cf995b6..13b6be1b 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -117,7 +117,6 @@ func (gw *Gateway) handleMessage(msg config.Message, dest bridge.Bridge) {
log.Debug("empty channel")
return
}
- gw.modifyMessage(&msg, dest)
log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.FullOrigin, originchannel, dest.FullOrigin(), channel)
err := dest.Send(msg)
if err != nil {
@@ -144,16 +143,9 @@ func (gw *Gateway) modifyMessage(msg *config.Message, dest bridge.Bridge) {
if strings.ToLower(typeField.Name) == dest.Protocol() {
// get the Protocol struct from the map
protoCfg := val.Field(i).MapIndex(reflect.ValueOf(dest.Origin()))
- setNickFormat(msg, protoCfg.Interface().(config.Protocol))
+ //config.SetNickFormat(msg, protoCfg.Interface().(config.Protocol))
val.Field(i).SetMapIndex(reflect.ValueOf(dest.Origin()), protoCfg)
break
}
}
}
-
-func setNickFormat(msg *config.Message, cfg config.Protocol) {
- format := cfg.RemoteNickFormat
- msg.Username = strings.Replace(format, "{NICK}", msg.Username, -1)
- msg.Username = strings.Replace(msg.Username, "{BRIDGE}", msg.Origin, -1)
- msg.Username = strings.Replace(msg.Username, "{PROTOCOL}", msg.Protocol, -1)
-}
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index f01a3b48..ed26ba9a 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -41,7 +41,7 @@ NickServPassword="secret"
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
-#OPTIONAL (default {BRIDGE}-{NICK})
+#OPTIONAL (default empty)
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
#Nicks you want to ignore.
@@ -166,7 +166,7 @@ PrefixMessagesWithNick=false
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
-#OPTIONAL (default {BRIDGE}-{NICK})
+#OPTIONAL (default empty)
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
#how to format the list of IRC nicks when displayed in mattermost.
@@ -205,7 +205,7 @@ IgnoreNicks="spammer1 spammer2"
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
-#OPTIONAL (default {BRIDGE}-{NICK})
+#OPTIONAL (default empty)
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
###################################################################
@@ -232,10 +232,6 @@ URL="https://hooks.slack.com/services/yourhook"
#REQUIRED (unless useAPI=true)
BindAddress="0.0.0.0:9999"
-#Icon that will be showed in slack
-#OPTIONAL
-IconURL="http://youricon.png"
-
#### Settings for using slack API
#OPTIONAL
useAPI=false
@@ -246,7 +242,14 @@ Token="yourslacktoken"
#### Shared settings for webhooks and API
-#Whether to prefix messages from other bridges to mattermost with the sender's nick.
+#Icon that will be showed in slack
+#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
+#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
+#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
+#OPTIONAL
+IconURL="https://robohash.org/{NICK}.png?size=48x48"
+
+#Whether to prefix messages from other bridges to mattermost with RemoteNickFormat
#Useful if username overrides for incoming webhooks isn't enabled on the
#slack server. If you set PrefixMessagesWithNick to true, each message
#from bridge to Slack will by default be prefixed by "bridge-" + nick. You can,
@@ -257,8 +260,8 @@ PrefixMessagesWithNick=false
#RemoteNickFormat defines how remote users appear on this bridge
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
-#OPTIONAL (default {BRIDGE}-{NICK})
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
+#OPTIONAL (default empty)
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
#how to format the list of IRC nicks when displayed in slack
@@ -300,7 +303,7 @@ IgnoreNicks="spammer1 spammer2"
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
-#OPTIONAL (default {BRIDGE}-{NICK})
+#OPTIONAL (default empty)
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "