ramenjunitiメモ

自分なりに調べたものをまとめたり、文章を書く練習したり

定期的にslackのbotのメッセージを消す

背景

slack.com

slack無料枠は最大メッセージ数が10000件となっており、メッセージ数10000件を超えると古いメッセージから見れなくなってしまいます。

しかし、サーバーの監視botのような頻繁にメッセージを送信するbotを導入している場合、メッセージ数10000件はすぐに超えてしまいます。

重要度の高いメッセージがbotのメッセージによって見れなくなってしまうのは困るので、何とかしたい...

botのメッセージを削除する

削除されたメッセージは上限にカウントされないので、botのメッセージを定期的に削除して上限を超えることを防ぎます。

こちらのツールを用いてメッセージを削除します。 github.com

Dockerイメージが公開されているので、今回はDockerを利用します。

docker pull sgratzl/slack-cleaner

以下のように実行できます。

docker run -it --rm sgratzl/slack-cleaner -c "slack-cleaner ..."

slack-cleanerの詳細な使い方はこちら

メッセージを削除するためには権限周りの設定が必要です。 トークンの取得して必要な権限を付与してください。

私は以下のようなスクリプトを書いて、cronで定期的に実行させています。

#!/bin/sh

set -eu

TOKEN="取得したトークン"
CHANNEL="チャンネル名"
DATE=`date '+%Y%m%d' --date '1 days ago'`
RATE=1

COMMAND="slack-cleaner --token ${TOKEN} --message --group ${CHANNEL} --bot --as_user --before ${DATE} --perform --rate ${RATE}"

docker run --rm sgratzl/slack-cleaner -c "${COMMAND}"
  • --groupでプライベートチャンネルを指定しています。
  • --beforeである日付より古いメッセージを削除対象にしています。
  • --rateでslack APIの呼び出し頻度を指定します。
  • --performで実際に削除を行います。

cronの設定は以下のようにしました。

0 0 * * * {スクリプトのパス}

これで毎日00:00にスクリプトが実行され、メッセージが削除されるようになりました。