LoginSignup
17
13

More than 5 years have passed since last update.

Slackでファイルを削除するBotを作成した

Last updated at Posted at 2017-08-20

経緯

会社で使っているslackのファイル容量がオーバーしそうになった。
調べたら、Slackにアップロードしたファイルは一括削除ができないらしい。
そしたら、どこからともなくGASでSlackのファイルを削除するBotが作れるらしいよというメッセージと共に、URLが送られてきた。

Slackの古くなったファイルを自動で削除してみた
http://lyncs.hateblo.jp/entry/2017/06/04/191421

なんで俺が……と思いながら、GAS(GoogleAppsScript)で1ヶ月経過したファイルを削除するbotを作った。その際にfiles.listではまったので、メモ。

やりたいこと

  • 指定した日数(1ヶ月)、経過したファイルを削除
  • 指定したタイプのファイル以外、削除(今回は、画像とPOSTは残したい)

作業の流れ

だいたい送られてきたページを参考にするとそれらしいものが完成する。
作業の手順を手短にまとめると、

みたいな感じですかね。

ソースコード

作成したソースコード

  • GASで呼ぶメソッド以外はオブジェクトにまとめた
  • ライブラリ使うより、URLで直接API叩いた方が早いらしいので、そのように

【2017/10/29追記】
パラメータにchannelidを指定し忘れるという痛恨のミスが発覚。(↓コメント参照)
修正しておきました。
確認したら会社のSlackも全てのチャンネルが削除対象となっていた模様。(ゝω・)

【201803/18追記】
修正をリモートにpushし忘れていたことが発覚。(↓コメント参照)
遅ればせながらpushしておきました。m(_ _;)m
加えて、全チャンネル削除(channelId指定しない)とした場合でも、 自アカウントが参加していないチャンネルのファイルは削除されない という仕様であることが発覚したので、合わせて報告しておきます。

types

APIドキュメントによると、files.listメソッドで指定できるtypeは、以下の7種類とのこと。(POSTもファイルとして扱われるよ)

  • all - All files
  • spaces - Posts
  • snippets - Snippets
  • images - Image files
  • gdocs - Google docs
  • zips - Zip files
  • pdfs - PDF files

しかし、一見良くわからなかったので、よく使いそうな拡張子のファイルを準備して、指定したオプションでどれが取ってこれるのかをテストした。
用意したのは以下のファイル

形式 拡張子
Excelファイル .xlsx
zipファイル .zip
画像ファイル .jpg .png .gif .bmp
テキストファイル .txt
dumpファイル .sql
pdfファイル .pdf
謎の拡張子 .hoge
SlackのPOST (拡張子無し)

結果

オプション 取得できた拡張子
all 全部
snippets .txt .sql
images .jpg .png .gif
zips .zip
pdfs .pdf
gdocs
spaces SlackのPOST

つまり、「画像以外が削除したい」、みたいな場合は
 1. すべてのファイルを取得
 2. 削除したくないファイルを取得
 3. 1と2の差分をとる
という処理が必要ということが分かった。(.bmpは画像として認識してくれない)

あと、typeオプションを利用して「xlsxは削除するけどdocxは残す」
みたいなことは出来ないということが分かった。

もし、そういう処理がしたいなら「ファイル名から拡張子を取り出して個別に指定する」みたいにすれば出来ると思う。
他に良い方法があれば教えてくださいまし。

17
13
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
13