Thumbnail

rani/matterbridge.git

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

commit 329512dee8bc1fffbf510737dea9ed00633a3f9f Author: Wim <wim@42.be> Date: Sat Nov 05 01:11:28 2016 +0000 Add support for dynamic IconURL (slack). Closes #43 diff --git a/bridge/config/config.go b/bridge/config/config.go index 8922289..32c8c74 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -1223 +12219 @@ 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 446977a..7995a06 100644 --- a/bridge/discord/discord.go +++ b/bridge/discord/discord.go @@ -1037 +1038 @@ 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 95c41af..5daf777 100644 --- a/bridge/gitter/gitter.go +++ b/bridge/gitter/gitter.go @@ -1058 +1059 @@ 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 30f2772..61b55da 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -12312 +12313 @@ 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 6236579..7f7340b 100644 --- a/bridge/mattermost/mattermost.go +++ b/bridge/mattermost/mattermost.go @@ -10610 +10610 @@ 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 @@ -1227 +1227 @@ 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 3b0a6c8..412c925 100644 --- a/bridge/slack/slack.go +++ b/bridge/slack/slack.go @@ -9413 +9412 @@ 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   } @@ -1087 +1077 @@ 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 { @@ -1218 +12019 @@ 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 164284e..51237a0 100644 --- a/bridge/xmpp/xmpp.go +++ b/bridge/xmpp/xmpp.go @@ -717 +718 @@ 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 7cf995b..13b6be1 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -1177 +1176 @@ 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 { @@ -14416 +1439 @@ 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 f01a3b4..ed26ba9 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -417 +417 @@ 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. @@ -1667 +1667 @@ 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. @@ -2057 +2057 @@ 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}> "    ################################################################### @@ -23210 +2326 @@ 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 @@ -2467 +24214 @@ 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, @@ -2578 +2608 @@ 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 @@ -3007 +3037 @@ 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}> "