使用discord.js开发AI机器人时遭遇405 Method Not Allowed错误
解决Discord机器人调用OpenAI API时的405 Method Not Allowed错误
错误原因分析
你的generate-images命令触发405错误,核心问题集中在以下几点:
1. 认证头格式错误
你在请求头中写的"Authorization": "Bearer (My OpenAI Key Its Correct)"包含多余括号,OpenAI的认证头要求严格格式为Bearer 你的密钥字符串,多余符号会导致认证失败,服务器因此拒绝请求。
2. API响应处理错误
OpenAI图片生成API的返回结构为{ data: [{ url: "图片链接" }] },你直接将整个response.data对象传给interaction.reply是无效的,Discord要求回复内容为字符串或符合格式的配置对象。
3. 异步方法未正确等待
interaction.reply是异步方法,未添加await会导致未处理的Promise异常,可能掩盖真实错误。
修正后的generate_images.js代码
const { SlashCommandBuilder } = require("discord.js"); const axios = require("axios"); module.exports = { data: new SlashCommandBuilder() .setName("generate-images") .setDescription("Generate High Quality AI Images Using The Best Model!") .addStringOption((option) => option.setName("prompt").setDescription("Prompt").setRequired(true) ), async execute(interaction) { const promptInput = interaction.options.getString("prompt") ?? "Make an image of a person sitting on a bench and holding a 404 banner"; try { const response = await axios.post( "https://api.openai.com/v1/images/generations", { model: "dall-e-3", prompt: promptInput, n: 1, size: "1024x1024", }, { headers: { "Content-Type": "application/json", // 替换为你的实际OpenAI密钥,不要加括号或多余符号 "Authorization": "Bearer 你的OpenAI密钥", }, } ); // 提取返回结果中的图片链接 const imageUrl = response.data.data[0].url; // 异步回复用户 await interaction.reply({ content: imageUrl }); } catch (error) { console.error(error); await interaction.reply({ content: "生成图片时发生错误。", ephemeral: true }); } }, };
额外检查事项
- 确认你的OpenAI密钥拥有DALL-E 3的使用权限,且账户余额充足。
- 确保已正确安装axios依赖(执行
npm install axios)。 - 检查Discord机器人在目标频道是否拥有发送消息的权限。
内容的提问来源于stack exchange,提问作者Ayan Shekhar
相关产品推荐
相关产品推荐

