.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=]
我一直在尝试根据 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=]