Discord.js如何实现bot对自身slash command回复添加表情反应
实现方案
Interaction 本身无反应相关方法,你需要获取交互回复对应的消息实例后调用消息的反应方法即可,具体实现如下:
核心原理
interaction.reply() 配置 fetchReply: true 后会返回 Bot 发送的回复消息对象,该对象自带 react() 方法可直接添加表情反应。
完整修改代码
client.on('interactionCreate', async interaction => { if (!interaction.isCommand()) return; const { commandName } = interaction; const gift = ["Gift 1", "Nothing", "Gift 3", "Nothing", "Gift 5", "Nothing", "Gift 7", "Nothing"] const random = Math.floor(Math.random() * gift.length); if (commandName === 'gift') { if (gift[random] === 'Nothing') { // 获取回复消息实例 const replyMessage = await interaction.reply({ content: "No Luck today!", fetchReply: true }); // 添加哭脸表情反应,可替换为你需要的任意表情 await replyMessage.react('😢'); } else { const replyMessage = await interaction.reply({ content: `Congrats ${interaction.user.username} you won ${gift[random]} !`, fetchReply: true }); // 添加庆祝表情反应 await replyMessage.react('🎉'); } } // calendar指令同理处理 else if (commandName === 'calendar' && gift[random] !== 'Nothing') { const replyMessage = await interaction.reply({ content: `Congrats ${interaction.user.username} you won ${gift[random]} !`, fetchReply: true }); await replyMessage.react('🎉'); } });
注意事项
- 必须添加
fetchReply: true配置,否则旧版本 Discord.js 不会返回完整可操作的消息实例,无法调用反应方法 - 若使用自定义表情,直接传入表情的数字ID即可,无需额外拼接符号
- 所有异步操作都需要添加
await关键字,避免出现异步抛出未捕获错误
内容的提问来源于stack exchange,提问作者T_0
相关产品推荐
相关产品推荐

