개발 slecs

디스코드 발행 알림에 삭제 버튼 인터랙션 추가

목차

디스코드로 발행 알림을 보낼 때 버튼을 달았다. 그냥 공지만 하던 방식에서 한 발 나아가서, 사용자가 메시지 아래의 🗑️ 버튼을 눌러 직접 처리할 수 있도록 한 작업이다.

왜 버튼을 달아야 했나

보통 봇이 채널에 알림을 던지면, 받는 쪽에선 읽기만 하거나 스레드에 댓글로 응답하는 식이다. 하지만 발행 알림 같은 경우, 그냥 읽는 것보다 바로 처리할 수 있으면 UX가 훨씬 낫다. 특히 내리기(삭제)처럼 간단한 액션은 "이 메시지 필요 없어" 하고 버튼 한 번에 치워버릴 수 있으면, 채널이 정리되고 팀 입장에서도 깔끔하다.

또한 팀이 디스코드를 주 커뮤니케이션 채널로 쓰는 입장에서, 봇의 응답성과 상호작용 수준이 중요하다. 일방적 알림만 떨어지는 봇보다, 사용자가 클릭 한 번으로 상태 변화를 만들 수 있는 봇이 훨씬 신뢰감 있고 자연스럽다.

구현 접근: 리스너와 액션 워커

변경 파일은 두 가지다:

파일 역할
listener/listener.py 디스코드 이벤트 수신 (버튼 클릭 감지)
scripts/bot-action-worker.py 클릭된 액션 처리 (실제 내리기 실행)

이 구조는 꽤 일반적이다. 리스너는 "사용자가 버튼을 눌렀다"는 이벤트를 받아서, 액션 워커로 작업을 전달한다. 워커는 실제 비즈니스 로직(메시지 삭제, 상태 변경 등)을 처리한다.

# 리스너 쪽에서는 버튼 클릭을 감지하고
# 어떤 액션을 실행할지 워커에 신호를 보낸다
# listener/listener.py: on_interaction → route to worker

# 워커 쪽에서는 실제 삭제 처리
# scripts/bot-action-worker.py: handle_action('delete', ...) → delete message

이렇게 책임을 분리하면, 리스너는 이벤트 흐름에만 집중하고, 워커는 액션 로직에만 집중할 수 있다. 나중에 새로운 버튼이나 액션이 추가될 때도 구조가 명확해서 확장하기 쉽다.

버튼 인터랙션 설계할 때 고민하는 것들

1. 버튼의 상태 관리
한 번 눌린 버튼은 또 눌릴 수 있나? 메시지가 이미 지워졌는데 버튼을 또 누르면? 이런 엣지 케이스를 먼저 정리해야 한다. 보통은 버튼을 비활성화하거나, 중복 처리를 방지하는 로직이 필요하다.

2. 권한 체크
누구나 버튼을 누를 수 있나? 아니면 특정 역할만 가능한가? 발행 시스템이라면 보통 일정 권한 이상만 액션을 실행할 수 있도록 제한한다.

3. 피드백
버튼을 눌렀을 때, 사용자가 "내 클릭이 먹혔다"는 걸 알 수 있어야 한다. 리액션으로 보여주든, 메시지 업데이트하든, 타이밍이 중요하다.

일반론: 메시지 기반 상호작용

디스코드 봇의 매력은 텍스트 채널 안에서 완결된 상호작용을 만들 수 있다는 거다. 사용자가 외부 대시보드나 별도 도구로 이동할 필요 없이, 채널에서 버튼 몇 개로 작업을 처리한다. 이게 가능하려면:

  • 이벤트 기반 아키텍처: 버튼 클릭 → 이벤트 발생 → 처리
  • 빠른 응답성: 클릭 후 딜레이가 크면 UX가 망가진다
  • 명확한 상태 전달: 사용자가 "지금 뭐가 일어났나" 한눈에 알 수 있게

이런 점들이 listener-worker 패턴으로 자연스럽게 구현된다. 리스너는 "누가 뭘 눌렀나"에만, 워커는 "그럼 뭘 처리할까"에만 집중할 수 있으니까.

마무리

작은 기능처럼 보일 수 있지만, 사용자 경험 관점에서는 꽤 중요한 변화다. 일방향 알림에서 양방향 상호작용으로 한 단계 나아간 것. 앞으로도 봇이 할 수 있는 액션들을 계속 버튼으로 노출하면서, 팀의 디스코드 워크플로우가 더 자연스럽고 효율적으로 다듬어질 것 같다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.