Pythonを使ったSlack APIで特定のチャンネルの特定のユーザーの一定期間経過しているメッセージを削除する方法
前提
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/
参考文献
Author And Source
この問題について(Pythonを使ったSlack APIで特定のチャンネルの特定のユーザーの一定期間経過しているメッセージを削除する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/romutsu/items/2d0f3ae58c588f81a011著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .