From fee159541f60bad245794cda69649fab569c2024 Mon Sep 17 00:00:00 2001 From: Wim Date: Sat, 3 Dec 2016 00:10:29 +0100 Subject: Add initial Rocket.Chat support --- bridge/rocketchat/rocketchat.go | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 bridge/rocketchat/rocketchat.go (limited to 'bridge/rocketchat') diff --git a/bridge/rocketchat/rocketchat.go b/bridge/rocketchat/rocketchat.go new file mode 100644 index 00000000..d87450ec --- /dev/null +++ b/bridge/rocketchat/rocketchat.go @@ -0,0 +1,82 @@ +package brocketchat + +import ( + "github.com/42wim/matterbridge/bridge/config" + "github.com/42wim/matterbridge/hook/rockethook" + "github.com/42wim/matterbridge/matterhook" + log "github.com/Sirupsen/logrus" +) + +type MMhook struct { + mh *matterhook.Client + rh *rockethook.Client +} + +type Brocketchat struct { + MMhook + Config *config.Protocol + Remote chan config.Message + name string + Account string +} + +var flog *log.Entry +var protocol = "rocketchat" + +func init() { + flog = log.WithFields(log.Fields{"module": protocol}) +} + +func New(cfg config.Protocol, account string, c chan config.Message) *Brocketchat { + b := &Brocketchat{} + b.Config = &cfg + b.Remote = c + b.Account = account + return b +} + +func (b *Brocketchat) Command(cmd string) string { + return "" +} + +func (b *Brocketchat) Connect() error { + flog.Info("Connecting webhooks") + b.mh = matterhook.New(b.Config.URL, + matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, + DisableServer: true}) + b.rh = rockethook.New(b.Config.URL, rockethook.Config{BindAddress: b.Config.BindAddress}) + go b.handleRocketHook() + return nil +} + +func (b *Brocketchat) JoinChannel(channel string) error { + return nil +} + +func (b *Brocketchat) Send(msg config.Message) error { + flog.Debugf("Receiving %#v", msg) + matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} + matterMessage.Channel = msg.Channel + matterMessage.UserName = msg.Username + matterMessage.Type = "" + matterMessage.Text = msg.Text + err := b.mh.Send(matterMessage) + if err != nil { + flog.Info(err) + return err + } + return nil +} + +func (b *Brocketchat) handleRocketHook() { + for { + message := b.rh.Receive() + flog.Debugf("Receiving from rockethook %#v", message) + // do not loop + if message.UserName == b.Config.Nick { + continue + } + flog.Debugf("Sending message from %s on %s to gateway", message.UserName, b.Account) + b.Remote <- config.Message{Text: message.Text, Username: message.UserName, Channel: message.ChannelName, Account: b.Account} + } +} -- cgit v1.2.3