오늘은 오랜만에 파이썬 관련한 포스팅을 해보려고 합니다.
최근에 슬랙봇을 만들어 이것저것 가지고 놀다보니 슬랙은 정말 매력적인 메신저인걸 다시 한번 깨달았습니다.
그렇다면 파이썬을 활용하여 슬랙봇을 한번 제어해볼까요?
1. 슬랙봇 만들기
먼저 슬랙봇을 만들어야합니다.
슬랙봇은 슬랙 홈페이지에서 간단하게 누구나 만들 수 있기 때문에 쉽게 생성이 가능합니다.
간단한 스텝으로 슬랙봇을 먼저 생성하시면 됩니다.
Slack API: Applications | Slack
Your Apps Don't see an app you're looking for? Sign in to another workspace.
api.slack.com
2. 슬랙봇 대답 구현하기
파이썬을 통해 슬랙을 제어하려면 슬랙 API 를 활용해야 합니다.
파이썬에서는 slack_bolt 라는 라이브러리로 간단하게 제어할 수 있습니다.
먼저 상단에 slack_bolt 와 관련된 라이브러리들을 import 해줍니다.
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
다음으로 내 슬랙봇의 토큰을 가져와 app 에 담아줍니다.
app = App(token="슬랙봇 토큰")
이 app을 활용하여 슬랙봇을 태그했을 때 대답을 할 수 있게 구현할 수 있습니다.
@app.event("app_mention")
def send_message():
say(f'안녕하세요!!<@{event["user"]}>')
event["user"] 값을 통해 슬랙봇을 태그하여 부른 사람을 태그하여 대답을 하게 해주죠.
3. 슬랙봇 버튼 구현하기
그렇다면 슬랙봇 버튼은 어떻게 구현할 수 있을까요?
간단하게 위에 만든 send_message 란 함수에 attachments 를 추가하여 쏴주기만 하면 됩니다.
@app.event("app_mention")
def send_message(attachments):
say({
"text": "슬랙봇 말하기 테스트",
"attachments": attachments
})
attachments = [
{
"fallback": "You are unable to choose a server",
"callback_id": "button-a",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button1",
"text": "버튼1",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_a"
}
]
},
{
"fallback": "You are unable to choose a server",
"callback_id": "button-b",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button2",
"text": "버튼2",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_b"
}
]
},
{
"fallback": "You are unable to choose a server",
"callback_id": "button-c",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button3",
"text": "버튼3",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_c"
}
]
}
]
# 메시지 전송 함수를 호출하여 버튼을 보냅니다.
send_message(attachments)
요런식으로 각 버튼들에 대한 값을 구성하여 say 로 내가 원하는 채팅방에 전달할 수 있습니다.
그럼 한번 코드를 실행하여 슬랙봇을 태그해볼까요?
슬랙은 UI가 깔끔하고 버튼이나 텍스트들이 깔끔한 것 같습니다.
4. 슬랙봇 버튼 동작 만들기
그럼 슬랙봇으로 만든 버튼들을 눌렀을 때의 동작은 어떻게 만들 수 있을까요?
버튼을 만들때 지정한 callback_id 값을 통해 각 버튼의 동작을 구별하여 만들 수 있습니다.
{
"fallback": "You are unable to choose a server",
"callback_id": "button-a",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button1",
"text": "버튼1",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_a"
}
]
}
버튼의 명칭은 버튼1로 지정하였고 callback_id 는 button-a 값으로 지정하였습니다.
action 함수를 활용하여 callback_id 를 지정해주고 버튼이 클릭하였을때 해당 함수를 통해 동작을 구현할 수 있습니다.
@app.action("button-a")
def handle_button_click(body, ack, client, say):
# 버튼 클릭 Ack 처리
ack("test")
say("`test1`\n```test2```\n*test3*\n버튼1을 누르셨습니다.")
client.files_upload(channels="슬랙채널ID", file="원하는 파일경로")
ack() 는 버튼을 눌렀을 때 버튼이 바뀌는 값을 의미합니다.
say 함수에 다양한 값을 넣어놨는데 슬랙에서는 메시지를 이쁘게 꾸밀 수 있는 단축키가 존재합니다.
슬랙 텍스트 단축키 | 메시지 효과 |
`텍스트` | ` 로 감싼 텍스트를 코드형식으로 노출 (아래 사진 test1 참고) |
```텍스트``` | ```로 감싼 텍스트를 메모형식으로 노출 (아래 사진 test2 참고) |
*텍스트* | *로 감싼 텍스트를 볼드처리하여 노출 (아래 사진 test3 참고) |
버튼1을 누르게 되면 다음과 같이 슬랙봇이 버튼을 텍스트로 변경하며 이쁘게 꾸민 텍스트를 노출하게 되는 것이죠.
5. 슬랙봇 버튼 전체 샘플 코드
슬랙봇을 태그하면 대답을 해주고 버튼을 만들어주며, 해당 버튼들을 누르면 동작을 제어할 수 있는 전체 샘플 코드입니다.
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
app = App(token="슬랙봇 토큰")
@app.event("app_mention")
def who_am_i(event, client, message, say):
# 메시지를 보내는 함수를 만들어서 재사용합니다.
@app.event("app_mention")
def send_message(attachments):
say({
"text": "슬랙봇 말하기 테스트",
"attachments": attachments
})
attachments = [
{
"fallback": "You are unable to choose a server",
"callback_id": "button-a",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button1",
"text": "버튼1",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_a"
}
]
},
{
"fallback": "You are unable to choose a server",
"callback_id": "button-b",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button2",
"text": "버튼2",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_b"
}
]
},
{
"fallback": "You are unable to choose a server",
"callback_id": "button-c",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button3",
"text": "버튼3",
"style": "danger",
"type": "button",
"value": "1",
"action_id": "button_c"
}
]
}
]
# 메시지 전송 함수를 호출하여 버튼을 보냅니다.
send_message(attachments)
say(f'안녕하세요!!<@{event["user"]}>')
@app.action("button-a")
def handle_button_click(body, ack, client, say):
# 버튼 클릭 Ack 처리
ack("test")
say("`test1`\n```test2```\n*test3*\n버튼1을 누르셨습니다.")
client.files_upload(channels="슬랙채널ID", file="원하는 파일경로")
@app.action("button-b")
def handle_button_click(body, ack, client, say):
# 버튼 클릭 Ack 처리
ack("test")
say("`test1`\n```test2```\n*test3*\n버튼2를 누르셨습니다.")
client.files_upload(channels="슬랙채널ID", file="원하는 파일경로")
@app.action("button-c")
def handle_button_click(body, ack, client, say):
# 버튼 클릭 Ack 처리
ack("test")
say("`test1`\n```test2```\n*test3*\n버튼3을 누르셨습니다.")
client.files_upload(channels="슬랙채널ID", file="원하는 파일경로")
SocketModeHandler(app, "슬랙앱 토큰").start()
총 3개의 callback_id 값으로 버튼 동작을 구현하였으며, 메시지뿐만 아니라 client.files_upload를 통해 원하는 파일 또한 슬랙에 업로드를 할 수 있습니다.
더욱 자세한 slack_bolt 의 사용방법과 명령어들이 궁금하시다면 slack api 공식 홈페이지를 통해 도움받으실 수 있습니다.
Building an app with Bolt for Python
Bolt for Python is the quickest way for Python developers start building Slack apps. Learn how to create your first Bolt app with an interactive app home.
api.slack.com
마무리
텔레그램봇과 비교하면 슬랙봇은 참 기능도 많지만 UI가 상당히 마음에 들정도로 깔끔한 것 같습니다.
다만 파이썬으로 제어하기에는 난이도가 텔레그램봇 보다는 조금 높은 것 같네요.
슬랙봇을 통해 업무를 자동화하고 여러분의 무궁무진한 아이디어를 활용하여 한 번 가지고 놀아보는 것은 어떨까요?
파이썬으로 슬랙봇을 제어하는 간단한 방법에 대해 알아보았는데 많은 도움 받으셨길 바랍니다.
궁금하신 부분은 댓글을 달아주시면 빠르게 확인해서 알려드리도록 하겠습니다.
그럼 다음 재밌는 파이썬 제어로 찾아뵙겠습니다.
'파이썬' 카테고리의 다른 글
파이썬으로 지라(JIRA) 연동하는 방법 총정리 (5) | 2023.08.21 |
---|---|
파이썬 프로그램 파일 자동으로 재실행하기 (20) | 2023.08.16 |
파이썬을 배우면 할 수 있는 것들 총정리 (17) | 2023.07.13 |
파이썬으로 구글OTP 인증번호 자동화 해결방법 총정리 (32) | 2023.06.18 |
스마트스토어를 자동화 할 때 문제점들 해결방법 총정리 (29) | 2023.06.05 |
댓글