diff options
author | ldruschk <14059613+ldruschk@users.noreply.github.com> | 2020-04-18 22:00:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-18 22:00:35 +0200 |
commit | 8e6ddadba20135d990046f05d1a5d2b64b019138 (patch) | |
tree | d032afc8fe104d3e635ece51d9e12b9efa771ce2 | |
parent | 8a87a71927d8560ccd993a986be4e7eb34ad46da (diff) | |
download | matterbridge-msglm-8e6ddadba20135d990046f05d1a5d2b64b019138.tar.gz matterbridge-msglm-8e6ddadba20135d990046f05d1a5d2b64b019138.tar.bz2 matterbridge-msglm-8e6ddadba20135d990046f05d1a5d2b64b019138.zip |
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.
-rw-r--r-- | bridge/rocketchat/handlers.go | 25 | ||||
-rw-r--r-- | bridge/rocketchat/rocketchat.go | 6 |
2 files changed, 30 insertions, 1 deletions
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 { |