地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Go】Slackのグループを任意のユーザーIDで書き換える

任意のスケジュールと組み合わせたいという感じで使える。

package main

import (
    "fmt"
    "log"
    "os"
    "strings"

    "github.com/slack-go/slack" // slack-go/slack ライブラリをインポート
)

func main() {
    // --- 設定値 (環境変数から取得することを推奨) ---
    // 例:
    // export SLACK_BOT_TOKEN="xoxb-your-valid-token"
    // export SLACK_USERGROUP_ID_TO_UPDATE="S0XXXXXXX" // 更新したいユーザーグループのID
    // export SLACK_NEW_USER_IDS="U0YYYYYYY,U0ZZZZZZZ" // 新しいメンバーのユーザーID (カンマ区切り)

    apiToken := os.Getenv("SLACK_BOT_TOKEN")
    userGroupID := os.Getenv("SLACK_USERGROUP_ID_TO_UPDATE")
    newUserIDsStr := os.Getenv("SLACK_NEW_USER_IDS") // カンマ区切りのユーザーID文字列

    // 必須の環境変数が設定されているか確認
    if apiToken == "" || userGroupID == "" || newUserIDsStr == "" {
        log.Fatal("エラー: 環境変数 SLACK_BOT_TOKEN, SLACK_USERGROUP_ID_TO_UPDATE, SLACK_NEW_USER_IDS を設定してください。")
    }

    // --- Slack APIクライアントの初期化 ---
    // slack.OptionDebug(true) をつけると、APIリクエスト/レスポンスの詳細なログが出力されます
    api := slack.New(apiToken, slack.OptionDebug(false))

    // --- ユーザーグループメンバーの更新 ---
    // UpdateUserGroupMembersメソッドは、メンバーリストを「置き換える」動作をします。
    // 第2引数には、新しいメンバーのユーザーIDをカンマ区切りで結合した文字列を渡します。
    // 空のグループにしたい場合は、空文字列 "" を渡します。
    log.Printf("ユーザーグループ %s のメンバーを更新します。新しいメンバー: [%s]\n", userGroupID, newUserIDsStr)

    // APIを呼び出してメンバーを更新
    // 戻り値は更新後のユーザーグループ情報
    updatedUserGroup, err := api.UpdateUserGroupMembers(userGroupID, newUserIDsStr)
    if err != nil {
        // エラー内容を確認しましょう (例: invalid_auth, usergroup_not_found, missing_scope など)
        log.Fatalf("ユーザーグループメンバーの更新に失敗しました: %v\n", err)
    }

    // --- 結果の表示 ---
    log.Printf("ユーザーグループ '%s' (%s) のメンバー更新に成功しました。\n", updatedUserGroup.Name, updatedUserGroup.ID)
    log.Printf("現在のメンバー数: %d\n", updatedUserGroup.UserCount)

    // (オプション) 更新後のメンバーリストをAPIで再取得して確認
    currentMemberIDs, err := api.GetUserGroupMembers(userGroupID)
    if err != nil {
        log.Printf("警告: 更新後のメンバーリストの取得に失敗しました: %v\n", err)
    } else {
        log.Printf("現在のメンバーIDリスト: %v\n", currentMemberIDs)
    }
}

// --- 実行方法 ---
// 1. `go get github.com/slack-go/slack` でライブラリをインストール
// 2. 上記コードを `main.go` として保存
// 3. 環境変数を設定:
//    export SLACK_BOT_TOKEN="xoxb-your-valid-token"
//    export SLACK_USERGROUP_ID_TO_UPDATE="S0XXXXXXX"
//    export SLACK_NEW_USER_IDS="U0YYYYYYY,U0ZZZZZZZ" // 例: ユーザー2名にする場合
//    export SLACK_NEW_USER_IDS="" // 例: グループを空にする場合
// 4. `go run main.go` で実行