.awaitMessageComponent() 在一个短暂的回复中,然后编辑它

.awaitMessageComponent() in an ephemeral reply and then editing it

我一直在尝试根据 discord.js 指南实现一个交互收集器,但该指南没有解释太多内容,而且我从其他来源拼凑起来的碎片也不适合组合在一起。这是 guide:

中的示例
message.awaitMessageComponent({ filter, componentType: 'SELECT_MENU', time: 60000 })
    .then(interaction => interaction.editReply(`You selected ${interaction.values.join(', ')}!`))
    .catch(err => console.log(`No interactions were collected.`));

我花了一天时间才弄清楚您可以像这样定义一条消息 object:

message = await interaction.channel.send(content: 'text', components: >select menu<)

这适用于 运行 .awaitMessageComponent() 并从 select 菜单中获取输入,但是 interaction.editReply() 给出错误:INTERACTION_NOT_REPLIED

此外,无论如何我都需要它作为回复,但是 message = await interaction.reply(content: 'text', components: >select menu<) 留下 message 未定义,所以我当然不能 运行 .awaitMessageComponent() 它。

所以我不明白我应该做什么来完成那个指南正在做的事情。 如果您对此问题有任何见解,我将不胜感激。

不幸的是,所有其他指南(通常是关于收藏家的)也以 .send() 消息开始,大多数其他资源都让我头疼,因为我没有 coding/scripting.[=25 的真正背景=]

编辑:

正如 Malik Lahlou 指出的那样,您可以通过包含 fetchReply: 选项来分配回复,如下所示:

message = await interaction.reply({ components: [select menu], fetchReply: true })

然而,这仍然不允许指南的代码 运行(错误 INTERACTION_NOT_REPLIED,所以经过更多的研究,我终于找到了使用 .awaitMessageComponent() 的方法并应用于指南的例如它看起来像这样:

await interaction.reply({ components: [select menu], ephemeral: true });

const collectedSelect = await interaction.awaitMessageComponent({ filter, componentType: 'SELECT_MENU', time: 60000 })
    .then(interaction => interaction.editReply(`You selected ${interaction.values.join(', ')}!`))
    .catch(err => console.log(`No interactions were collected.`));

简单回答,回复互动时添加fetchReply选项:

const message = await interaction.reply({
//  content : ...,
//  components : ...,
  fetchReply: true
})

另一种方法是在等待回复后使用 interaction.fetchReply,但最好直接将其作为参数提供,因此 discord.js 会为我们做这些事情:D 这是 [=] 上的示例12=]