summaryrefslogtreecommitdiffstats
path: root/bridge/slack/handlers.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-01-18 18:35:31 +0100
committerGitHub <noreply@github.com>2019-01-18 18:35:31 +0100
commitfb713ed91bfb48c0037e489f80be85c54e69953a (patch)
treee82901d1a604b02bbb5e3a2c4712f20e61d0513b /bridge/slack/handlers.go
parentd99eacc2e1b0deadc7368b35adf0818493fd2fb9 (diff)
downloadmatterbridge-msglm-fb713ed91bfb48c0037e489f80be85c54e69953a.tar.gz
matterbridge-msglm-fb713ed91bfb48c0037e489f80be85c54e69953a.tar.bz2
matterbridge-msglm-fb713ed91bfb48c0037e489f80be85c54e69953a.zip
Add initial support for getting ChannelMember info of all bridges (#678)
* Add initial support for getting ChannelMember info of all bridges. Adds an EventGetChannelMembers event, which gets send every x time to all bridges. Bridges should respond on this event with a Message containing ChannelMembers in the EventGetChannelMembers key in the Extra field. handleEventGetChannelMembers will handle this Message and sets the contained ChannelMembers to the Bridge struct. * Add ChannelMembers support to the slack bridge
Diffstat (limited to 'bridge/slack/handlers.go')
-rw-r--r--bridge/slack/handlers.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/bridge/slack/handlers.go b/bridge/slack/handlers.go
index f46eb595..5e601eaa 100644
--- a/bridge/slack/handlers.go
+++ b/bridge/slack/handlers.go
@@ -309,6 +309,58 @@ func (b *Bslack) handleDownloadFile(rmsg *config.Message, file *slack.File, retr
return nil
}
+// handleGetChannelMembers handles messages containing the GetChannelMembers event
+// Sends a message to the router containing *config.ChannelMembers
+func (b *Bslack) handleGetChannelMembers(rmsg *config.Message) bool {
+ if rmsg.Event != config.EventGetChannelMembers {
+ return false
+ }
+
+ cMembers := config.ChannelMembers{}
+
+ b.channelMembersMutex.RLock()
+
+ for channelID, members := range b.channelMembers {
+ for _, member := range members {
+ channelName := ""
+ userName := ""
+ userNick := ""
+ user := b.getUser(member)
+ if user != nil {
+ userName = user.Name
+ userNick = user.Profile.DisplayName
+ }
+ channel, _ := b.getChannelByID(channelID)
+ if channel != nil {
+ channelName = channel.Name
+ }
+ cMember := config.ChannelMember{
+ Username: userName,
+ Nick: userNick,
+ UserID: member,
+ ChannelID: channelID,
+ ChannelName: channelName,
+ }
+ cMembers = append(cMembers, cMember)
+ }
+ }
+
+ b.channelMembersMutex.RUnlock()
+
+ extra := make(map[string][]interface{})
+ extra[config.EventGetChannelMembers] = append(extra[config.EventGetChannelMembers], cMembers)
+ msg := config.Message{
+ Extra: extra,
+ Event: config.EventGetChannelMembers,
+ Account: b.Account,
+ }
+
+ b.Log.Debugf("sending msg to remote %#v", msg)
+ b.Remote <- msg
+
+ return true
+}
+
// fileCached implements Matterbridge's caching logic for files
// shared via Slack.
//