LoginSignup
2
2

More than 5 years have passed since last update.

特定の日付以降、活動がない Slack channel を一括でアーカイブする

Posted at

Slackを使った業務コミュニケーションを続けていると、活動が止まってしまったチャンネルがだんだん溜まってきてしまいます。そういうチャンネルはなるべくアーカイブして、アクティブなチャンネルだけ残したい、と思ったんですが、手軽な方法が見つけられませんでした。

そこで、Slack APIと jq を組み合わせて、特定の日付以降、活動がない Slack channel を一括でアーカイブするスクリプトを作ったので公開します。誰かの役に立てば幸いです。

用意するもの

  • Mac
  • shell
  • jq
  • Slackの管理者権限
  • Slackのレガシーなトークン
    • レガシーじゃない方がよさそうですが、簡単にできるやり方を選択しちゃいました

スクリプト

APIをつかい、チャンネルの一覧を取得して、特定の日付以降に発言がないチャンネルをアーカイブする、という単純なものです。レスポンスのフィルタには jq を使ってうまいことやってます。

# 以下二つの変数を設定して実行
TOKEN_SLACK=xoxp-**********
TARGET_DATE=2018-**-**

# アーカイブされていないチャンネルのID一覧を取得し繰り返し処理
for ch in $(curl -s "https://slack.com/api/channels.list?token=$TOKEN_SLACK" | jq -r '.channels[] | select(.is_archived == false) | .id')
do

    # TARGET_DATE以降のメンバーとbotの発言数を取得
    count=$(curl -s "https://slack.com/api/channels.history?token=$TOKEN_SLACK&channel=$ch&count=100&oldest=$(date -j -f '%Y-%m-%d' $TARGET_DATE '+%s')" |
                jq -r '.messages | map(select(.subtype == null or .subtype == "bot_message")) | length')

    # 発言数が0ならアーカイブ
    if [ $count -eq 0 ]; then

        # アーカイブするチャンネルの情報を標準出力に表示して
        curl -s "https://slack.com/api/channels.info?token=$TOKEN_SLACK&channel=$ch"|jq -r '.channel | [.id, .name] | @csv'
        sleep 1

        # アーカイブする
        curl -s "https://slack.com/api/channels.archive" -X POST -F "token=$TOKEN_SLACK" -F "channel=$ch"
    fi
    sleep 1

done

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2