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 /bridge/rocketchat | |
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.
Diffstat (limited to 'bridge/rocketchat')
-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 { |