Python

Python을 이용한 Slack API 사용해보기 (단순 메시지 삭제 기능 구현)

bonevillain 2023. 7. 10. 20:20

1:1 대화 방에 있는 자신의 대화 삭제 방법

 

1. 접속 후 로그인

https://api.slack.com/

 

 

2. 사이트 이동

https://api.slack.com/apps

 

 

3. 앱 생성

(1) 'Create an App' 클릭

(2) 'From scratch' 클릭

(3) 입력 필드 입력 후 'Create App' 클릭

- App name : 원하는 이름으로 지정

- Pick a workspace to develop your app in: 리스트에 나오는 Workspace 중 하나 선택

 

 

4. 프로젝트가 만들어지면 오른쪽 목차에 'OAuth & Permissions' 클릭

 

 

5. 해당 페이지 내의 Scopes 단락으로 이동

 

 

6. Bot, User 중 원하는 기능에서의 Scope(권한 범위)를 지정

- 이 권한 범위는 사용할 API에 따라 필요한 권한이 다 다름. API 문서에 필요한 권한이 기재되어있음.

- 지금은 메시지 삭제이기 때문에 메시지 히스토리 가져올 수 있는 권한과 삭제에 필요한 권한 등록

 

[메시지 히스토리 가져오는 API 문서]

 

권한 : 상황에 맞게 최소 4개 중 하나 필요

  • channels:history
  • groups:history
  • im:history
  • mpim:history

[메시지 삭제 API 문서]

 

필요 권한 : 아래의 권한 중 필요에 따라 적용

  • chat:write
  • chat:write:user
  • chat:write:bot



7. 권한 지정 후 동일 페이지 OAuth Tokens for Your Workspace 단락 이동

Install to Workspace 클릭

이 때 나오는 토큰 복사



8. 해당 토큰을 이용하여 코드 테스트

대화방 ID는 브라우저 상의 Slack 대화방에 들어가면 아래와 같은 URL로 구성되어 있는데

 

https://app.slack.com/client/T1111AAA1AA/B22B222BB22

 

B22B222BB22 이 부분이 대화방 ID에 해당하는 부분

대화방 오른쪽 사이드 바 쪽의 대화방 명의 마우스 오른쪽 버튼을 눌러서 '링크 복사'를 통해서도 대화방 ID 확인 가능

 

import certifi
import ssl

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

ssl_context = ssl.create_default_context(cafile=certifi.where())
client = WebClient(token='xoxp-1111111111111-2222222222222-3333333333333-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', ssl=ssl_context) # 토큰을 여기에 복사

conversation_history = []
channel_id = "A11AAAA1AAA" # 대화방 ID

# Get converstaion history
try:
    result = client.conversations_history(channel=channel_id)
    conversation_history = result["messages"]
    print("{} messages found in {}".format(len(conversation_history), id))
except SlackApiError as e:
    print("Error creating conversation: {}".format(e))

# Delete conversation
user = 'B22BB2BB2BB' # 대화 삭제 대상의 사용자 ID : 위 대화 히스토리를 출력해보면 해당 사용자 ID를 확인해볼 수 있음.

for message in conversation_history: # 반복문을 통해 해당 ID의 대화 삭제 (대화 상대편의 메시지는 삭제 불가)
    print(message['ts'])
    try:
        if message['user'] == user:
            result = client.chat_delete(
            channel=channel_id,
            ts=message['ts']
        )
    print(result)
except SlackApiError as e:
    pass

 

'Python' 카테고리의 다른 글

Python GIL (Global interpreter lock)  (1) 2023.07.10