You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Discord Bot调用DALL-E生成图片时出现“Failed to generate image”错误的解决办法

问题排查与修复方案

1. 缺失asyncio模块导入

代码中使用了asyncio.TimeoutError但未导入asyncio模块,会触发运行时NameError导致流程中断。
修复:在导入区添加:

import asyncio

2. JSON请求体格式错误

通过字符串拼接生成请求体的方式存在致命问题:如果用户输入包含双引号、换行等特殊字符,会直接破坏JSON结构,导致OpenAI API返回错误。
修复:改用json.dumps()生成合法JSON:

data = json.dumps({
    "model": "image-alpha-001",
    "prompt": text,
    "num_images": 1,
    "size": "1024x1024",
    "response_format": "url"
})

3. OpenAI API认证方式错误

当前用auth=("", api_key)传递密钥不符合OpenAI规范,正确做法是在请求头中添加Authorization字段。
修复:更新请求头并移除错误的auth参数:

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

resp = requests.post(
    "https://api.openai.com/v1/images/generations",
    headers=headers,
    data=data
)

4. Discord Intents权限不足

discord.py v1.5+需要显式开启message_content意图,否则机器人无法接收用户消息内容。当前仅开启members意图会导致wait_for('message')无法捕获输入。
修复:更新intents设置:

intents = discord.Intents.default()
intents.members = True
intents.message_content = True  # 新增该行

同时需在Discord开发者门户的Bot页面,手动开启"Message Content Intent"开关。

5. 错误信息缺失(无法定位问题)

当前仅返回模糊的失败提示,无法知晓API返回的具体错误原因(如密钥无效、提示词违规、额度不足等)。
修复:在错误分支添加详细错误反馈:

if resp.status_code != 200:
    error_details = resp.json()
    await ctx.send(f"生成图片失败:{error_details['error']['message']}")
    print(f"API错误详情:{error_details}")
    return

完整修复后的代码

import os
import json
import requests
import asyncio  # 新增导入

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
intents.message_content = True  # 开启消息内容意图

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

@bot.command(name='create')
async def create_image(ctx):
    await ctx.send("What text would you like to generate an image for?")

    def check(m):
        return m.author == ctx.author and m.channel == ctx.channel

    try:
        text_msg = await bot.wait_for('message', check=check, timeout=60.0)
    except asyncio.TimeoutError:
        await ctx.send("Timed out, please try again.")
        return

    prompt_text = text_msg.content
    api_key = os.environ.get("API_KEY")

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    data = json.dumps({
        "model": "image-alpha-001",
        "prompt": prompt_text,
        "num_images": 1,
        "size": "1024x1024",
        "response_format": "url"
    })

    resp = requests.post(
        "https://api.openai.com/v1/images/generations",
        headers=headers,
        data=data
    )

    if resp.status_code != 200:
        error_details = resp.json()
        await ctx.send(f"生成图片失败:{error_details['error']['message']}")
        print(f"API错误日志:{error_details}")
        return

    response_data = resp.json()
    image_url = response_data['data'][0]['url']

    await ctx.send(image_url)

bot.run('TOKEN')

内容的提问来源于stack exchange,提问作者prophetdev771

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:05:46