😡
Slackのメッセージを一括削除、結局どうやってやるんじゃい!
はじめに
エンジニアができそうなこと
は全部ぼくのタスクになる、でおなじみの猪俣貴裕です。
下記の経緯があって、チャンネル内の全メッセージを削除する必要がありました。
Slackを有料化
-> 過去データが見れるようになった
-> Slack利用開始時はデフォルトchannelに機密情報バンバン流してた
-> 最近参画した新人に過去の機密情報見せたくない
-> デフォルトchannelなのでプライベートにできない&消せない
-> 社長)メッセージ全部消しといて〜
-> 猪俣)・・・うす。。
ググってみたら「SlackAPIとGAS使ったら消せるで」って記事が量産されてましたが、ちょいちょい情報が古く、一発でキレイに動かせるモノはありませんでした。
「ざけんなおらあああああ!結局どうやってやるんじゃい!」ってなったので、その怒りを原動力に本記事を書きます。
Slackのメッセージを一括削除、のやり方(2021/11/9 時点)
Slackワークスペースの設定
・自分にワークスペースの管理者権限を付与(権限がないと他人のメッセージを消せない)
・チャンネルIDを取得
SlackAPIの設定
・アプリを作る
「Create New App」ボタンを押す。・アプリのManifestの編集
下記に書き換える。(oauth_configで今回使う権限を追加)
_metadata:
major_version: 1
minor_version: 1
display_information:
name: Demo App
oauth_config:
scopes:
user:
- chat:write
- files:write
- channels:history
- groups:history
- im:history
- mpim:history
settings:
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: false
・アプリのインストール
「OAuth & Permissions」の「Install to Workspace」を押す。
-> User OAuth Tokenが表示される。
・Tokenのコピー
インストール後に表示されるUser OAuth Tokenをコピー。
GASのソースコード
・App Scriptを開く
・ソースコードを書く
下記をコピペする。(tokenとchannel_idは自分のものを設定)
function del_slack_posts() {
var token = "xxxxxxxxxx";
var channel_id = "xxxxxxxxxx";
// チャンネル内からタイムスタンプの一覧を取得
var url = "https://slack.com/api/conversations.history?token=" + token + "&channel=" + channel_id;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
for (var i=0; i<data.messages.length; i++) {
var url = "https://slack.com/api/chat.delete?token=" + token + "&channel=" + channel_id + "&ts=" + data.messages[i]["ts"];
UrlFetchApp.fetch(url);
}
}
・実行ボタンを押す
※スレッド内のメッセージは消してくれないです。
data.messages[i]["ts"]
を data.messages[i]["latest_reply"]
に変更して実行すると消してくれます。最新メッセージだけ消すので、複数回実行が必要です。
Discussion