Thumbnail

rani/matterbridge.git

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

commit 3a1dc85b1c2833252675b458f512683dc2b41704 Author: Wim <wim@42.be> Date: Fri Feb 24 17:58:51 2017 +0000 Use roomalias instead of internal ID (matrix) diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go index 222a8fd..add7e40 100644 --- a/bridge/matrix/matrix.go +++ b/bridge/matrix/matrix.go @@ -46 +47 @@ import (   "github.com/42wim/matterbridge/bridge/config"   log "github.com/Sirupsen/logrus"   matrix "github.com/matrix-org/gomatrix" + "sync"  )    type Bmatrix struct { @@ -126 +138 @@ type Bmatrix struct {   Remote chan config.Message   Account string   UserID string + RoomMap map[string]string + sync.RWMutex  }    var flog *log.Entry @@ -236 +267 @@ func init() {    func New(cfg config.Protocol, account string, c chan config.Message) *Bmatrix {   b := &Bmatrix{} + b.RoomMap = make(map[string]string)   b.Config = &cfg   b.Account = account   b.Remote = c @@ -5826 +6247 @@ func (b *Bmatrix) Disconnect() error {  }    func (b *Bmatrix) JoinChannel(channel string) error { - _, err := b.mc.JoinRoom(channel, "", nil) + resp, err := b.mc.JoinRoom(channel, "", nil) + if err != nil { + return err + } + b.Lock() + b.RoomMap[resp.RoomID] = channel + b.Unlock()   return err  }    func (b *Bmatrix) Send(msg config.Message) error {   flog.Debugf("Receiving %#v", msg) - b.mc.SendText(msg.Channel, msg.Username+msg.Text) + channel := b.getRoomID(msg.Channel) + flog.Debugf("Sending to channel %s", channel) + b.mc.SendText(channel, msg.Username+msg.Text)   return nil  }   +func (b *Bmatrix) getRoomID(channel string) string { + b.RLock() + defer b.RUnlock() + for ID, name := range b.RoomMap { + if name == channel { + return ID + } + } + return "" +}  func (b *Bmatrix) handlematrix() error { - warning := "Not relaying this message, please setup a dedicated bot user"   syncer := b.mc.Syncer.(*matrix.DefaultSyncer)   syncer.OnEventType("m.room.message", func(ev *matrix.Event) {   if ev.Content["msgtype"].(string) == "m.text" && ev.Sender != b.UserID { + b.RLock() + channel, ok := b.RoomMap[ev.RoomID] + b.RUnlock() + if !ok { + flog.Debugf("Unknown room %s", ev.RoomID) + return + }   flog.Debugf("Sending message from %s on %s to gateway", ev.Sender, b.Account) - b.Remote <- config.Message{Username: ev.Sender, Text: ev.Content["body"].(string), Channel: ev.RoomID, Account: b.Account} - } - if ev.Sender == b.UserID && ev.Content["body"].(string) != warning { - b.mc.SendText(ev.RoomID, warning) + b.Remote <- config.Message{Username: ev.Sender, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account}   }   flog.Debugf("Received: %#v", ev)   }) diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index f0901ce..0f6e993 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -6087 +6087 @@ enable=true # see (https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau) #hipchat - id_channel (see https://www.hipchat.com/account/xmpp for the correct channel) #rocketchat - #channel (# is required) - #matrix - room internal ID (looks like !QJFqjsGJwmQzbuBfff:matrix.org) + #matrix - #channel:server (eg #yourchannel:matrix.org) #REQUIRED channel="#testing"