From 0bc9c70c66c26b5dff0d92de76ff712d9a75eecb Mon Sep 17 00:00:00 2001 From: Wim Date: Wed, 28 Feb 2018 22:54:47 +0100 Subject: [PATCH] Add usergroup support (slack). Closes #379 --- bridge/slack/slack.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go index 009a33a4..e89954e2 100644 --- a/bridge/slack/slack.go +++ b/bridge/slack/slack.go @@ -16,12 +16,13 @@ import ( ) type Bslack struct { - mh *matterhook.Client - sc *slack.Client - rtm *slack.RTM - Users []slack.User - si *slack.Info - channels []slack.Channel + mh *matterhook.Client + sc *slack.Client + rtm *slack.RTM + Users []slack.User + Usergroups []slack.UserGroup + si *slack.Info + channels []slack.Channel *config.BridgeConfig } @@ -283,10 +284,12 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) { b.Log.Debugf("%#v", ev.Error()) case *slack.ChannelJoinedEvent: b.Users, _ = b.sc.GetUsers() + b.Usergroups, _ = b.sc.GetUserGroups() case *slack.ConnectedEvent: b.channels = ev.Info.Channels b.si = ev.Info b.Users, _ = b.sc.GetUsers() + b.Usergroups, _ = b.sc.GetUserGroups() // add private channels groups, _ := b.sc.GetGroups(true) for _, g := range groups { @@ -327,12 +330,24 @@ func (b *Bslack) userName(id string) string { return "" } +func (b *Bslack) userGroupName(id string) string { + for _, u := range b.Usergroups { + if u.ID == id { + return u.Name + } + } + return "" +} + // @see https://api.slack.com/docs/message-formatting#linking_to_channels_and_users func (b *Bslack) replaceMention(text string) string { results := regexp.MustCompile(`<@([a-zA-z0-9]+)>`).FindAllStringSubmatch(text, -1) for _, r := range results { text = strings.Replace(text, "<@"+r[1]+">", "@"+b.userName(r[1]), -1) } + for _, r := range results { + text = strings.Replace(text, "<@"+r[1]+">", "@"+b.userGroupName(r[1]), -1) + } return text }