我试图创建一个斜杠命令/test3
,它带有一个选项input
,这个选项有很多选择,但是我想从一个异步函数中获取这些选择,但是我尝试的方法不起作用。
下面是生成参数列表简化版本的代码,格式为tools.js
module.exports = {
getArgumentList: () => getArgumentList()
}
async function getArgumentList(){
return [
{name: '1', value:'One'},
{name: '2', value:'Two'},
{name: '3', value:'Three'},
{name: '4', value:'Four'},
{name: '5', value:'Five'}
]
}
以及命令的代码(test3.js
)
const { SlashCommandBuilder } = require("discord.js");
const { getArgumentList } = require("../tools.js")
module.exports = {
data: new SlashCommandBuilder()
.setName('test3')
.setDescription('Test command for commands with options.')
.addStringOption(option =>
getArgumentList()
.then(list => option.setName('input')
.setDescription('The input to echo back.')
.setChoices(...list) )),
async execute(interaction){
console.log('Testing')
}
}
这里我得到这个错误:
ExpectedValidationError: Expected
at InstanceValidator.handle
...
at Module._load (node:internal/modules/cjs/loader:922:12) {
validator: 's.instance(V)',
given: Promise { <pending> },
expected: [Function: SlashCommandStringOption]
}
Node.js v18.13.0
有什么好的办法吗?
2条答案
按热度按时间uurity8g1#
.then()
函数总是返回一个promise,所以你不能把它设置为.addStringOption()
的返回值,使用async/await会使这一点变得更简洁和容易。hmmo2u0o2#
重构你的命令系统,让data成为一个函数,然后在你的slash命令部署脚本中(或者你之前使用data属性的地方)等待它,这样你就可以把data修改成这样:
斜线命令部署脚本示例:
如果需要,您还可以将默认的SlashCommandBuilder传递给data函数:
一个二个一个一个