텍스트 기반 챗봇보다 반응이 빠르게 오는 기능 중 하나가 이미지 생성입니다.
프롬프트 한 줄로 샘플 이미지를 받아 보는 기능은 이벤트, 커뮤니티 놀이, 창작 서버에서 특히 잘 먹힙니다.
다만 호출 비용과 사용량이 바로 늘 수 있으므로 기본형부터 보수적으로 붙여야 합니다.
이번 글에서는 슬래시 명령어로 프롬프트를 입력받아 이미지 생성 API를 호출하고, 결과 이미지를 디스코드 채널에 보내는 기본 봇을 만듭니다.
1. 이미지 생성 봇은 어디서 잘 맞을까
아래 같은 서버에서 특히 체감이 큽니다.
- 창작 커뮤니티
- 이벤트 채널
- 밈 이미지 놀이 서버
- 샘플 시안이 필요한 운영 채널
AI 응답 기본 구조는 AI 자동 답변 FAQ 디스코드 봇 만들기와 비슷합니다.
2. 이미지 채널과 키 값을 먼저 넣기
DISCORD_TOKEN=여기에_봇_토큰
OPENAI_API_KEY=여기에_OpenAI_API_키
GUILD_ID=테스트_서버_ID
이미지 생성도 API 키 관리가 중요합니다.
키를 코드에 직접 넣으면 안 됩니다.
3. 이미지 생성 호출 패키지 준비
pip install -U discord.py openai python-dotenv
API 호출 뒤 받은 이미지 URL을 그대로 채널에 보내는 가장 단순한 형태부터 갑니다.
4. 프롬프트를 이미지로 바꾸는 코드
import os
import discord
from discord import app_commands
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
GUILD_ID = int(os.getenv("GUILD_ID"))
ai_client = OpenAI(api_key=OPENAI_API_KEY)
intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)
guild = discord.Object(id=GUILD_ID)
@client.event
async def on_ready():
await tree.sync(guild=guild)
print(f"로그인 성공: {client.user}")
@tree.command(name="이미지생성", description="프롬프트로 이미지를 생성합니다.", guild=guild)
@app_commands.describe(prompt="이미지 생성 프롬프트")
async def generate_image(interaction: discord.Interaction, prompt: str):
await interaction.response.defer()
result = ai_client.images.generate(
model="gpt-image-1",
prompt=prompt,
size="1024x1024",
)
image_base64 = result.data[0].b64_json
file = discord.File(fp=discord.utils._BytesIO(base64.b64decode(image_base64)), filename="generated.png")
await interaction.followup.send(content=f"프롬프트: {prompt}", file=file)
if not TOKEN or not OPENAI_API_KEY:
raise ValueError("환경변수 설정이 비어 있습니다.")
client.run(TOKEN)
위 예제는 이미지 생성 결과를 파일로 변환해 보내는 기본형입니다.
실제로는 `base64`와 `io.BytesIO` import를 같이 넣어야 합니다.
5. 빠뜨리기 쉬운 import
위 코드 맨 위에 아래 두 줄을 추가해야 합니다.
import base64
from io import BytesIO
그리고 파일 생성 부분은 아래처럼 바꾸면 됩니다.
file = discord.File(fp=BytesIO(base64.b64decode(image_base64)), filename="generated.png")
처음에는 이런 import 누락으로 자주 멈춥니다.
6. 짧은 프롬프트부터 출력 확인
python main.py
`/이미지생성 prompt:노을이 지는 바다 위 고양이`처럼 실행해 봅니다.
이미지가 생성돼 채널에 올라오면 정상입니다.
7. 응답 대기와 비용 제한에서 막히는 부분
- 호출은 되는데 이미지가 안 올라오는 경우
base64처리나BytesIOimport 누락을 먼저 봅니다. - 비용이 너무 빨리 느는 경우 이미지 생성은 텍스트보다 비용 체감이 크므로 전용 채널이나 역할 제한을 둬야 합니다.
- 응답이 오래 걸리는 경우 정상일 수 있습니다.
먼저defer()로 응답 유예를 걸어 둬야 합니다.
8. 이벤트 채널과 같이 쓰기 좋다
이미지 생성은 혼자 쓰는 기능보다 이벤트와 묶을 때 체감이 더 큽니다.
짧은 프롬프트 대회, 썸네일 시안 뽑기, 주간 이미지 이벤트처럼 응용하기 쉽습니다.
이벤트 운영은 디스코드 이벤트 채널 기획법과 같이 보면 좋습니다.
9. 상시 운영과 사용량 제한을 같이 본다
이미지 생성은 남용되기 쉽습니다.
역할 제한, 채널 제한, 하루 호출 횟수 제한 같은 기준을 둬야 합니다.
실운영용 배포가 필요하다면 24시간 디스코드 봇 무료 호스팅, 디스호스트처럼 상시 실행 환경도 같이 준비해야 합니다.
10. 이미지 출력 뒤에는 읽기 기능과 채널 분리를 붙인다
이미지 생성이 됐다면 다음에는 업로드된 이미지를 읽고 설명하는 Vision 기능으로 넘어갈 수 있습니다.
그 전에 AI 호출 구조를 다시 보고 싶다면 디스코드 요약 봇 만들기와 디스코드 번역 봇 만들기을 같이 보면 됩니다.
'봇 개발 팁 > Discord.py' 카테고리의 다른 글
| 디스코드 번역 봇 만들기 (0) | 2026.05.18 |
|---|---|
| 디스코드 경제 봇 만들기 (0) | 2026.05.16 |
| 디스코드 출석 체크 봇 만들기 (0) | 2026.05.14 |
| 디스코드 레벨링 봇 만들기 (0) | 2026.05.13 |
| 초대 링크 추적 디스코드 봇 만들기 (0) | 2026.05.09 |