1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python Slack SDK を使って古い投稿を削除する

Last updated at Posted at 2021-04-30

Python Slack SDK を選んだ理由

この記事を書いている2021年4月現在、Slack を操作するために Python を使うなら Python Slack SDK が最善ではないかと思います。また変わるかもしれませんが、わざわざ古いものを使うメリットはありません。

Python Slack SDK はドキュメントが非常に充実しています。

また、https://api.slack.com/ にある Python のサンプルコードも Python Slack SDK を使うものになっています。

やりたいこと

  • 古い Slack の投稿を一括削除したい

また、前提条件として次の三つがあります。

  • 対象チャンネルの全ての投稿について既に削除権限がある
  • 対象チャンネルはあらかじめ特定されている
  • 使うのは自分だけ

コードを書く前の準備

Slack API のトークンを手に入れる必要があります。
古い投稿を削除するので、どれが古いのかを探す権限が必要です。
また、当然に削除権限も必要です。
そうなると、Web API だけ使えれば十分で、User として動けばいいことになります。
必要なメソッドは、

conversations.history
https://api.slack.com/methods/conversations.history

chat.delete
https://api.slack.com/methods/chat.delete

だけです。

そして、この二つを使うために必要な権限は、channels:history と chat:write の二つです。

User Token Scopes にこの二つの権限を設定し、ワークスペースにインストールすると、User OAuth Token を入手できます。

コードを書く

エラー処理やログの記録などは省略しています。必要に応じて追加しましょう。

import os
import time 
from slack_sdk import WebClient

# トークンは環境変数に入れておくものとする
client = WebClient(token=os.environ.get("SLACK_USER_OAUTH_TOKEN"))

# チャンネル ID も実行時に与える方がいいかもしれない
channel_id = "C1234567890"

# 30日よりも古いものを削除する場合
late_ts = str(int(time.time()) - 60 * 60 * 24 * 30)

# 指定したタイムスタンプより古いものだけを取得する
result = client.conversations_history(channel=channel_id, latest=late_ts)
conversation_history = result['messages']
for x in conversation_history:
    client.chat_delete(channel=channel_id, ts=x['ts'])
    print("{} deleted".format(x['ts']))

エラー処理を省いたとはいえ、非常に短いコードで済みます。

追記: ファイルの削除

files.listfiles.delete を使えば、ほぼ同じ方法で一定の日付より前のファイルを削除することが可能です。タイムスタンプの与えかたが少しだけ違います。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?