定期的にslackのbotのメッセージを消す
背景
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にスクリプトが実行され、メッセージが削除されるようになりました。