😡

Slackのメッセージを一括削除、結局どうやってやるんじゃい!

2 min read

はじめに

エンジニアができそうなこと は全部ぼくのタスクになる、でおなじみの猪俣貴裕です。
下記の経緯があって、チャンネル内の全メッセージを削除する必要がありました。

Slackを有料化
-> 過去データが見れるようになった
-> Slack利用開始時はデフォルトchannelに機密情報バンバン流してた
-> 最近参画した新人に過去の機密情報見せたくない
-> デフォルトchannelなのでプライベートにできない&消せない
-> 社長)メッセージ全部消しといて〜
-> 猪俣)・・・うす。。

ググってみたら「SlackAPIとGAS使ったら消せるで」って記事が量産されてましたが、ちょいちょい情報が古く、一発でキレイに動かせるモノはありませんでした。
「ざけんなおらあああああ!結局どうやってやるんじゃい!」ってなったので、その怒りを原動力に本記事を書きます。

Slackのメッセージを一括削除、のやり方(2021/11/9 時点)

Slackワークスペースの設定

・自分にワークスペースの管理者権限を付与(権限がないと他人のメッセージを消せない)
・チャンネルIDを取得

https://qiita.com/YumaInaura/items/0c4f4adb33eb21032c08

SlackAPIの設定

・アプリを作る

https://api.slack.com/apps
「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を開く

https://liskul.com/gas-75423#GAS-4

・ソースコードを書く
下記をコピペする。(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

ログインするとコメントできます