discord.js v13部署命令调用setChoices触发ZodError如何修复
错误原因
discord.js@v13 对 setChoices() 方法的入参规则做了破坏性变更:仅接受一个由选项配置对象组成的数组作为唯一入参,不再支持v12版本那种把每个选项作为独立参数依次传入的写法。
你当前的代码把3个选项对象拆成独立参数传给方法,方法内部做参数校验时,拿到的第一个入参是单个对象,和要求的数组类型不匹配,就会抛出你看到的Expected array, received object的Zod校验错误。这也是为什么你删掉setChoices()调用后代码就能正常运行。
修复方法
把所有选项包裹在一对方括号里组成数组,作为单个参数传给setChoices()即可:
.addStringOption(option => option.setName('choice') .setDescription('What to do') .setRequired(true) .setChoices([ { name: 'add', value: 'add' }, { name: 'remove', value: 'remove' }, { name: 'list', value: 'list' }, ]) )
避坑提示
- 如果你参考的教程没有标注版本,大概率是v12及更早版本的旧写法,直接照搬就会触发这类参数错误
- 字符串选项的
value值长度不能超过100字符,name长度需要在1-32字符区间内,否则后续部署命令时还会触发API校验报错
内容的提问来源于stack exchange,提问作者TrollBlox
相关产品推荐
相关产品推荐

