From fee159541f60bad245794cda69649fab569c2024 Mon Sep 17 00:00:00 2001
From: Wim <wim@42.be>
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