Discord.js V13 发送Embed消息时如何使用message.react添加表情反应
问题原因
message.react()是触发指令的用户消息(Message实例)的方法,不能写在MessageEmbed的链式构造逻辑中,Embed实例本身不具备react方法,你之前写在embed构造里的注释代码本身语法错误。- 原逻辑直接return了reply的执行结果,react调用如果放在return之后不会被执行,需要调整执行顺序。
解决方案
根据你的需求二选一即可:
方案1:对用户发送的指令原消息添加表情(和你注释里的旧逻辑效果一致)
let channel = message.member.voice.channel; if (!channel) { // 先给用户的原消息加表情,非核心逻辑可以加catch吞掉异常避免打断主流程 message.react('🙄').catch(err => {}); // 再返回embed格式的回复 return message.reply({ embeds: [ new MessageEmbed() .setColor('#FFA400') .setDescription(`>>> Please join a voice channel`) .setFooter( `Hey ${message.author.username}`, message.author.displayAvatarURL({ dynamic: true }) ), ], }); }
方案2:对机器人发送的embed回复消息添加表情
注意外层执行函数需要添加async关键字才能使用await语法:
let channel = message.member.voice.channel; if (!channel) { // 等待embed回复发送完成,拿到回复的消息实例 const replyMessage = await message.reply({ embeds: [ new MessageEmbed() .setColor('#FFA400') .setDescription(`>>> Please join a voice channel`) .setFooter( `Hey ${message.author.username}`, message.author.displayAvatarURL({ dynamic: true }) ), ], }); // 给机器人自己发的embed回复添加表情 await replyMessage.react('🙄'); return; }
内容的提问来源于stack exchange,提问作者NewJS
相关产品推荐
相关产品推荐

