Discord机器人开发:如何向点击非本人触发按钮的用户发送ephemeral消息
功能实现方案
该功能完全可实现,你之前的写法只差对点击交互的正确响应逻辑:按钮触发的交互实例本身支持直接回复仅点击用户可见的ephemeral消息,不需要走私信通道。
修正后可运行代码
const collector = message.createMessageComponentCollector({ componentType: "BUTTON", time: 15000}); collector.on("collect", collected => { // 校验点击用户是否为原始请求者 if(collected.user.id !== interaction.user.id){ // 直接回复仅点击用户可见的提示,和Dank Memer效果一致 collected.reply({ content: "此菜单不属于你", ephemeral: true }); return; } // 原始请求者的正常交互逻辑 if(collected.customId === "confirm"){ collected.deferUpdate(); // 消耗本次交互,避免按钮显示交互失败 interaction.followUp("Success"); }else{ collected.deferUpdate(); interaction.followUp("Ignore"); } });
关键逻辑说明
- 每一次按钮点击都会生成独立的
ButtonInteraction实例(即代码中的collected对象) - 调用该实例的
reply方法时,将ephemeral参数设为true,返回的消息就只有点击按钮的用户本人可见 - 所有收集到的交互必须给出响应,否则用户端会弹出「交互失败」的报错:非目标用户直接返回ephemeral提示即可,目标用户如果不需要额外操作提示,可以用
collected.deferUpdate()静默消耗本次交互
效果示例

内容的提问来源于stack exchange,提问作者OOPS Studio
相关产品推荐
相关产品推荐

