나는 이렇게 논다/글또 슬랙 봇 개발기 10

슬랙 봇이 보낸 메시지를 '더 쉽게' 수정해봅시다

이전 글: 2024.10.17 - [나는 이렇게 논다/글또 슬랙 봇 개발기] - 슬랙 봇이 보낸 메시지를 수정해봅시다 이전 글에서 슬랙 봇이 보낸 메시지를 수정하는 과정에 대해 설명드렸습니다. 그런데 이는 매우 특수한 상황에 대한 수정 방법이었죠. 아마 똑같이 따라서 구현하는 일은 없을 겁니다. 그래서 이번 글에서는 훨씬 쉬우면서도 모든 슬랙 메시지에 대해 수정할 수 있는 방법을 설명드리겠습니다. (일종의 AS 글인 셈이죠~🤭) 먼저, 간단하게 요약하자면 '수정할 메시지를 가져와 고칠 부분만 직접 수정하고 업데이트하는 것'입니다. 자 그럼 구현을 시작해 볼까요? (구현은 FastAPI 를 기준으로 설명합니다) 수정할 메시지 가져오기냅다 전체 코드부터 꽂고 시작하겠습니다.@router.get( "/mess..

슬랙 봇이 보낸 메시지를 수정해봅시다

슬랙 봇이 어떤 채널에 메시지를 보냈다고 가정해 봅시다. 그런데 만약, 메시지에 문제가 있어 봇이 보낸 메시지를 수정해야 한다면 어떻게 해야 할까요? 아래는 슬랙 봇의 메시지를 수정한 모습입니다. 이번 글에서는 슬랙 봇의 메시지를 수정하는 경우와 그 방법에 대하여, 또봇(글또 슬랙 봇)의 구체적인 사례로 설명드리겠습니다.  메시지 수정이 필요한 상황제가 속해있는 글또라고 하는 커뮤니티는 개발자들이 글을 쓰고 봇을 통해 제출하는 커뮤니티입니다. 현재 10기의 멤버 수는 640명이죠. 커뮤니티 인원 수가 많다보니 글을 실수로 잘못 제출하거나 불가피하게 블로그 링크가 바뀌어 메시지 수정이 필요한 때가 종종 생깁니다. 예를 들어, 다음과 같은 상황입니다. 글또 커뮤니티는 글을 제출하면 아래와 같은 형식으로 봇이..

Python aiocache 로 비동기 Slack API 요청 캐싱하기

슬랙 API를 사용하면서 동일한 요청을 반복적으로 해야 할 때가 있습니다. 예를 들어 슬랙의 특정 메시지를 조회하여 데이터를 가져오는 경우가 있을 수 있죠. 하지만 슬랙 API는 사용량 제한이 있기 때문에, 같은 요청을 반복하는 대신 캐싱을 통해 효율적으로 처리할 수 있습니다. 오늘은 aiocache 라이브러리를 사용해 비동기 함수에 대한 캐시 구현 방법을 소개해 보겠습니다.  문제 상황slack_sdk 에서 제공하는 AsyncWebClient 를 이용하여 특정 메시지의 댓글을 가져오겠습니다. 이를 위해서는 conversations_replies 메서드를 사용합니다. async def fetch_messages( client: AsyncWebClient, channel_id: str, t..

슬랙 봇으로 '채널 초대' 기능 구현하기

앞서 우리는 슬랙 봇에서 사용자가 특정 멤버를 여러 채널에 초대할 수 있도록 모달을 띄우는 기능을 구현했습니다.  슬랙 봇으로 '채널 초대' 모달 띄우기이전 글에서 /관리자 명령어를 통해 관리자만 접근할 수 있는 메뉴를 만드는 방법에 대해 설명했었습니다. 2024.08.29 - [나는 이렇게 논다/글또 슬랙 봇 개발기] - 슬랙 봇으로 나만 보이는 '관리자daco2020.tistory.com  이번에는 '채널 초대'를 마무리 짓기 위해, 사용자가 모달에서 제출한 정보를 바탕으로 실제로 채널 초대를 수행하는 방법을 설명하겠습니다.  채널 초대 뷰 핸들링채널 초대를 처리하는 뷰 이벤트 함수는 handle_invite_channel_view로 지었습니다. 뷰 모달에서 제출된 데이터를 받아서 처리하죠. 이 함수..

슬랙 봇으로 '채널 초대' 모달 띄우기

이전 글에서 /관리자 명령어를 통해 관리자만 접근할 수 있는 메뉴를 만드는 방법에 대해 설명했었습니다.  슬랙 봇으로 나만 보이는 '관리자' 메뉴 만들기Slack 봇을 개발할 때, 관리자만 사용할 수 있는 기능이 필요한 경우가 종종 있습니다. 예를 들어, 데이터 동기화나 특정 채널에 멤버를 초대하는 작업 등이죠. 이번 글에서는 /관리자 명령어를daco2020.tistory.com 이번에는 해당 메뉴에서 '채널 초대' 버튼을 눌렀을 때 실행되는 invite_channel 액션을 처리하고, 사용자가 멤버를 초대할 수 있는 모달을 띄우는 방법을 알아보겠습니다.  액션 이벤트 핸들링먼저, invite_channel 액션이 발생했을 때 이를 처리할 핸들러 함수를 작성해줘야 합니다. `invite_channel`은..

슬랙 봇으로 나만 보이는 '관리자' 메뉴 만들기

Slack 봇을 개발할 때, 관리자만 사용할 수 있는 기능이 필요한 경우가 종종 있습니다. 예를 들어, 데이터 동기화나 특정 채널에 멤버를 초대하는 작업 등이죠. 이번 글에서는 /관리자 명령어를 통해 두 개의 버튼을 제공하여, 관리자에게 필요한 메뉴를 호출할 수 있도록 해보겠습니다. 사용한 프레임워크는 Slack Bolt 입니다.   핸들러 함수 정의먼저, 슬랙에서 관리자 명령어를 처리하는 admin_command 함수를 정의해 보겠습니다. 이 함수는 사용자가 /관리자 명령어를 입력했을 때 호출됩니다. 참고로, 명령어는 사전에 slack api 웹사이트에서 Slash Commands 를 설정해주셔야 합니다.async def admin_command( ack: AsyncAck, body: Com..

Slack Bolt에서 view Dict를 View 객체로 변경해보자

Slack 앱을 개발하면서, 모달을 띄우는 view dict 대신 View 객체를 사용하도록 리팩토링을 진행했습니다. 사실 저는 얼마전까지만 해도 slack sdk 가 View 객체를 제공하는지 모르고 있었습니다. 그래서 매번 view 를 dict 로 작성했었는데요. 이번 글에서는 view Dict 를 View 객체로 바꾸는 과정을 공유하고, View 객체를 사용함으로써 얻은 이점에 대해 이야기하려고 합니다.   Dict 를 사용한 기존 코드처음 Slack 앱을 개발할 때는, Slack의 모달이나 메시지 레이아웃을 정의할 때 주로 딕셔너리(dict)를 사용했습니다. 예를 들어, 유저의 예치금 상태를 보여주는 모달을 열 때 다음과 같이 작성했습니다.await client.views_open( trig..

Slack Block Kit 주요 블록 유형별 차이점 정리

Slack Block Kit에서 각 블록은 고유의 역할을 가지고 있는데요. 이를 구성하는 요소들도 블록마다 다르게 사용되다보니 헷갈리는 경우가 많습니다. 이번 글에서는 Input, Actions, Section 블록을 중심으로, 각 블록이 사용하는 요소들의 차이점과 쓰임새를 정리해보겠습니다.  1. Input 블록특징단일 요소 사용사용자로부터 데이터를 입력받기 위한 목적구성 요소element: 단일 상호작용 요소를 포함합니다. 주로 텍스트 입력, 선택 메뉴, 날짜 선택기 등을 사용합니다.예시{ "type": "input", "element": { "type": "plain_text_input", "action_id": "name_input" }, "label..

개발자 글쓰기 커뮤니티는 '슬랙 봇'을 어떻게 사용하고 있을까?

글 쓰는 또라이가 세상을 바꾼다 글또(글 쓰는 또라이가 세상을 바꾼다)라고 하는 개발자 글쓰기 커뮤니티가 있습니다. 현재 진행 중인 글또 9기는 454명이 참여 중이고, 전체 일정의 중반을 넘어서고 있죠. 저는 글또를 7기부터 참여하고 있고, 현재 9기까지 약 2년에 가까운 시간 동안 함께하고 있습니다. 그리고 8기 때부터는 운영진으로 참여하며 커뮤니티에 직접적으로 기여하고 있는데요. 저는 커뮤니티 내 '또봇'이라고 부르는 '슬랙 봇'을 개발하여 운영하고 있습니다. 글또는 한 기수가 5~6개월 동안 진행되며, 멤버들은 2주에 한 번씩 글을 슬랙에 공유하는 방식으로 소통합니다. 이 과정에서 서로의 글에 피드백을 주고받고, 가끔은 멤버들 간 커피챗을 통해 지식이나 경험을 나누기도 합니다. 저는 여기에 더해 ..

카테고리 수집하려다 슬랙 봇까지 개발해버린 건에 대하여…

*이 글은 글또 8기에서 사용하는 슬랙 봇 [또봇]의 개발 이야기입니다. *글또는 ‘글 쓰는 또라이가 세상을 바꾼다’라는 뜻으로 슬랙을 활용에 2주에 한 번 글을 올리는 개발자 글쓰기 커뮤니티입니다. 모든 글을 쉽게 검색할 수 있도록 작년에 나는 글또 7기 [백엔드-인프라 e] 조로 참여했다. 글또는 조별로 서로의 글을 공유하고 피드백을 나누는데, 백엔드의 경우 같은 직무라도 사용하는 언어나 기술에 따라 다루는 글 내용이 천차만별이었다. 나는 비교적 소수가 사용하는 Python을 사용하기 때문에 다른 기술을 사용하는 분들의 글이 잘 읽히지 않았다. 예를 들어 자바 스프링에 대한 내용은 내겐 이해하기도 어려울뿐더러 큰 도움이 되지 않았다.(내 글 또한 그분들에게 도움이 되지 않았을 것이다.) 이러다 보니 ..