如何在discord.js消息嵌入中显示本地图片?附件返回undefined排查
问题描述
我正在开发支持角色抽取功能的半抽卡Discord机器人,需要在用户完成抽卡操作后展示对应角色的图片,但目前遇到图片完全无法显示的问题。我查找过看似有效的同类解决方案但问题仍未解决,运行时没有任何报错,无法定位问题。
我首先尝试打印MessageAttachment的返回结果,测试代码如下:
const attachment = new Discord.MessageAttachment('./chars/1.Jakku.png', '1.Jakku.png'); console.log(attachment);
运行后打印结果为undefined,我已确认正确导入了discord.js库,以下是与问题相关的核心代码片段:
collector.on('collect', reaction => { // 新建embed const newEmbd = new Discord.MessageEmbed(); // 抽卡逻辑 if (reaction.emoji.name === '✅') { const values = Object.values(chars); const randomChar = values[parseInt(Math.floor(Math.random()*values.length))]; const attachment = new Discord.MessageAttachment('./chars/1.Jakku.png', '1.Jakku.png'); const charData = randomChar.split('.'); newEmbd .setTitle(`你抽取到了:${charData[1]}!`) .setColor('YELLOW') .attachFiles(attachment) .setImage(`attachment://1.Jakku.png`); embdReact.edit(newEmbd); pulled = true; } else if (reaction.emoji.name === '❌') { newEmbd .setTitle('抽卡时间到!') .setColor('YELLOW') .addFields( { name: '结果:', value: '你选择了放弃抽卡' } ); embdReact.edit(newEmbd); }; });
问题原因与解决步骤
本次问题的两个核心根源:
MessageAttachment构造后返回undefined:当前所用discord.js版本中该构造函数不存在,或导出链路异常- 附件传入方式不兼容当前版本:discord.js v13及以上版本已彻底移除
MessageEmbed类的attachFiles方法,附件不能绑定在embed对象上,需直接传入消息的编辑/发送参数
按以下步骤修改即可解决:
- 先确认当前项目的discord.js版本,在项目根目录执行
npm list discord.js查看版本号- 若为v13及以上版本,直接按后续步骤修改代码即可
- 若为v12及以下版本,先检查discord.js包安装是否完整,避免导入路径错误导致构造函数未定义
- 调整抽卡分支的代码逻辑,移除embed上的
attachFiles调用,改为在编辑消息时通过files参数传入附件:// 替换原有抽卡分支中的对应代码 const attachment = new Discord.MessageAttachment('./chars/1.Jakku.png', '1.Jakku.png'); const charData = randomChar.split('.'); newEmbd .setTitle(`你抽取到了:${charData[1]}!`) .setColor('YELLOW') .setImage(`attachment://1.Jakku.png`); // 编辑消息时同时传入embed数组和文件数组 embdReact.edit({ embeds: [newEmbd], files: [attachment] }); - 校验图片路径有效性:
./chars/1.Jakku.png的路径是相对于node进程启动的工作目录,而非代码文件所在目录,可在构造附件前先确认文件是否存在,避免路径错误导致附件加载失败
内容的提问来源于stack exchange,提问作者Wowy
相关产品推荐
相关产品推荐

