我正在尝试创建一个选项,有自动完成,但工作超过25个选择,我已经看到其他机器人这样做,我只是失去了我将如何能够做到这一点。我已经有基本的自动完成设置,它只是不允许我添加超过25个选择。我使用discord.js v14(我有28个选项添加rn,它只与25虽然工作。泰提前!)
if (interaction.options.getSubcommand() === "botanical" ) {
const focusedOption = interaction.options.getFocused(true);
let choices;
if (focusedOption.name === 'search') {
choices = ['agrimony', 'allspice', 'almond', 'aloe', 'anise', 'apple', 'avocado', 'basil', 'bayLaurel', 'bergamot', 'birch', 'calendula', 'cardamom', 'chamomile', 'cinnamon', 'comfrey', 'hemp', 'lavender', 'mint', 'motherwort', 'mugwort', 'rose', 'rosemary', 'sage', 'thyme', 'valerian', 'vervain', 'yarrow', 'valerian', 'vervain', 'yarrow'];
}
const filtered = choices.filter(choice => choice.startsWith(focusedOption.value));
await interaction.respond(
filtered.map(choice => ({ name: choice, value: choice })),
);
}
3条答案
按热度按时间a8jjtwal1#
你所拥有的实际上已经非常接近能够实现你想要的功能;现在你需要做的就是将过滤后的数组切片,最多只显示25个,这样它就不会在初始时产生错误:
可能有一种更紧凑的方式可以编写上面的代码,但为了回答这个问题,我已经将切片部分与一个额外的
options
变量集成在一起,以维护上面已经编写的内容。希望这有帮助!
附录:
您可能还想做的其他事情是通过在filter函数中执行类似
focusedOption.value.toLowerCase()
的操作来使focusedOption
不区分大小写。webghufk2#
答案很简单,你不能这么做,Discord有25个选项的限制,你无法绕过这个限制,也无法在一个选择器中添加超过25个选项
2lpgd9683#
我最终找到了一个discord.py解决方案,如果其他人正在寻找它,它非常相似。
当使用rps_autocomplete函数来设置命令的选项时,你可以将它设置为一次只显示25个过滤数组。我现在可以有100多个自动完成选项和计数。
然后,您可以通过调用rps_autocomplete函数来设置命令中的选项:
您也可以将选项设置为列表而不是.json,但我发现如果它有点长,它会占用命令文件上一些不必要的空间。