DiscordJS v14 Slash命令选项取决于选项



我想制作一个Discord斜杠命令,您需要先选择一个选项,然后再选择另一个选项。

但是,根据最初做出的选择(在选择1中(,选择2中的选项/值正在改变。

这可能吗?

示例:/command choice1 choice2

如果我选择";A";在CCD_ 2中;一个";以及";两个";作为选择中的选择。但是当我选择";B";在choice1中;三个";以及";四个";作为CCD_ 4选项。

谨致问候,

Paul

选项是预先确定的值,在注册命令时设置,并且不能在后面更改。

动态改变选项选择的方式是通过";自动完成;或者根据情况;子命令";也可以工作。

为了设置自动完成以根据其他值进行更改,您需要访问选项1的interaction.options.get(choice2)和选项2的interaction.options.get(choice1)(此处的交互将是自动完成交互(

这里有一个例子:

client.on('interactionCreate', async interaction => {
if (!interaction.isAutocomplete()) return;
if (interaction.commandName === 'command') {
const focusedOption = interaction.options.getFocused(true);
let choices;
if (focusedOption.name === 'option1') {
choices = ["A", "B"];
}
if (focusedOption.name === 'option2') {
let option1 = interaction.options.get('option1')?.value;
if (option1 === "A") {
choices = ["One", "Two"];
}
else if (option1 === "B") {
choices = ["Three", "Four"];
}
else {
choices = ["One", "Two", "Three", "Four"];
}
}
const filtered = choices.filter(choice => choice.startsWith(focusedOption.value));
await interaction.respond(
filtered.map(choice => ({ name: choice, value: choice })),
);
}
});

与所有交互一样,您必须在3秒内做出响应。但是您不能推迟自动完成交互,所以我建议.catch()在出现错误时使用交互响应。

请参阅此处了解更多信息:

[1]https://discordjs.guide/interactions/autocomplete.html

[2]https://discord.js.org/#/docs/main/main/class/AutocompleteInteraction

最新更新