新手开发者遇ValidationError:期望布尔值类型问题求助
Discord.js Slash命令Boolean选项必填设置报错修复
我是一名新手开发者,这是我第一次使用boolean类型,遇到了如下报错,尝试了各种方法都没解决,希望能得到帮助。
出错代码
const { SlashCommandBuilder, PermissionFlagsBits, PermissionsBitField, EmbedBuilder, } = require("discord.js"); const { generateDependencyReport, AudioPlayerStatus, joinVoiceChannel, createAudioPlayer, createAudioResource } = require('@discordjs/voice'); const googleTTS = require("google-tts-api"); const translate = require("google-translate-api-x"); module.exports = { data: new SlashCommandBuilder() .setName(`tts`) .setDescription(`Fai ripetere al bot un messaggio in un canale vocale`) .addStringOption((option) => option .setName("messaggio") .setDescription("Scrivi il messaggio da far ripetere dal bot in vocale") .setRequired(true) ) .addBooleanOption((option) => option .setName("rallentatore") .setDescription("Vuoi che il messaggio sia mandato a rallentatore?") .setRequired("true") // 错误发生位置 ), async execute(interaction, client) { const testo = interaction.options.getString("messaggio"); const slow = interaction.options.getBoolean("rallentatore"); const res = await translate(`${testo}`, {to: aa}); const url = googleTTS.getAudioUrl(testo, { lang: res.from.language.iso, slow: slow, host: 'https://translate.google.com', }); const { generateDependencyReport, AudioPlayerStatus, joinVoiceChannel, createAudioPlayer, createAudioResource } = require('@discordjs/voice'); const voiceChannelId = interaction.member.voice.channel.id const voiceChannel = interaction.member.voice.channel const guildId = interaction.guild.id const player = createAudioPlayer(); const resource = createAudioResource(url); player.play(resource); const connection = joinVoiceChannel({ channelId: voiceChannelId, guildId: guildId, adapterCreator: voiceChannel.guild.voiceAdapterCreator, }); const subscription = connection.subscribe(player); if (subscription) { setTimeout(() => subscription.unsubscribe(), 30_000); } }, };
错误信息
ValidationError: Expected a boolean primitive at BooleanValidator.handle (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\node_modules\@sapphire\shapeshift\dist\index.js:552:71) at BooleanValidator.parse (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\node_modules\@sapphire\shapeshift\dist\index.js:113:88) at validateRequired (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\node_modules\@discordjs\builders\dist\index.js:849:20) at SlashCommandBooleanOption.setRequired (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\node_modules\@discordjs\builders\dist\index.js:962:5) at C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\src\commands\tools\tts.js:26:8 at MixedClass._sharedAddOptionMethod (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\node_modules\@discordjs\builders\dist\index.js:1262:50) at MixedClass.addBooleanOption (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\node_modules\@discordjs\builders\dist\index.js:1233:17) at Object.<anonymous> (C:\Users\Casa\OneDrive\Desktop\Discord\eKicks\eKicks Bot v14\src\commands\tools\tts.js:22:6) at Module._compile (node:internal/modules/cjs/loader:1097:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1149:10) { validator: 's.boolean', given: 'true' }
解决方案
错误根源很明确:setRequired()方法要求传入布尔类型的true或false,但你传入了字符串类型的"true",导致类型校验失败。
只需要修改错误行:
.setRequired("true")
改为:
.setRequired(true)
修改后,setRequired()接收到正确的布尔值参数,就能通过校验,不再抛出ValidationError。
补充说明:在JavaScript中,字符串"true"和布尔值true是完全不同的类型——前者是文本内容,后者是表示真假状态的原始值,很多API会严格校验参数类型,后续使用时要注意区分。
内容的提问来源于stack exchange,提问作者Ema R
相关产品推荐
相关产品推荐

