Discord 알림 봇에 메시지 삭제 버튼 기능 추가
목차
Discord 봇이 포스팅하는 메시지에 삭제 버튼을 달 수 있도록 discord_notify 함수에 post_ids 파라미터를 추가했다. 단순히 "파라미터 하나 더 넣었다"는 것처럼 들릴 수 있지만, 이건 봇의 메시지 상호작용 설계에서 꽤 중요한 변화다.
왜 이 기능이 필요했나
봇이 Discord에 메시지를 던질 때, 그냥 텍스트만 보내는 게 아니라 사용자가 바로 상호작용할 수 있는 버튼을 붙일 수 있어야 한다는 건 최근 봇 UX의 표준이 됐다. 특히 "삭제" 버튼처럼 간단한 액션들은 사용자 경험을 훨씬 깔끔하게 만든다. 그런데 여기서 핵심은, 어떤 메시지에 어떤 버튼을 달 것인가를 식별해야 한다는 점이다. 그게 바로 post_ids의 역할이다.
내가 맡은 서비스(결제 플랫폼 또는 이커머스 PG)에서도 비슷한 상황이 있었다. 운영자나 고객이 Discord로 중요 알림을 받는데, "이 내용 좀 치워줄래?"라는 요청이 계속 들어왔다. 채널을 깔끔하게 유지하거나, 해결된 이슈는 숨기고 싶거나, 단순히 시각적으로 정리하고 싶은 경우다. 버튼 하나면 이런 게 가능해진다.
post_ids 파라미터의 역할
이 파라미터를 추가하면서 생각했던 건 "식별성"이다. Discord에서 특정 메시지를 가리키려면 메시지 ID가 필요한데, 우리 서비스 도메인에서 넘어오는 "포스트" 또는 "주문" 같은 엔티티와 Discord 메시지 ID를 매핑할 방법이 필요했다.
# 전에는 이렇게 단순히 메시지만 보냈다면
discord_notify(message="Order #12345 processed")
# 이제는 어떤 포스트/주문에 대한 메시지인지 명시할 수 있다
discord_notify(message="Order #12345 processed", post_ids=["12345"])
이렇게 하면 봇이 해당 메시지에 버튼을 달 때, 클릭 콜백에서 어떤 포스트를 삭제해야 하는지 알 수 있다. Callback handler가 post_ids를 받아서 데이터베이스에서 실제 삭제나 상태 변경을 처리하는 식이다.
Discord 메시지 상호작용 설계에서 배운 점
이런 작업을 하면서 깨달은 건 몇 가지다.
첫째, 상태 관리의 중요성. 버튼을 클릭한 후 뭔가 일어나면, 그 결과를 어디에 저장할 것인가? 데이터베이스에 soft delete flag를 두거나, 메시지 자체를 수정해서 "삭제됨" 이모지로 표시하거나, 아니면 메시지를 완전히 지우거나. 각각 트레이드오프가 있다. 내 경우엔 포스트의 상태를 변경하는 쪽으로 설계했는데, 그럼 Discord 채널의 히스토리도 일관성 있게 유지된다.
둘째, 권한 검증. 누구나 삭제 버튼을 클릭할 수 있다면? Discord의 역할(role) 기반 접근 제어나, 특정 사용자만 허용하는 로직이 필요하다. 그 검증 로직은 callback handler에 들어가야 한다. 지금은 간단한 삭제만 지원하지만, 나중에 "승인", "거절" 같은 액션이 늘어날 수 있으니, 확장 가능한 구조로 미리 설계하는 게 좋다.
셋째, timeout 고려. Discord 버튼은 일정 시간이 지나면 비활성화된다. 긴급 대응이 필요한 메시지라면 TTL을 짧게, 그렇지 않으면 길게 설정할 수 있다. post_ids가 명확하면, 나중에 만료된 버튼도 handling하기 쉽다.
코드리뷰 관점에서
이런 파라미터 추가를 할 때, 나는 팀원들에게 물어본다:
- post_ids가 항상 필수인가, 아니면 선택적인가?
- 여러 개의 포스트 ID를 동시에 지원해야 하나? (리스트로 설계한 이유)
- 버튼이 여러 개가 될 수 있다면, 액션별로 다른 파라미터가 필요한가?
이번 경우 post_ids를 리스트로 설계한 건 forward compatibility를 고려한 선택이다. 지금은 하나의 포스트에 하나의 버튼이지만, 나중에 "일괄 삭제" 같은 기능이 생길 수도 있으니까.
회고
작은 파라미터 추가처럼 보이지만, 이건 봇과 사용자의 상호작용 방식을 한 단계 업그레이드하는 작업이었다. Discord 같은 써드파티 플랫폼과 우리 서비스를 연결할 때는, 식별자를 명확히 하고 권한을 체크하고, 나중의 확장을 고려한 구조를 처음부터 잘 설계하는 게 핵심이다. 운영 채널이 복잡해지면 복잡해질수록, 이런 작은 버튼의 가치가 보인다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.