Ch.2 JavaScript 라이브러리 15선

Discord.js — 디스코드 봇 만들기

article

핵심 내용

Discord.js는 디스코드 봇을 JavaScript로 만드는 라이브러리입니다

한 줄 요약: 디스코드 서버에서 자동 응답, 역할 부여, 알림을 수행하는 봇을 만들 수 있는 라이브러리. 실생활 비유: 카페의 '키오스크'라고 생각하세요. 손님(유저)이 버튼을 누르면(명령어 입력), 키오스크(봇)가 자동으로 주문을 접수하고 알림을 보내줍니다. 24시간 쉬지 않는 서버 매니저!

커뮤니티가 커지면 사람 손으로는 관리가 안 됩니다

수동 관리: 새 멤버마다 직접 환영 인사, 역할 부여, 규칙 안내. 100명만 넘어도 지옥. 밤에는 아무도 응답 못함.

Discord.js 봇: 입장 즉시 자동 환영 + 역할 부여. !help로 규칙 안내. 24시간 자동 응답. 서버 1000명도 거뜬.

npm 한 줄이면 설치 끝

npm init -y
npm install discord.js
const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
});

client.on('ready', () => {
  console.log(`${client.user.tag} 봇이 온라인입니다!`);
});

client.on('messageCreate', (msg) => {
  if (msg.content === '!hello') {
    msg.reply('안녕하세요! 반갑습니다 👋');
  }
});

client.login(process.env.DISCORD_TOKEN);

봇 토큰 설정: Discord Developer Portal에서 봇을 생성하고 토큰을 발급받으세요. 토큰은 환경변수 `DISCORD_TOKEN`에 저장합니다. 절대 코드에 직접 토큰을 넣지 마세요! .env 파일을 사용하세요.

AI에게 이렇게 요청하세요

좋은 프롬프트 예시 "Discord.js로 커뮤니티 관리 봇을 만들어줘. !hello 입력하면 환영 메시지, !roll 입력하면 1~100 랜덤 주사위, !poll '제목' '옵션1' '옵션2'로 투표 생성, 새 멤버 입장 시 환영 알림 보내줘."

프롬프트 변형 • "!rank 명령어로 채팅 횟수 기반 레벨 시스템 추가해줘" • "특정 단어가 포함된 메시지를 자동 삭제하는 필터 기능 넣어줘" • "매일 오전 9시에 '좋은 아침!' 메시지를 보내는 스케줄러 추가해줘"

// AI가 생성해줄 핵심 코드 구조
client.on('messageCreate', (msg) => {
  if (msg.author.bot) return;

  if (msg.content === '!hello') {
    msg.reply(`환영합니다, ${msg.author.username}님!`);
  }

  if (msg.content === '!roll') {
    const num = Math.floor(Math.random() * 100) + 1;
    msg.reply(`🎲 주사위 결과: ${num}`);
  }
});

커뮤니티 관리 봇 미니 프로젝트

const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
    GatewayIntentBits.GuildMembers,
  ],
});

// 환영 메시지
client.on('guildMemberAdd', (member) => {
  const channel = member.guild.systemChannel;
  if (channel) {
    channel.send(`🎉 ${member.user.username}님이 입장했습니다! 환영해요!`);
  }
});

// 명령어 처리
client.on('messageCreate', (msg) => {
  if (msg.author.bot) return;

  // !hello — 환영 인사
  if (msg.content === '!hello') {
    msg.reply(`반갑습니다, ${msg.author.username}님! 🤗`);
  }

  // !roll — 주사위
  if (msg.content === '!roll') {
    const result = Math.floor(Math.random() * 100) + 1;
    msg.reply(`🎲 ${result}이(가) 나왔습니다!`);
  }

  // !poll — 간단 투표
  if (msg.content.startsWith('!poll ')) {
    const question = msg.content.slice(6);
    msg.channel.send(`📊 **투표**: ${question}\n👍 찬성 | 👎 반대`)
      .then(poll => {
        poll.react('👍');
        poll.react('👎');
      });
  }
});

client.login(process.env.DISCORD_TOKEN);

실행 방법: Discord Developer Portal에서 봇 생성 → 토큰 복사 → `.env` 파일에 `DISCORD_TOKEN=토큰값` 저장 → `node bot.js` 실행. 서버에 봇을 초대하고 `!hello`, `!roll`, `!poll 점심 뭐 먹을까?`를 입력해보세요!

Discord.js 봇이 메시지에 반응하려면 어떤 이벤트를 리스닝해야 하는가?

key

핵심 용어

자동 응답

특정 메시지에 자동으로 답변하는 챗봇 기능

역할 관리

신규 멤버에게 자동으로 역할을 부여하거나 변경

알림 봇

특정 이벤트(입장, 퇴장, 예약 시간)에 알림 전송

미니 게임

주사위, 가위바위보, 퀴즈 같은 간단한 게임 구현

스터디 그룹

출석 체크, 과제 리마인더, 주간 정리 자동화

게임 서버

전적 조회, 매칭, 랭킹 봇으로 게임 커뮤니티 운영

개인 프로젝트

GitHub 푸시 알림, 서버 상태 모니터링 봇

check_circle

핵심 정리

  • 1Discord.js는 디스코드 봇을 JavaScript로 만드는 공식 라이브러리
  • 2Client + GatewayIntentBits로 봇 생성, messageCreate 이벤트로 명령어 처리
  • 3봇 토큰은 반드시 환경변수(DISCORD_TOKEN)로 관리 — 코드에 직접 넣지 말 것
  • 4AI 프롬프트에 '명령어 목록 + 이벤트 종류 + 응답 형식'을 명시하면 정확한 봇 코드 생성

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작