summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bridge/discord/discord.go4
-rw-r--r--bridge/gitter/gitter.go4
-rw-r--r--bridge/slack/slack.go13
-rw-r--r--bridge/xmpp/xmpp.go4
-rw-r--r--gateway/gateway.go41
5 files changed, 35 insertions, 31 deletions
diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go
index f1331dd4..446977ad 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -25,9 +25,9 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(config config.Protocol, origin string, c chan config.Message) *bdiscord {
+func New(cfg config.Protocol, origin string, c chan config.Message) *bdiscord {
b := &bdiscord{}
- b.Config = &config
+ b.Config = &cfg
b.Remote = c
b.protocol = protocol
b.origin = origin
diff --git a/bridge/gitter/gitter.go b/bridge/gitter/gitter.go
index 8d3a0459..95c41af4 100644
--- a/bridge/gitter/gitter.go
+++ b/bridge/gitter/gitter.go
@@ -23,9 +23,9 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(config config.Protocol, origin string, c chan config.Message) *Bgitter {
+func New(cfg config.Protocol, origin string, c chan config.Message) *Bgitter {
b := &Bgitter{}
- b.Config = &config
+ b.Config = &cfg
b.Remote = c
b.protocol = protocol
b.origin = origin
diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go
index f9432863..3b0a6c85 100644
--- a/bridge/slack/slack.go
+++ b/bridge/slack/slack.go
@@ -14,6 +14,7 @@ type MMMessage struct {
Text string
Channel string
Username string
+ Raw *slack.MessageEvent
}
type Bslack struct {
@@ -25,6 +26,7 @@ type Bslack struct {
Remote chan config.Message
protocol string
origin string
+ si *slack.Info
channels []slack.Channel
}
@@ -35,13 +37,12 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(config config.Protocol, origin string, c chan config.Message) *Bslack {
+func New(cfg config.Protocol, origin string, c chan config.Message) *Bslack {
b := &Bslack{}
- b.Config = &config
+ b.Config = &cfg
b.Remote = c
b.protocol = protocol
b.origin = origin
- b.Config.UseAPI = config.UseAPI
return b
}
@@ -148,6 +149,10 @@ func (b *Bslack) handleSlack() {
time.Sleep(time.Second)
flog.Debug("Start listening for Slack messages")
for message := range mchan {
+ // do not send messages from ourself
+ if message.Username == b.si.User.Name {
+ continue
+ }
texts := strings.Split(message.Text, "\n")
for _, text := range texts {
flog.Debugf("Sending message from %s on %s to gateway", message.Username, b.FullOrigin())
@@ -177,6 +182,7 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) {
m.Username = user.Name
m.Channel = channel.Name
m.Text = ev.Text
+ m.Raw = ev
mchan <- m
}
count++
@@ -184,6 +190,7 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) {
flog.Debugf("%#v", ev.Error())
case *slack.ConnectedEvent:
b.channels = ev.Info.Channels
+ b.si = ev.Info
case *slack.InvalidAuthEvent:
flog.Fatalf("Invalid Token %#v", ev)
default:
diff --git a/bridge/xmpp/xmpp.go b/bridge/xmpp/xmpp.go
index a7c326be..164284e5 100644
--- a/bridge/xmpp/xmpp.go
+++ b/bridge/xmpp/xmpp.go
@@ -25,10 +25,10 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(config config.Protocol, origin string, c chan config.Message) *Bxmpp {
+func New(cfg config.Protocol, origin string, c chan config.Message) *Bxmpp {
b := &Bxmpp{}
b.xmppMap = make(map[string]string)
- b.Config = &config
+ b.Config = &cfg
b.protocol = protocol
b.origin = origin
b.Remote = c
diff --git a/gateway/gateway.go b/gateway/gateway.go
index 464a4d95..7cf995b6 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -5,6 +5,7 @@ import (
"github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config"
log "github.com/Sirupsen/logrus"
+ "reflect"
"strings"
)
@@ -34,7 +35,8 @@ func New(cfg *config.Config, gateway *config.Gateway) error {
exists[br.Account] = true
}
gw.mapChannels()
- gw.mapIgnores()
+ //TODO fix mapIgnores
+ //gw.mapIgnores()
exists = make(map[string]bool)
for _, br := range gw.Bridges {
err := br.Connect()
@@ -134,29 +136,24 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool {
return false
}
-func setNickFormat(msg *config.Message, format string) {
- if format == "" {
- msg.Username = msg.Protocol + "." + msg.Origin + "-" + msg.Username + ": "
- return
+func (gw *Gateway) modifyMessage(msg *config.Message, dest bridge.Bridge) {
+ val := reflect.ValueOf(gw.Config).Elem()
+ for i := 0; i < val.NumField(); i++ {
+ typeField := val.Type().Field(i)
+ // look for the protocol map (both lowercase)
+ 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))
+ 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)
}
-
-func (gw *Gateway) modifyMessage(msg *config.Message, dest bridge.Bridge) {
- switch dest.Protocol() {
- case "irc":
- setNickFormat(msg, gw.Config.IRC[dest.Origin()].RemoteNickFormat)
- case "gitter":
- setNickFormat(msg, gw.Config.Gitter[dest.Origin()].RemoteNickFormat)
- case "xmpp":
- setNickFormat(msg, gw.Config.Xmpp[dest.Origin()].RemoteNickFormat)
- case "mattermost":
- setNickFormat(msg, gw.Config.Mattermost[dest.Origin()].RemoteNickFormat)
- case "slack":
- setNickFormat(msg, gw.Config.Slack[dest.Origin()].RemoteNickFormat)
- case "discord":
- setNickFormat(msg, gw.Config.Discord[dest.Origin()].RemoteNickFormat)
- }
-}