From 8e6ddadba20135d990046f05d1a5d2b64b019138 Mon Sep 17 00:00:00 2001 From: ldruschk <14059613+ldruschk@users.noreply.github.com> Date: Sat, 18 Apr 2020 22:00:35 +0200 Subject: [PATCH] Relay Joins/Topic changes in RocketChat bridge (#1085) This pull request properly sets the events EventJoinLeave and EventTopicChange for messages from the RocketChat bridge and drops messages which are neither one of those events nor plain messages. --- bridge/rocketchat/handlers.go | 25 ++++++++++++++++++++++++- bridge/rocketchat/rocketchat.go | 6 ++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/bridge/rocketchat/handlers.go b/bridge/rocketchat/handlers.go index a41004d4..80adb31e 100644 --- a/bridge/rocketchat/handlers.go +++ b/bridge/rocketchat/handlers.go @@ -2,6 +2,7 @@ package brocketchat import ( "github.com/42wim/matterbridge/bridge/config" + "github.com/matterbridge/Rocket.Chat.Go.SDK/models" ) func (b *Brocketchat) handleRocket() { @@ -38,6 +39,23 @@ func (b *Brocketchat) handleRocketHook(messages chan *config.Message) { } } +func (b *Brocketchat) handleStatusEvent(ev models.Message, rmsg *config.Message) bool { + switch ev.Type { + case "": + // this is a normal message, no processing needed + // return true so the message is not dropped + return true + case sUserJoined, sUserLeft: + rmsg.Event = config.EventJoinLeave + return true + case sRoomChangedTopic: + rmsg.Event = config.EventTopicChange + return true + } + b.Log.Debugf("Dropping message with unknown type: %s", ev.Type) + return false +} + func (b *Brocketchat) handleRocketClient(messages chan *config.Message) { for message := range b.messageChan { // skip messages with same ID, apparently messages get duplicated for an unknown reason @@ -59,7 +77,12 @@ func (b *Brocketchat) handleRocketClient(messages chan *config.Message) { UserID: message.User.ID, ID: message.ID, } - messages <- rmsg + + // handleStatusEvent returns false if the message should be dropped + // in that case it is probably some modification to the channel we do not want to relay + if b.handleStatusEvent(m, rmsg) { + messages <- rmsg + } } } diff --git a/bridge/rocketchat/rocketchat.go b/bridge/rocketchat/rocketchat.go index 59f0e99c..405beadc 100644 --- a/bridge/rocketchat/rocketchat.go +++ b/bridge/rocketchat/rocketchat.go @@ -29,6 +29,12 @@ type Brocketchat struct { sync.RWMutex } +const ( + sUserJoined = "uj" + sUserLeft = "ul" + sRoomChangedTopic = "room_changed_topic" +) + func New(cfg *bridge.Config) bridge.Bridger { newCache, err := lru.New(100) if err != nil {