slack: assign userID and botID in all scenarios

This commit is contained in:
Qais Patankar
2020-03-19 14:19:43 +00:00
parent d8471eb047
commit 6a73c9b379
2 changed files with 41 additions and 24 deletions

View File

@@ -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()

View File

@@ -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