私の場合は、課題管理アプリを作成しており、課題作成者、更新者が選択できるチャンネルを取得したい場面がありました。
結論から言うと、Slackの Conversations APIの users.conversationsを利用すると、ユーザがアクセスできる会話一覧を取得可能です。
こちらをslack-goで書くと以下のようになります。
// SLACK_USER_AUTH_TOKENには、OAuth Access Tokenを指定する
import (
"os"
slack "github.com/slack-go/slack"
)
// GetChannels : 課題担当者の所属するチャンネル情報を取得
func GetChannels(userID string) ([]slack.Channel, error) {
// ユーザの所属するチャンネル情報を取得するのに利用
userAuthAPI := slack.New(os.Getenv("SLACK_USER_AUTH_TOKEN"))
conversationParams := slack.GetConversationsForUserParameters{
UserID: userID,
Cursor: "",
// DM、グループDMも取得したい場合は、im,mpimも設定してください
Types: []string{
"public_channel",
"private_channel",
},
Limit: 100,
ExcludeArchived: false,
}
channels, _, err := userAuthAPI.GetConversationsForUser(&conversationParams)
if err != nil {
return nil, err
}
return channels, nil
}
Slack側の設定も必要です。OAuth & Permissionsに遷移し、User Token Scopesを設定してください。※必要に応じて、im:read,mpim:readも設定してください。
私が作成したSlack課題管理Appはこちらです。
参考になる箇所があれば幸いです。