디스코드 AI 챗봇 만들기, 파이썬(discord.py)과 OpenAI 연결하기
최근 디스코드 서버에 대화 기능이 있는 AI 봇을 추가하는 서버가 많아졌습니다.
정해진 명령어에만 답하는 봇보다, 유저의 질문을 파악하고 대답하는 챗봇이 인기가 많기 때문입니다.
챗봇을 만들기 위해서는 보통 OpenAI의 API를 활용하게 됩니다.
이 글에서는 파이썬의 discord.py 라이브러리를 사용해서 디스코드 메신저에 챗봇을 만드는 전체 과정을 순서대로 설명합니다.
파이썬 기초 문법을 알고 있다면 누구나 직관적으로 따라 해볼 수 있도록 작성했습니다.
1. OpenAI 플랫폼에서 API 키 발급하기
디스코드 봇이 AI 모델과 통신하려면 OpenAI 서버의 접근 권한이 필요합니다.
우선 인터넷 창을 열고 OpenAI 플랫폼 페이지에 로그인합니다.
화면 왼쪽 메뉴에서 'API keys' 탭을 찾아서 클릭합니다.
가운데 있는 [Create new secret key] 버튼을 누르면 영어와 숫자로 이루어진 긴 비밀 키(API 키)가 생성됩니다.
이 키의 문자열은 타인에게 절대 노출되면 안 됩니다.
만약 외부에 노출되어 타인이 이 키를 악용하면 요금이 과다 청구될 수 있기 때문입니다.
화면에 뜬 키를 복사해서 본인의 텍스트 편집기에 임시로 붙여넣습니다.
2. 파이썬 프로젝트 폴더 만들고 라이브러리 설치하기
컴퓨터에 봇 관련 파일들을 모아둘 빈 폴더를 하나 만듭니다.
VS Code 같은 코딩 웹 에디터나 프로그램으로 방금 만든 폴더를 열고 터미널을 실행합니다.
디스코드 API와 OpenAI API를 코드에서 사용할 수 있도록 아래 명령어를 터미널 창에 적고 엔터를 누르세요.
pip install discord.py openai python-dotenv
이 명령어는 디스코드 통신용 discord.py, OpenAI 통신용 openai, 그리고 아까 발급받은 비밀 키를 보관할 python-dotenv 라이브러리를 설치합니다.
3. 환경변수(.env) 보안 코드 작성하기
코드에 API 키를 그대로 적으면 나중에 깃허브 등에 코드를 올릴 때 키가 같이 유출될 위험이 큽니다.
이 문제를 방지하기 위해 .env 파일을 사용합니다. 폴더 안에 새 파일을 만들고 이름을 .env로 설정합니다.
파일을 열고 아래처럼 코드를 적어 넣습니다.
DISCORD_TOKEN=디스코드_포털에서_받은_토큰
OPENAI_API_KEY=sk-복사해둔_오픈에이아이_키
4. 메인 파이썬 코드 (main.py) 작성하기
이제 봇을 실행할 main.py 파일을 만들어 줍니다.
빈 파일 안에 아래 파이썬 코드를 복사해서 붙여넣으세요.
import discord
from openai import AsyncOpenAI
import os
from dotenv import load_dotenv
# .env 파일에 저장해둔 비공개 키값들을 불러옵니다.
load_dotenv()
# 디스코드 봇이 메시지를 읽어올 수 있도록 설정(인텐트)을 변경합니다.
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
# OpenAI 비동기 클라이언트를 실행합니다.
openai_client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 봇이 켜지고 접속을 마쳤을 때 터미널에 메시지를 출력합니다.
@client.event
async def on_ready():
print(f"로그인 성공: {client.user.name}")
# 서버에 새로운 메시지가 올라왔을 때 아래 코드가 실행됩니다.
@client.event
async def on_message(message):
# 봇이 스스로 작성한 메시지는 무시합니다.
if message.author.bot:
return
# 누군가 채팅창에서 봇을 태그했을 때만 반응합니다.
if client.user in message.mentions:
# 챗봇이 생각하는 동안 '입력 중...'이라는 표시를 띄워줍니다.
async with message.channel.typing():
# 유저의 메시지 내용 중에서 봇을 태그하는 코드를 지웁니다.
user_text = message.content.replace(f'<@{client.user.id}>', '').strip()
try:
# OpenAI 서버로 질문 대화를 전송합니다.
response = await openai_client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "너는 이 디스코드 서버의 매니저야. 친절하게 답변해줘."},
{"role": "user", "content": user_text}
]
)
# 받아온 답변을 디스코드 채널에 답장으로 전송합니다.
answer = response.choices[0].message.content
await message.reply(answer)
except Exception as e:
# 에러 로그를 출력합니다.
print(f"오류 발생: {e}")
await message.reply("에러가 발생해서 답변을 할 수 없습니다.")
# 설정해둔 디스코드 토큰으로 봇을 켭니다.
client.run(os.getenv("DISCORD_TOKEN"))
코드에서 system 역할을 맡은 안내 메시지를 수정하면 봇의 성격을 바꿀 수 있습니다.
원하는 말투나 설정으로 문장을 수정하면 그에 맞게 봇의 반응이 즉각적으로 변합니다.
5. 에러 확인 및 Message Content 권한 확인하기
터미널에서 python main.py를 누르면 코드가 실행됩니다.
디스코드 서버로 넘어가서 봇을 태그하고 질문을 하면 로딩 표시 이후에 봇이 대답을 전송합니다.
만약 코드를 다 적었는데도 봇이 메시지에 반응을 하지 않고 오류가 나타난다면, 디스코드 개발자 포털(Discord Developer Portal)에서 서버 권한을 확인해야 합니다.
내 봇을 선택한 뒤 Bot 메뉴로 들어가서 'Message Content Intent' 항목의 스위치가 파란색으로 활성화되어 있는지 확인하고 변경 사항을 저장하세요.
이 기능 커져 있어야 봇이 유저의 대화 텍스트 데이터를 정상적으로 읽어올 수 있습니다.
6. 디스코드 봇을 24시간 호스팅하기
코드를 모두 작성하고 작동까지 확인했다면 내 컴퓨터를 켤 때만 작업 환경에서 봇이 작동하는 상태일 것입니다.
컴퓨터 전원을 끄거나 에디터 프로그램을 닫으면 파이썬 프로그램도 중단되기 때문에 봇도 멈춥니다.
다른 유저들이 새벽 시간대라도 봇을 사용하게 하려면 24시간 내내 작동할 별도의 호스팅 서버를 이용해야 합니다.
관련된 무료 호스팅 배포 방법은 24시간 무료 봇 호스팅, 디스호스트 글을 참고하여, 방금 작성한 main.py와 .env 파일 등을 서버에 올려두고 작동시키면 됩니다.
'봇 개발 팁 > Discord.py' 카테고리의 다른 글
| Discord.py Components V2 사용 가이드 (신형 임베드, 줄 나누기, 임베드 내에 버튼 등) (0) | 2025.12.06 |
|---|---|
| Discord.py로 디스코드 음악 봇 만들기: 디스호스트로 24시간 호스팅까지! (0) | 2025.06.04 |