物理の駅 by onsanai

Physics-station 研究で日々感じたことを忘れないための備忘録

Slackに投稿されたファイルを一括で削除するpythonコード

まずは、tokenをゲットせよ。

api.slack.com

次に、slackclientパッケージに入れる

pip install slackclient

クライアントのインスタンスを作る。pythonってインスタンスって言葉使うんだっけ?

from slackclient import SlackClient
slack_token = 'xoxp-**-**-**-****'
client = SlackClient(slack_token)

ファイルのリストを得る。

all_files = []
for p in range(1,1000):
    files = client.api_call("files.list",page=p)
    all_files.extend(files["files"])
    if len(files["files"]) == 0:
        break

こんな鮮やかじゃないコードなんていらないっていう人は、回れ右で帰ろう。もっとうまく書く方法はあるはずである。

client.api_call("files.list",page=p) ここが重要である。戻り値は辞書型になってるので、読めば分かる。あるユーザーのファイルだけ得たい場合は、 user="XXXXXXX" とかを引数に入れれば良い。

最後に、ファイルを削除してみよう

for file in all_files:
        ret = client.api_call("files.delete", file=file["id"])
        if ret["ok"]:
                print("OK")

これはテストではない。本当に削除される。だから、試しに・・・っていう人は本当に気をつけてね(泣)。

ハマったところとしては pageusername の扱い。

削除する前にページを走査して、ファイルリストを全て取得おこう。 files.list は非同期なので、削除しながらリストを得るとハマる。

username 。現代のSlackで username は存在しない。名無しの権兵衛ではなく、IDで管理されている。管理社会なのである。だから、特定のユーザーのファイルを削除したい時は file["user"] のユーザーIDで振り分けよう。

ユーザーリストは次のように得る。

users = client.api_call("users.list")
print(users)

pythonなんか分からないっていう人は、pythonぐらい勉強しろよと言いたいところだが、便利なリンクを用意しておく。ここではpythonを使わなくてもAPIが叩ける。

削除のAPIを叩くと警告なしで削除されるから本当に気をつけろよ。