JS로 기본 디스코드 봇을 만든 뒤 가장 많이 붙여 보는 기능이 AI 응답입니다.
질문을 받아 대답하는 구조 하나만 있어도 봇 체감이 크게 달라집니다.
특히 운영 서버, 스터디 서버, 문의 서버에서는 자동 응답 봇 수요가 분명합니다.
멘션 한 번에 답하는 최소 구조부터 붙여 두면 JS 봇 활용 범위가 바로 넓어집니다.
기본 JS 봇 구조가 아직 없다면 discord.js v14 디스코드 봇 만들기 처음부터 끝까지부터 먼저 맞춰 둬야 합니다.
토큰과 키를 분리하는 방식은 파이썬 .env 환경변수로 디스코드 토큰 숨기기, 하드코딩 없이 안전하게 관리하는 법과 같은 원리입니다.
1. OpenAI API 키 발급
OpenAI 플랫폼에 로그인한 뒤 API keys 메뉴로 들어갑니다.
새 비밀 키를 만들고 복사해 둡니다.
이 키는 과금과 직접 연결되는 비밀번호입니다.
메신저 대화창이나 메모 앱에 오래 남겨 두면 안 됩니다.
노출이 의심되면 바로 폐기하고 새 키를 발급합니다.
2. 패키지 설치
기존 JS 봇 프로젝트 폴더에서 아래 패키지를 설치합니다.
npm install openai dotenv discord.js
`discord.js`와 `dotenv`가 이미 있다면 추가로 설치할 것은 `openai` 정도입니다.
3. .env 구성
루트의 .env 파일을 아래처럼 맞춥니다.
DISCORD_TOKEN=디스코드_봇_토큰
OPENAI_API_KEY=sk-오픈에이아이_비밀키
OpenAI 키를 코드에 직접 적는 방식은 피합니다.
저장소에 올라가면 비용 문제가 바로 생길 수 있습니다.
4. main.js 전체 코드
아래 코드는 봇이 멘션된 경우에만 OpenAI로 질문을 보내고 답장을 돌려줍니다.
const { Client, GatewayIntentBits } = require("discord.js");
const { OpenAI } = require("openai");
const dotenv = require("dotenv");
dotenv.config();
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
client.once("ready", () => {
console.log(`로그인 성공: ${client.user.tag}`);
});
client.on("messageCreate", async (message) => {
if (message.author.bot) {
return;
}
if (!message.mentions.has(client.user)) {
return;
}
const question = message.content.replace(`<@${client.user.id}>`, "").trim();
if (!question) {
await message.reply("질문 내용을 같이 보내 주세요.");
return;
}
try {
await message.channel.sendTyping();
const completion = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [
{
role: "system",
content: "너는 디스코드 서버에서 질문에 답하는 운영 보조 챗봇이다. 짧고 명확하게 답한다.",
},
{
role: "user",
content: question,
},
],
});
const answer = completion.choices[0]?.message?.content || "답변을 생성하지 못했습니다.";
await message.reply(answer);
} catch (error) {
console.error(error);
await message.reply("OpenAI 요청 처리 중 오류가 발생했습니다.");
}
});
if (!process.env.DISCORD_TOKEN) {
throw new Error("DISCORD_TOKEN 값이 없습니다.");
}
if (!process.env.OPENAI_API_KEY) {
throw new Error("OPENAI_API_KEY 값이 없습니다.");
}
client.login(process.env.DISCORD_TOKEN);
질문을 멘션 기반으로 받는 이유는 채널 전체 대화를 전부 AI로 보내는 실수를 줄이기 위해서입니다.
초반에는 트리거를 좁게 둬야 비용과 관리 양쪽에서 안전합니다.
5. 테스트 방법
터미널에서 아래 명령어를 실행합니다.
node main.js
서버에서 봇을 멘션하고 질문합니다.
@내봇 오늘 공지 문구 한 줄 추천해줘
@내봇 이 서버 규칙을 짧게 요약해줘
타이핑 표시 뒤에 답변이 오면 연결이 된 상태입니다.
6. Message Content Intent도 같이 확인한다
멘션 기반이라도 메시지 본문 자체를 읽어야 하므로 Message Content Intent가 필요합니다.
Portal과 코드 양쪽이 둘 다 맞아야 합니다.
여기서 자주 멈추면 Message Content Intent 설정법, 디스코드 봇이 명령어를 읽지 못할 때 먼저 볼 것을 같이 보면 됩니다.
7. 초반에 자주 생기는 문제
401이나 인증 오류: OpenAI 키가 잘못 들어갔거나 폐기된 경우가 많습니다.- 봇이 멘션에 무반응: Intent 설정, 봇 재시작 누락, 멘션 문자열 처리 문제를 같이 봅니다.
- 답변이 너무 길어 실패하는 경우: 디스코드 메시지 길이 제한을 넘길 수 있으니 필요하면 잘라서 보내는 처리도 넣어 둡니다.
AI 봇은 코드보다 운영 가드가 더 중요할 때가 많습니다.
누가 언제 어떤 채널에서 쓰게 할지 먼저 정해야 합니다.
8. system 프롬프트는 운영 성격에 맞춰 둔다
system 메시지 한 줄만 바꿔도 응답 성격이 달라집니다.
문의 응대, 스터디 보조, 공지 초안 작성처럼 용도에 따라 문체와 범위를 제한해야 합니다.
무조건 친절하게만 두기보다, 답변 길이와 말투를 제한하는 문구를 같이 넣으면 채널이 덜 지저분합니다.
9. 다음 단계
JS AI 봇이 켜졌다면 이후에는 슬래시 명령어형으로 옮기거나 FAQ 전용 답변 흐름으로 좁히는 쪽이 자연스럽습니다.
계속 내 컴퓨터에서만 켜 둘 생각이 아니라면 24시간 디스코드 봇 무료 호스팅, 디스호스트 같은 배포 흐름까지 이어서 봐야 합니다.
'봇 개발 팁 > Discord.js' 카테고리의 다른 글
| discord.js v14 디스코드 봇 만들기 처음부터 끝까지 (0) | 2026.03.29 |
|---|---|
| Discord.js Components V2 사용 방법 (신형 임베드, 줄 나누기, 임베드 내에 버튼 등) (0) | 2025.12.06 |
| 디스코드 봇 명령어, 길드 커맨드와 글로벌 커맨드 차이점, 사용 방법 (0) | 2025.05.31 |
| Sharding이란? 대규모 봇에서의 필수 구조 이해 (0) | 2025.05.23 |
| 디스코드 봇에서 유저 포인트 시스템 구현하기 (0) | 2025.05.22 |