디스코드 봇을 만들기로 마음먹었는데, 막상 개발 환경을 어떻게 설정해야 할지 막막한 분들이 많습니다. 이 글에서는 Discord 개발자 포털에서 애플리케이션을 생성하고, 봇을 서버에 초대한 뒤, TypeScript와 같은 언어로 개발을 시작하기 위한 필수 환경 설정을 5분 만에 끝낼 수 있는 핵심만 정리했습니다.
Discord 개발자 포털에서 봇 애플리케이션 만들기
가장 먼저 해야 할 일은 봇의 신원을 만드는 것입니다. Discord 개발자 포털(discorddeveloper)에 접속한 후, 오른쪽 상단의 "New Application" 버튼을 클릭합니다. 원하는 Application Name을 입력하고 "Create"를 누르면 애플리케이션이 생성됩니다.
애플리케이션이 생성되면 왼쪽 사이드바에서 "Bot" 탭으로 이동합니다. 여기서 봇의 프로필 사진과 이름을 설정할 수 있습니다. 가장 중요한 것은 "Token"입니다. "Reset Token" 버튼을 클릭하면 새로운 토큰이 발급되는데, 이 토큰은 봇을 코드와 연결하는 비밀 키 역할을 합니다. 토큰은 한 번만 표시되므로 반드시 안전한 곳에 복사해 두어야 합니다. 분실 시에는 다시 초기화해야 합니다.
봇이 서버의 활동을 감지하려면 특정 권한(Intents)을 활성화해야 합니다. "Bot" 탭의 "Privileged Gateway Intents" 섹션에서 SERVER MEMBERS INTENT와 MESSAGE CONTENT INTENT를 필요한 경우 활성화합니다. 이 설정은 봇이 서버 멤버 정보나 메시지 내용에 접근할 수 있도록 허용합니다.
봇을 서버에 초대하고 필요한 권한 설정하기
봇을 실제로 사용하려면 서버에 초대해야 합니다. 왼쪽 사이드바에서 "OAuth2" 탭으로 이동한 후, "URL Generator"를 선택합니다.
"Scopes" 섹션에서 반드시 다음 두 가지를 선택합니다.
bot: 애플리케이션이 봇으로 인식되도록 합니다.applications.commands: 봇이 슬래시(/) 명령을 사용할 수 있도록 합니다. 이 항목을 선택하지 않으면 명령어가 서버에 등록되지 않는 문제가 발생할 수 있습니다.
bot을 선택하면 아래에 "Bot Permissions" 섹션이 나타납니다. 여기서는 봇이 서버에서 수행할 작업에 맞는 권한을 선택합니다. 예를 들어, 메시지를 읽고 쓰려면 "Send Messages", "Read Messages/View Channels" 등을 선택합니다. 개발 초기에는 "Administrator" 권한을 부여하면 모든 작업을 테스트하기 편리합니다. 다만, 실제 운영 시에는 최소한의 권한만 부여하는 것이 보안에 좋습니다.
모든 설정을 마쳤다면, "GENERATED URL" 아래에 생성된 URL을 복사하여 웹 브라우저에 붙여넣습니다. 원하는 서버를 선택하고 "승인" 버튼을 누르면 봇이 서버에 추가됩니다.
개발 환경 설정과 첫 번째 코드 연결하기
이제 코드 작성을 위한 환경을 준비할 차례입니다. 가장 보편적인 방법은 Node.js와 discord.js 라이브러리를 사용하는 것입니다. 공식 discord.js 라이브러리는 봇 개발에 필요한 거의 모든 기능을 제공합니다.
- Node.js 설치: 공식 웹사이트에서 LTS(Long Term Support) 버전을 다운로드하여 설치합니다.
- 프로젝트 폴더 생성: 작업할 폴더를 만들고, 터미널에서 해당 폴더로 이동합니다.
- 프로젝트 초기화:
npm init -y명령어로package.json파일을 생성합니다. - 라이브러리 설치:
npm install discord.js명령어로 핵심 라이브러리를 설치합니다. TypeScript를 사용한다면 추가로npm install typescript @types/node도 함께 설치합니다.
TypeScript를 사용하는 또 다른 방법으로는 discordx라는 라이브러리가 있습니다. discordx는 데코레이터(Decorators) 패턴을 지원하여 코드 구조를 더 직관적으로 만들어 줍니다. npm install discordx로 설치할 수 있으며, GitHub 저장소에서 제공하는 샘플 코드를 참고하면 빠르게 시작할 수 있습니다.
다음으로, 발급받은 봇 토큰을 안전하게 관리하기 위해 .env 파일을 사용합니다. 프로젝트 루트 폴더에 .env 파일을 만들고, 다음과 같이 토큰과 길드 ID(봇을 추가한 서버 ID)를 저장합니다.
DISCORD_TOKEN=여기에_복사한_토큰_붙여넣기
GUILD_ID=서버_ID_입력
CLIENT_ID=애플리케이션_ID_입력
DISCORD_TOKEN: Bot 탭에서 복사한 토큰입니다.GUILD_ID: 서버의 ID입니다. (Discord에서 서버 이름 우클릭 -> 서버 설정 -> 위젯에서 확인 가능)CLIENT_ID: OAuth2 탭의 "General"에서 확인할 수 있습니다.
이제 간단한 코드를 작성하여 봇이 정상적으로 작동하는지 확인합니다. index.js(또는 index.ts) 파일을 만들고, 기본적인 봇 로그인 코드를 작성합니다.
// JavaScript 예시
const { Client, GatewayIntentBits } = require('discord.js');
require('dotenv').config(); // .env 파일 사용을 위해
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.login(process.env.DISCORD_TOKEN);
코드를 실행하려면 터미널에서 node index.js를 입력합니다. 콘솔에 Logged in as 봇이름#태그!라고 출력되면 환경 설정이 완료된 것입니다.
FAQ 자주 묻는 질문
Q. 봇 토큰을 깃허브에 올려버렸는데 어떻게 해야 하나요?
A. 즉시 Discord 개발자 포털의 Bot 탭에서 "Reset Token" 버튼을 눌러 토큰을 재발급받으세요. 이전 토큰은 더 이상 사용할 수 없게 됩니다. 앞으로는 .env 파일을 사용하고, 이 파일을 .gitignore에 추가하여 실수로 업로드되지 않도록 관리하는 것이 중요합니다.
Q. 슬래시 명령어가 서버에 나타나지 않습니다. 왜 그런가요?
A. OAuth2 URL Generator에서 applications.commands 스코프가 선택되지 않았을 가능성이 높습니다. 봇을 서버에서 추방한 후, 해당 스코프를 포함하여 다시 초대해야 합니다. 또한, 명령어 등록 코드가 정상적으로 실행되었는지 확인해야 합니다. 길드(Guild) 명령어로 등록하면 거의 즉시 반영되지만, 글로벌 명령어는 최대 1시간까지 소요될 수 있습니다.
Q. 로컬에서 봇을 실행했는데 "Privileged intent" 오류가 발생합니다.
A. Discord 개발자 포털의 Bot 탭에서 "Privileged Gateway Intents"를 활성화하지 않았기 때문입니다. 봇이 GUILD_MEMBERS나 MESSAGE_CONTENT 같은 민감한 정보에 접근해야 한다면 해당 인텐트를 반드시 켜야 합니다. 필요하지 않다면 코드에서 해당 인텐트를 사용하지 않는 것이 좋습니다.