Refactor modifyMessage

This commit is contained in:
Wim 2016-11-04 00:05:15 +01:00
parent 95fac548bb
commit c3a8b7a997
5 changed files with 35 additions and 31 deletions

View File

@ -25,9 +25,9 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol}) 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 := &bdiscord{}
b.Config = &config b.Config = &cfg
b.Remote = c b.Remote = c
b.protocol = protocol b.protocol = protocol
b.origin = origin b.origin = origin

View File

@ -23,9 +23,9 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol}) 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 := &Bgitter{}
b.Config = &config b.Config = &cfg
b.Remote = c b.Remote = c
b.protocol = protocol b.protocol = protocol
b.origin = origin b.origin = origin

View File

@ -14,6 +14,7 @@ type MMMessage struct {
Text string Text string
Channel string Channel string
Username string Username string
Raw *slack.MessageEvent
} }
type Bslack struct { type Bslack struct {
@ -25,6 +26,7 @@ type Bslack struct {
Remote chan config.Message Remote chan config.Message
protocol string protocol string
origin string origin string
si *slack.Info
channels []slack.Channel channels []slack.Channel
} }
@ -35,13 +37,12 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol}) 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 := &Bslack{}
b.Config = &config b.Config = &cfg
b.Remote = c b.Remote = c
b.protocol = protocol b.protocol = protocol
b.origin = origin b.origin = origin
b.Config.UseAPI = config.UseAPI
return b return b
} }
@ -148,6 +149,10 @@ func (b *Bslack) handleSlack() {
time.Sleep(time.Second) time.Sleep(time.Second)
flog.Debug("Start listening for Slack messages") flog.Debug("Start listening for Slack messages")
for message := range mchan { for message := range mchan {
// do not send messages from ourself
if message.Username == b.si.User.Name {
continue
}
texts := strings.Split(message.Text, "\n") texts := strings.Split(message.Text, "\n")
for _, text := range texts { for _, text := range texts {
flog.Debugf("Sending message from %s on %s to gateway", message.Username, b.FullOrigin()) 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.Username = user.Name
m.Channel = channel.Name m.Channel = channel.Name
m.Text = ev.Text m.Text = ev.Text
m.Raw = ev
mchan <- m mchan <- m
} }
count++ count++
@ -184,6 +190,7 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) {
flog.Debugf("%#v", ev.Error()) flog.Debugf("%#v", ev.Error())
case *slack.ConnectedEvent: case *slack.ConnectedEvent:
b.channels = ev.Info.Channels b.channels = ev.Info.Channels
b.si = ev.Info
case *slack.InvalidAuthEvent: case *slack.InvalidAuthEvent:
flog.Fatalf("Invalid Token %#v", ev) flog.Fatalf("Invalid Token %#v", ev)
default: default:

View File

@ -25,10 +25,10 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol}) 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 := &Bxmpp{}
b.xmppMap = make(map[string]string) b.xmppMap = make(map[string]string)
b.Config = &config b.Config = &cfg
b.protocol = protocol b.protocol = protocol
b.origin = origin b.origin = origin
b.Remote = c b.Remote = c

View File

@ -5,6 +5,7 @@ import (
"github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/config"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"reflect"
"strings" "strings"
) )
@ -34,7 +35,8 @@ func New(cfg *config.Config, gateway *config.Gateway) error {
exists[br.Account] = true exists[br.Account] = true
} }
gw.mapChannels() gw.mapChannels()
gw.mapIgnores() //TODO fix mapIgnores
//gw.mapIgnores()
exists = make(map[string]bool) exists = make(map[string]bool)
for _, br := range gw.Bridges { for _, br := range gw.Bridges {
err := br.Connect() err := br.Connect()
@ -134,29 +136,24 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool {
return false return false
} }
func setNickFormat(msg *config.Message, format string) { func (gw *Gateway) modifyMessage(msg *config.Message, dest bridge.Bridge) {
if format == "" { val := reflect.ValueOf(gw.Config).Elem()
msg.Username = msg.Protocol + "." + msg.Origin + "-" + msg.Username + ": " for i := 0; i < val.NumField(); i++ {
return 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(format, "{NICK}", msg.Username, -1)
msg.Username = strings.Replace(msg.Username, "{BRIDGE}", msg.Origin, -1) msg.Username = strings.Replace(msg.Username, "{BRIDGE}", msg.Origin, -1)
msg.Username = strings.Replace(msg.Username, "{PROTOCOL}", msg.Protocol, -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)
}
}