Skip to content
신선한 자몽 농장
Go back

Discord 봇 개발 과정

서버에 봇이 너무 많다

친구들과 함께 게임, 잡담, 정보 공유를 위한 디스코드 서버를 운영하고 있다. 인원이 100명 가까이 되다 보니 서버 관리와 편의 기능을 위해 여러 봇을 추가했고, 어느 순간 서버에 등록된 봇이 10개까지 늘어났다.

처음에는 필요한 기능을 빠르게 가져다 쓸 수 있어서 편했다. 하지만 시간이 지나면서 역할이 겹치는 봇이 생겼고, 일부 기능은 유료화되거나 원하는 방식으로 커스터마이징하기 어려웠다. 결국 여러 봇을 조합해서 쓰기보다는, 내가 운영하는 서버에 필요한 기능만 모아둔 전용 봇을 만드는 편이 낫겠다는 생각이 들었다.

예전부터 개인용 디스코드 봇을 만들어보고 싶었는데, 이번에는 Claude의 도움을 받아 실제로 구현해보기로 했다.


모든 작업은 계획부터

개발을 시작하기 전에 먼저 정리해야 할 것은 “어떤 기능을 만들 것인가”였다. 현재 서버에서 사용 중인 봇의 기능을 살펴보고, 실제로 자주 쓰는 기능과 없어도 되는 기능을 구분했다.

그 결과 필요한 기능은 크게 세 가지로 나눌 수 있었다.

  1. 서버 운영 도우미
  2. 이력 관리
  3. 기타 편의 기능

처음부터 모든 기능을 한 번에 완성하려고 하면 범위가 너무 넓어질 수 있다. 그래서 각 기능을 다시 작은 요구사항으로 쪼개고, 실제 서버 운영에 꼭 필요한 순서대로 정리했다.


1. 서버 운영 도우미

서버 인원이 많아지면 신규 유저에게 규칙을 안내하고 역할을 부여하는 일만으로도 꽤 번거롭다. 현재 서버는 처음 입장했을 때 공지사항 채널만 볼 수 있고, 규칙 숙지 확인 버튼을 눌러야 기본 권한을 받아 다른 채팅방과 음성방에 접근할 수 있는 구조로 운영하고 있다.

또한 플레이하는 게임이나 비공개 채널 접근 권한처럼 사용자가 직접 선택해야 하는 역할도 있다. 이런 역할은 별도의 역할 할당 채널에서 버튼을 눌러 자동으로 부여하거나 제거할 수 있어야 한다.

최초 입장 안내

신규 유저가 서버에 들어왔을 때 규칙 확인 절차를 자동화하기 위한 기능이다.

필요한 동작은 다음과 같다.

역할 할당 도우미

사용자가 직접 역할을 선택하고 해제할 수 있도록 돕는 기능이다.

필요한 동작은 다음과 같다.

공지사항 알리미

공지사항을 일정한 형식으로 발송하기 위한 기능이다.

필요한 동작은 다음과 같다.


2. 이력 관리

서버 인원이 많아지면 운영 중 예상하지 못한 문제가 종종 발생한다. 분쟁이 생기거나, 채팅을 지웠다 다시 쓰는 식의 장난이 반복되면 나중에 상황을 확인하기 어렵다. 그래서 단순한 채팅 로그뿐 아니라 서버 운영에 필요한 이력을 남기는 기능이 필요했다.

음성 채널 이력

음성 채널은 누가 언제 들어오고 나갔는지 확인할 수 있어야 한다.

채팅 채널 이력

채팅은 삭제와 수정 이력을 남기는 것이 중요하다.

관리자 설정

이력 기능은 서버마다 필요한 채널이 다를 수 있으므로 설정 기능이 필요하다.


3. 기타 편의 기능

서버 운영 기능 외에도 기존 봇에서 자주 사용하던 편의 기능을 함께 구현하기로 했다. 없어도 서버 운영에는 큰 문제가 없지만, 실제로는 자주 쓰이는 기능들이다.

이모지 확대

디스코드에서 커스텀 이모지를 크게 보고 싶을 때 사용하는 기능이다.

커스텀 명령어

간단한 안내 문구나 장난성 응답을 서버에 맞게 등록하기 위한 기능이다.

디시인사이드 링크 임베드화

디시인사이드 링크를 조금 더 보기 좋게 공유하기 위한 기능이다.


실질적인 구현 방향

이번 봇은 내가 운영하는 서버에서 개인적으로 사용할 목적이기 때문에 별도의 호스팅 서비스를 이용하지 않기로 했다. 대신 집에서 사용 중인 Synology NAS 환경에 Docker 컨테이너로 올려서 구동하는 방식으로 정했다.

개발 언어는 JavaScript를 선택했다. 디스코드 봇 생태계에서 참고할 자료가 많고, 이후 기능을 확장하기에도 부담이 적다고 판단했기 때문이다. 배포 역시 Docker 기반으로 구성하면 NAS에서 관리하기 편하고, 나중에 환경을 옮기더라도 재현하기 쉽다는 장점이 있다.

정리하면 이번 프로젝트의 방향은 다음과 같다.


완성

우여곡절 끝에 Claude의 도움을 받아 봇 제작을 마무리했다. 직접 코드를 하나씩 작성하기에는 막히는 부분이 많았지만, 기능 요구사항을 먼저 정리해두니 AI에게 구현을 요청하고 결과를 검토하는 과정이 훨씬 수월했다.

프로젝트는 아래 링크에서 확인할 수 있다.

이번 프로젝트를 통해 예전에는 기술적 한계나 지식 부족 때문에 미뤄뒀던 개인 프로젝트도 AI를 활용하면 충분히 시도해볼 수 있다는 걸 느꼈다. 물론 AI가 만들어준 코드를 그대로 믿기보다는, 내가 원하는 동작을 명확히 정의하고 결과를 검토하는 과정이 중요했다.

그래도 막연하게 “언젠가 만들어보고 싶다”고 생각만 하던 디스코드 봇을 실제로 완성했다는 점에서 꽤 만족스러운 프로젝트였다.



Next Post
원인불명 VM 셧다운 문제 해결하기