[Python] Slack API를 사용하여 채널의 메시지를 한 번만 남기고 일괄 삭제해 보았습니다.
소개
사내에서 사용하는 #general 채널의 운영을 변경하게 되었기 때문에 메시지를 일괄 삭제해 달라고 했습니다. 한 건만 남기고 싶은 메시지가 있다는 것이었기 때문에, 한 건 남겨두고 삭제하는 코드를 작성했습니다.
환경
Visual Studio Code
Python3.9.1
준비
python-slackclient 설치
터미널에서 다음 명령을 실행합니다.
pip install slackclient
사용자 토큰을 얻으려면 앱을 만들어야 합니다.
앱 작성은 아래의 기사를 참고로 했습니다.
Slack API 권장 Token 정보
앱을 만든 후 사용자 토큰을 얻을 수 있습니다.
※xoxp로 시작하는 사용자 토큰을 사용합니다.
채널 ID 및 타임 스탬프를 얻는 방법
대상 채널의 메시지 링크에서 채널 ID와 타임스탬프를 얻을 수 있습니다.
예: https://xxxxxx.slack.com/archives/AAAAAAAAA/p1111111111000000
"AAAAAAAAA"가 채널 ID, p를 제외한 "1111111111000000"이 메시지의 타임 스탬프가됩니다.
※API로 취득하는 타임 스탬프의 포맷은 "1111111111.000000"이므로 맞출 필요가 있습니다.
사용 API 설명
받은 타임스탬프의 메시지를 삭제합니다.
메시지의 타임 스탬프를 가져옵니다.
thread의 타임 스탬프를 취득합니다.
소스 코드
import time
from slack import WebClient
# slackのユーザートークン
SLACK_CLIENT = WebClient('xoxpから始まるユーザートークン')
# メッセージ削除対象のチャンネル名
CHANNEL_ID ="AAAAAAAAA"
# 削除したくないメッセージのタイムスタンプ
NOT_DELETE_TS = "1111111111.000000"
def main():
while True:
# 最新のメッセージ100件を取得する
channel_history = SLACK_CLIENT.conversations_history(channel=CHANNEL_ID)
print('メッセ-ジ取得件数: {}'.format(len(channel_history['messages'])))
if len(channel_history['messages']) <= 1:
print('メッセ-ジが1件になったので終了')
break
for messages in channel_history['messages']:
print(f'対象メッセ-ジ: {messages}')
if messages['ts'] == NOT_DELETE_TS:
print(f'スキップ対象メッセ-ジ: {messages}')
continue
SLACK_CLIENT.chat_delete(channel=CHANNEL_ID, ts=messages['ts'])
time.sleep(0.5) # 連続実行をさける
if 'thread_ts' in messages:
thread_replies = SLACK_CLIENT.conversations_replies(channel=CHANNEL_ID, ts=messages['ts'])
for thread in thread_replies['messages']:
# メッセージのタイムスタンプは削除済みのためスキップする
if messages['ts'] == thread['ts']:
continue
SLACK_CLIENT.chat_delete(channel=CHANNEL_ID, ts=thread['ts'])
time.sleep(0.5) # 連続実行をさける
if __name__ == '__main__':
main()
힘든 점
"conversations.history"만으로는 메시지의 타임 스탬프 만 얻을 수 있었으므로 스레드를 삭제하는 데 어려움을 겪었습니다. API 목록에서 스레드 타임 스탬프를 얻을 수있는 것이 없을까 찾고 있다면 "conversations.replies"를 찾아 해결할 수있었습니다.
끝에
이번에 처음으로 Python과 Slack API를 사용하여 코드를 작성해 보았습니다. 파이썬에 흥미는 있었지만 업무에서는 사용할 기회가 없었기 때문에 써서 즐거웠습니다.
참고 자료
API 메소드 목록
Reference
이 문제에 관하여([Python] Slack API를 사용하여 채널의 메시지를 한 번만 남기고 일괄 삭제해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/T-K_3/items/8e258ca94427a0ddd8de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)