LoginSignup
0
0

More than 3 years have passed since last update.

Pythonを使ったSlack APIで特定のチャンネルの特定のユーザーの一定期間経過しているメッセージを削除する方法

Last updated at Posted at 2020-12-15

前提

Slack APIの登録方法及び、Slack APIの使用方法の説明は省略しています。
まだ、お済みでない方は下記URLより登録してください。
https://api.slack.com/

参考文献

目的

Slack APIで、特定のチャンネルの、特定のユーザーの、投稿されてから3日以上経過しているメッセージを削除する。

使用する言語

Python3.8.5

手順

①Slack APIで、特定のチャンネルのメッセージを取得し、その中のメッセージのタイムスタンプを取得する。
②メッセージのタイムスタンプの中から、Slack APIで、3日以上経過しているメッセージを削除する。

使用するSlack API

・特定のチャンネルのメッセージのタイムスタンプを取得するのは、conversations.history
https://api.slack.com/methods/conversations.history
・メッセージを削除するのは、chat.delete
https://api.slack.com/methods/chat.delete

ソースコード

# 必要なライブラリのインポート
import requests
from datetime import datetime
import re

# チャンネルを指定してメッセージを取得する
# Web APIのURL
url = "https://slack.com/api/conversations.history"
# ワークスペースのトークン
token = "ワークスペースのトークン"
# 対象のチャンネルのID
channel = "対象のチャンネルのID"

# 各メッセージのタイムスタンプの格納用のリスト
timestamplist = []

# 情報を辞書型にする
payload = {"token": token,  "channel": channel}
# チャンネル情報の取得
response = requests.get(url, params=payload)
# json形式に変換
message_json = response.json()

# メッセージのタイムスタンプをリストに格納していく
for m in message_json["messages"]:
    try:
        # user一覧のリストを作成(重複あり)
        timestamplist.append(m["ts"])
    # tsキーがない場合、KeyErrorとなるので例外処理
    except KeyError:
        pass
print(timestamplist)

# 今日の日付のタイムスタンプを取得
current_ts = int(datetime.now().strftime('%s'))
# チャンネルの特定のユーザーのメッセージを削除
for ts in timestamplist:
    # Web APIのURL
    url = "https://slack.com/api/chat.delete"
    # ワークスペースのトークン
    token = "ワークスペースのトークン"
    # 対象のチャンネルのID
    channel = "対象のチャンネルのID"
    # 3日前
    term = 60 * 60 * 24 * 3
    # タイムスタンプ
    ts = ts
    # ユーザーの指定
    as_user = "ユーザーのID"
    # 現在からタイムスタンプが3日以上経過している場合、メッセージを削除
    if current_ts - int(re.sub(r'\.\d+$', '', ts)) > term:
        payload = {"token": token,  "channel": channel,
                   "ts": ts, "as_user": as_user}
        response = requests.post(url, params=payload)
        json = response.json()

補足

as_user

上記のソースコードでは、変数as_userに特定のユーザーのIDを渡すことで、
対象期間内の特定のユーザーのメッセージを削除するようにしています。
ユーザーを指定しない場合は、対象期間内の全ユーザーのメッセージが削除されます。

変数term

Pythonでは、「秒 * 分 * 時間 * 日」とすることで、時間間隔を表すことができます。
例えば、1週間では、「60 * 60 * 24 * 7」と、12時間30分40秒では、「40 * 30 * 12」となります。
この数値を変えることで、削除の対象となるメッセージの範囲を変えることができます。

reモジュール

Pythonで正規表現の処理を行うための標準ライブラリ。
正規表現パターンによる文字列の抽出や置換、分割などができる。

subメソッド

マッチした部分を他の文字列に置換することができる。
使い方は以下の通り。
sub(r'置換したい文字列', '置換後の文字列', 対象のオブジェクト名)
今回のre.sub(r'\.\d+$', '', ts)の場合、
「tsにおいて、ドット以降末尾まで半角数字がある場合、空に変換(削除すると同義)する。」という意味になる。

参考文献

・Pythonドキュメント
https://docs.python.org/ja/3/library/re.html
・Pythonの正規表現モジュールreの使い方(match、search、subなど)
https://note.nkmk.me/python-re-match-search-findall-etc/

参考文献

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