Discord.js+Axios调用报错:TypeError: Cannot read properties of undefined (reading 'ephemeral')
问题分析与解决方案
错误原因
你遇到的TypeError: Cannot read properties of undefined (reading 'ephemeral'),本质是getRandomCat()函数没有返回有效的Promise或回复内容,而是返回了undefined。因为axios.get是异步操作,你的getRandomCat函数没有正确返回异步操作的结果,导致interaction.reply()接收到undefined,Discord.js在处理这个无效参数时抛出了错误。
修正方案
方案1:使用async/await重构代码
将getRandomCat改为异步函数,并在execute中等待它的结果:
const { SlashCommandBuilder } = require('discord.js'); const axios = require('axios'); module.exports = { data: new SlashCommandBuilder() .setName('cat2') .setDescription('Random cat'), async execute(interaction) { try { const catUrl = await getRandomCat(); await interaction.reply(catUrl); } catch (err) { console.error('err: ', err); await interaction.reply('获取猫咪图片失败了😢'); } }, }; async function getRandomCat() { const res = await axios.get('https://api.thecatapi.com/v1/images/search'); return res.data[0].url; }
方案2:让函数返回Promise
如果不想用async/await,也可以让getRandomCat直接返回axios.get的Promise,然后在execute中处理:
const { SlashCommandBuilder } = require('discord.js'); const axios = require('axios'); module.exports = { data: new SlashCommandBuilder() .setName('cat2') .setDescription('Random cat'), async execute(interaction) { getRandomCat() .then(catUrl => interaction.reply(catUrl)) .catch(err => { console.error('err: ', err); interaction.reply('获取猫咪图片失败了😢'); }); }, }; function getRandomCat() { return axios.get('https://api.thecatapi.com/v1/images/search') .then(res => res.data[0].url); }
关键说明
- 异步函数必须正确返回Promise或使用
await等待结果,否则会传递undefined给interaction.reply,引发Discord.js的内部错误。 - 添加错误处理逻辑,避免请求失败时机器人无响应或报错。
内容的提问来源于stack exchange,提问作者ellen
相关产品推荐
相关产品推荐

