GoogleAppsScript
Slack

【GAS】Slackの特定のチャンネル内の投稿を定期的に削除する

More than 1 year has passed since last update.

 「temp」という名前のチャンネルを作り、一時的なやりとり、毎日の天気予報通知、outgoingを使った一時的な調べごと(たとえばスプレッドシートで作ったシフト表から明日誰それが出勤するとかしないとか)をここで行うことにします。

 こうした情報は溜まっていくと邪魔なだけなのでいちど見たらさっさと消したいところですが、Slackで削除という作業はけっこうかったるいですよね。

 そこで、GASを使って定期的かつ自動的に削除しようというわけです。

 若干戸惑ったのは削除するのにタイムスタンプが必要ということ。しょうがないのでひとつずつタイムスタンプを取得してせっせと削除するような流れになっています。

コード.gs
function clearSlack() {

  // チャンネルリストを取得
  var token = "取得したトークン";
  var url = "https://slack.com/api/channels.list?token="+token+"";
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var data = JSON.parse(json);

  // 対象となるチャンネル名から対応するチャンネルIDを探し出す
  var channel_name = "temp";
  for (var i=0; i<data.channels.length; i++) {
    if (data.channels[i].name == channel_name) {
      var channel = data.channels[i].id;
      break;
    }
  }

  // チャンネル内からタイムスタンプの一覧を取得
  var url = "https://slack.com/api/channels.history?token="+token+"&channel="+channel+"";
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  var data = JSON.parse(json);
  var ary = [];
  for (var i=0; i<data.messages.length; i++) {
    ary.push(data.messages[i]["ts"]);
  }

  // 投稿を順々に削除
  for (var i=0; i<ary.length; i++) {
    var url = "https://slack.com/api/chat.delete?token="+token+"&channel="+channel+"&ts="+ary[i]+"";
    UrlFetchApp.fetch(url);
  }

}

 これを「リソース」→「現在のプロジェクトトリガー」からたとえば日タイマーで午前3時から4時に実行するように設定しておけば毎日まっさらな状態を保てるようになるかと思います。