From 6a73c9b379b7339dfd003905dbf0200cfb35d4a4 Mon Sep 17 00:00:00 2001 From: Qais Patankar Date: Thu, 19 Mar 2020 14:19:43 +0000 Subject: [PATCH] slack: assign userID and botID in all scenarios --- bridge/slack/legacy.go | 13 +++++++---- bridge/slack/slack.go | 52 ++++++++++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/bridge/slack/legacy.go b/bridge/slack/legacy.go index d89d286d..78f73060 100644 --- a/bridge/slack/legacy.go +++ b/bridge/slack/legacy.go @@ -5,7 +5,6 @@ import ( "github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/matterhook" - "github.com/slack-go/slack" ) type BLegacy struct { @@ -31,7 +30,9 @@ func (b *BLegacy) Connect() error { }) case b.GetString(tokenConfig) != "": b.Log.Info("Connecting using token (sending)") - b.sc = slack.New(b.GetString(tokenConfig)) + if err := b.createSlackClient(); err != nil { + return err + } b.rtm = b.sc.NewRTM() go b.rtm.ManageConnection() b.Log.Info("Connecting using webhookbindaddress (receiving)") @@ -57,7 +58,9 @@ func (b *BLegacy) Connect() error { }) if b.GetString(tokenConfig) != "" { b.Log.Info("Connecting using token (receiving)") - b.sc = slack.New(b.GetString(tokenConfig), slack.OptionDebug(b.GetBool("debug"))) + if err := b.createSlackClient(); err != nil { + return err + } b.channels = newChannelManager(b.Log, b.sc) b.users = newUserManager(b.Log, b.sc) b.rtm = b.sc.NewRTM() @@ -66,7 +69,9 @@ func (b *BLegacy) Connect() error { } } else if b.GetString(tokenConfig) != "" { b.Log.Info("Connecting using token (sending and receiving)") - b.sc = slack.New(b.GetString(tokenConfig), slack.OptionDebug(b.GetBool("debug"))) + if err := b.createSlackClient(); err != nil { + return err + } b.channels = newChannelManager(b.Log, b.sc) b.users = newUserManager(b.Log, b.sc) b.rtm = b.sc.NewRTM() diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go index c35dc0e4..80ff85e5 100644 --- a/bridge/slack/slack.go +++ b/bridge/slack/slack.go @@ -110,30 +110,13 @@ func (b *Bslack) Connect() error { if token := b.GetString(tokenConfig); token != "" { b.Log.Info("Connecting using token") - b.sc = slack.New(token, slack.OptionDebug(b.GetBool("Debug"))) + if err := b.createSlackClient(); err != nil { + return err + } b.channels = newChannelManager(b.Log, b.sc) b.users = newUserManager(b.Log, b.sc) - // Get our own user ID - authTestResp, err := b.sc.AuthTest() - if err != nil { - return errors.New("auth_test: " + err.Error()) - } - b.userID = authTestResp.UserID - - // Get the info of our user ID so that we can determine our bot ID - user, err := b.sc.GetUserInfo(b.userID) - if err != nil { - return errors.New("get_user_info: " + err.Error()) - } - if user.IsBot { - b.botID = user.Profile.BotID - b.Log.Debugf("Our bot ID is %#v\n", b.botID) - } else { - b.Log.Debugln("We are not a bot.") - } - b.rtm = b.sc.NewRTM() go b.rtm.ManageConnection() go b.handleSlack() @@ -165,6 +148,35 @@ func (b *Bslack) Disconnect() error { return b.rtm.Disconnect() } +func (b *Bslack) createSlackClient() error { + if b.sc != nil { + panic("createSlackClient should be called exactly once") + } + + b.sc = slack.New(b.GetString(tokenConfig), slack.OptionDebug(b.GetBool("Debug"))) + + // Get our own user ID + authTestResp, err := b.sc.AuthTest() + if err != nil { + return errors.New("auth_test: " + err.Error()) + } + b.userID = authTestResp.UserID + + // Get the info of our user ID so that we can determine our bot ID + user, err := b.sc.GetUserInfo(b.userID) + if err != nil { + return errors.New("get_user_info: " + err.Error()) + } + if user.IsBot { + b.botID = user.Profile.BotID + b.Log.Debugf("Our bot ID is %#v\n", b.botID) + } else { + b.Log.Debugln("We are not a bot.") + } + + return nil +} + // JoinChannel only acts as a verification method that checks whether Matterbridge's // Slack integration is already member of the channel. This is because Slack does not // allow apps or bots to join channels themselves and they need to be invited