部署Discord.js斜杠命令时遇ExpectedValidationError问题求助
Discord.js斜杠命令部署报错:ExpectedValidationError 解决方案
错误原因分析
从报错信息的核心字段可以定位问题:
ExpectedValidationError: Expected validator: 's.instance(V)', given: undefined, expected: [Function: SlashCommandStringOption]
问题出在command0.js的addStringOption和addUserOption方法中——回调函数没有返回配置后的选项对象,导致构建器接收到undefined,不符合SlashCommandStringOption/SlashCommandUserOption的实例验证要求,触发了@sapphire/shapeshift的校验错误。
修复代码
修改command0.js中的选项构建逻辑,确保箭头函数返回配置完成的option对象:
import { SlashCommandBuilder } from "discord.js"; export default { 'data': new SlashCommandBuilder() .setName('add') .setNameLocalizations({ it:'aggiungi', }) .setDescription('Description') .setDescriptionLocalizations({ it:'Descrizione', }) // 修复addStringOption:链式调用后自动返回option .addStringOption(option => option.setName('name') .setNameLocalizations({ it:'nome', }) .setDescription('Name') .setDescriptionLocalizations({ it:'Nome', }) .setRequired(true) ) // 修复addUserOption:同理返回配置后的option .addUserOption(option => option.setName('user') .setNameLocalizations({ it:'utente', }) .setDescription('User to add') .setDescriptionLocalizations({ it:'Utente da aggiungere', }) .setRequired(true) ), 'execute': async function(interaction) { // Execute stuff } };
也可以通过显式返回的方式修复:
.addStringOption(option => { option.setName('name') .setNameLocalizations({ it:'nome' }) .setDescription('Name') .setDescriptionLocalizations({ it:'Nome' }) .setRequired(true); return option; // 显式返回配置后的选项对象 })
额外部署逻辑优化
原部署代码存在两个小问题,建议同步修复:
forEach结合async/await无法等待所有部署请求完成,改用Promise.all确保所有命令部署完成后再执行后续逻辑- 部署时应传递命令的JSON序列化数据,而非直接传递命令对象
修改后的部署代码:
(async () => { try { console.log('Deploying (/) commands'); await Promise.all(client.commands.map(async cmd => { return rest.post( Routes.applicationCommands(process.env.APP_ID), { headers: { 'content-type':'application/json', 'Authorization':`Bot ${process.env.DISCORD_TOKEN}`, }, body: cmd.data.toJSON(), // 传递序列化后的命令数据 }, ); })); console.log('Deployed (/) commands'); } catch (error) { console.error(error); } })();
内容的提问来源于stack exchange,提问作者CcmU
相关产品推荐
相关产品推荐

