2019-03-28に更新

SlackのファイルをGASで自動削除する

Unityゲーム開発者ギルドというコミュニティを運営しているんだけど、
無料版で使っているSlackのファイルストレージがギリギリになってた。

スクリーンショット 2019-03-06 0.28.01.png

Unityギルドについてはこちら -> https://twitter.com/naichilab/status/1061929632037892096

このままじゃファイルアップロードできなくなっちゃうので、古いファイルは自動削除されるようにした。
とりあえず30日以上経過したファイルは問答無用で消していこう。

(Slackのメッセージも今のペースだと2週間たらずで消えちゃうから30日経過したら削除で十分だろうと判断)

GASで下記スクリプトを作成。プロジェクトのプロパティでレガシートークンをセットして1時間トリガーを仕掛けた。

1時間ごとに起動して、30日以上経過したファイルを10件検索&削除。

削除後の反映は最大48時間かかるらしいので様子見〜。

function deleteOldFiles() {
  var res = filesList(30, 10);
  if(res.files.length == 0){
    Logger.log("削除対象ファイルは見つかりませんでした。");
    return;
  }

  res.files.forEach(function(file){
    Logger.log("削除します。 ID=" + file.id + ", Size=" + file.size);
    filesDelete(file.id)
    Utilities.sleep(50);//sleep 50msec
  });
}


//ref. https://api.slack.com/methods/files.list
function filesList(days, count){
  var params = {
    token: PropertiesService.getScriptProperties().getProperty("SLACK_ACCESS_TOKEN"),
    ts_to: elapsedDaysToUnixTime(days),
    count: count
  }
  return execute('files.list', params);
}

//ref. https://api.slack.com/methods/files.delete
function filesDelete(id){
  var params = {
    token: PropertiesService.getScriptProperties().getProperty("SLACK_ACCESS_TOKEN"),
    file: id
  }
  return execute('files.delete', params);
}

function execute(apiName, params){
  var options = {
    'method': 'POST',
    'payload': params
  }
  var res = UrlFetchApp.fetch('https://slack.com/api/' + apiName,options);
  return JSON.parse(res.getContentText());
}

function elapsedDaysToUnixTime(days){  
  var date = new Date();
  var now = Math.floor(date.getTime()/ 1000); // unixtime[sec]
  return now - 8.64e4 * days + '' // 8.64e4[sec] = 1[day] 文字列じゃないと動かないので型変換している
}
ツイッターでシェア
みんなに共有、忘れないようにメモ

naichi

フォロー&リムーブお気軽に。 #太陽人間 リリース。 #びはんとマルの森 開発中 / https://t.co/rVPi5xE72b 作りました / Unity1週間ゲームジャムも主催してます。京ゆにも遊びに来てね https://t.co/DP0B37VgPI C#/Unity/DB/NW/SC

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント