디스코드 봇 특화 설정

게이트웨이 인텐트 설정

봇이 온라인인데도 메시지나 이벤트를 수신하지 못할 때 필요한 게이트웨이 인텐트 설정법을 안내합니다.

디스코드 봇은 게이트웨이 웹소켓을 통해 실시간 이벤트를 수신합니다. 이때 봇이 처리할 이벤트의 종류를 지정하는 인텐트(Intents)를 설정하지 않으면, 봇이 정상 실행 중이더라도 메시지나 명령어에 응답하지 않을 수 있습니다.


1단계: 디스코드 개발자 포털 설정

멤버 목록이나 메시지 내용을 읽으려면 개발자 포털에서 권한 토글을 켜야 합니다.

  1. 디스코드 개발자 포털에서 본인의 봇 애플리케이션으로 이동합니다.
  2. 왼쪽 메뉴에서 Bot 탭을 선택합니다.
  3. Privileged Gateway Intents 섹션으로 스크롤을 내립니다.
  4. 필요한 항목을 활성화합니다:
    • Presence Intent: 멤버의 온라인 상태 및 활동 상태(플레이 중인 게임 등) 감지
    • Server Members Intent: 멤버 입장/퇴장 이벤트 및 닉네임 목록 감지
    • Message Content Intent: 사용자가 보낸 채팅 메시지 본문 읽기 (명령어 인식에 필수)
  5. 변경 후 Save Changes를 눌러 저장합니다.

2단계: 코드에서 Intents 선언

개발자 포털에서 권한을 켰다면, 봇 코드에서도 동일한 인텐트를 활성화해 주어야 합니다.

Node.js (discord.js v14)

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

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,           // 서버 기본 정보 수신
    GatewayIntentBits.GuildMessages,    // 서버 메시지 이벤트 감지
    GatewayIntentBits.MessageContent    // 메시지 텍스트 읽기 권한
  ]
});

Python (discord.py v2)

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.message_content = True  # 메시지 텍스트 읽기 권한
intents.members = True          # 멤버 목록 확인 권한

bot = commands.Bot(command_prefix='!', intents=intents)

자주 묻는 질문 FAQ

Q. 봇이 켜져 있는데 명령어를 입력해도 응답이 없습니다.

  • 원인: 디스코드 개발자 포털에서 Message Content Intent가 꺼져 있거나, 코드의 intents 배열에 누락되었을 가능성이 높습니다.
  • 확인 방법: 메시지 수신 이벤트 핸들러(messageCreate 또는 on_message)에서 수신된 텍스트(message.content)를 콘솔에 출력해 보세요. 빈 문자열로 표시된다면 인텐트가 활성화되지 않은 상태입니다.