如何使用discord-button发送ephemeral类型的Discord临时交互回复
实现方案
你现有代码的问题如下:
ephemeral是交互专属属性,仅针对按钮点击的交互回复生效。你调用button.message.channel.send()是向当前频道发送公共消息,无法支持该属性,自然不会生成仅点击者可见的临时回复- 如果你预先调用了
button.reply.defer()延迟回复,需要在defer阶段就指定ephemeral属性,后续再编辑回复内容即可
方案1:无需延迟回复的最简实现
如果你的逻辑没有耗时操作,不需要先显示加载状态,直接调用交互回复方法即可:
client.on('clickButton', async (button) => { if (button.id === 'openTicket') { await button.reply.send('Done', { ephemeral: true }); } });
方案2:需要延迟回复的实现
如果你的逻辑需要先处理耗时操作(比如写入数据库、调用第三方接口等),可以先defer再编辑回复:
client.on('clickButton', async (button) => { if (button.id === 'openTicket') { // 延迟回复时就指定为临时消息 await button.reply.defer({ ephemeral: true }); // 此处可插入你的耗时业务逻辑 // 逻辑处理完成后编辑回复内容 await button.reply.edit('Done'); } });
内容的提问来源于stack exchange,提问作者Arya Anish
相关产品推荐
相关产品推荐

