mirror of
https://github.com/42wim/matterbridge.git
synced 2024-11-15 00:19:24 +01:00
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.
This commit is contained in:
parent
8a87a71927
commit
8e6ddadba2
@ -2,6 +2,7 @@ package brocketchat
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/42wim/matterbridge/bridge/config"
|
"github.com/42wim/matterbridge/bridge/config"
|
||||||
|
"github.com/matterbridge/Rocket.Chat.Go.SDK/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (b *Brocketchat) handleRocket() {
|
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) {
|
func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
|
||||||
for message := range b.messageChan {
|
for message := range b.messageChan {
|
||||||
// skip messages with same ID, apparently messages get duplicated for an unknown reason
|
// skip messages with same ID, apparently messages get duplicated for an unknown reason
|
||||||
@ -59,9 +77,14 @@ func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
|
|||||||
UserID: message.User.ID,
|
UserID: message.User.ID,
|
||||||
ID: message.ID,
|
ID: message.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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
|
messages <- rmsg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Brocketchat) handleUploadFile(msg *config.Message) error {
|
func (b *Brocketchat) handleUploadFile(msg *config.Message) error {
|
||||||
for _, f := range msg.Extra["file"] {
|
for _, f := range msg.Extra["file"] {
|
||||||
|
@ -29,6 +29,12 @@ type Brocketchat struct {
|
|||||||
sync.RWMutex
|
sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
sUserJoined = "uj"
|
||||||
|
sUserLeft = "ul"
|
||||||
|
sRoomChangedTopic = "room_changed_topic"
|
||||||
|
)
|
||||||
|
|
||||||
func New(cfg *bridge.Config) bridge.Bridger {
|
func New(cfg *bridge.Config) bridge.Bridger {
|
||||||
newCache, err := lru.New(100)
|
newCache, err := lru.New(100)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user