VSCode提示Discord.js脚本46-49行不可达,求原因及解决办法
Discord.js脚本中代码不可达的原因及修复方案
不可达代码的核心原因
你标记的代码不可达,直接问题是在它之前的return message.reply("Prosze kogos dac do tej komendy!")语句会直接终止当前分支的执行,再加上if语句嵌套时括号不匹配、结构混乱,导致后续代码被包裹在永远不会触发的代码块里。
除此之外,你的代码还有几个关键错误,会导致逻辑失效甚至运行报错:
代码错误修复步骤
变量声明顺序颠倒
你在定义messageArray之前就尝试提取cmd,会触发ReferenceError:// 错误写法 const cmd = messageArray[0]; const messageArray = message.content.split(" ");修正为:
// 正确顺序 const messageArray = message.content.split(" "); const cmd = messageArray[0];模板字符串使用错误
判断命令时用单引号包裹模板字符串,导致${prefix}不会被解析为变量值:// 错误写法 if (cmd == '${prefix}kick'){改成反引号:
// 正确写法 if (cmd == `${prefix}kick`) {if语句结构与return分支错误
if (!args[0])分支里的return语句没有闭合当前if块,导致后续代码被锁在这个永远不会执行的分支内。同时多个if语句存在括号不匹配问题,修复后的结构如下:if (cmd == `${prefix}kick`) { if (!args[0]) { return message.reply("Prosze kogos dac do tej komendy!"); } // 原不可达代码,现在可正常执行 const member = message.mentions.members.first() || message.guild.members.cache.find(x => x.user.username.toLowerCase() === args.slice(0).join(" ") || x.user.username === args[0]); if (!message.member.permissions.has("KICK_MEMBERS")) { return message.reply("Potrzebujesz moderatora!"); } if (message.member.id === member.id) { return message.reply("Nie wywalaj siebie, lol!"); } if (!message.guild.me.permissions.has('KICK_MEMBERS')) { return message.reply("Nie mam do tego permisji, wezwij admina!"); } member.kick(); message.channel.send(`${member} zostal wywalony z serwera!`); }注意每个
return语句会直接退出当前分支,必须确保每个if块用花括号正确闭合,避免代码结构混乱。
完整修复后的代码
const TOKEN = "hidden" const client = new Discord.Client({ intents: [ "GUILDS", "GUILD_MESSAGES" ] }) client.on("ready", () => { console.log(`Logged in as ${client.user.tag}`) }) client.on("messageCreate", (message) => { const prefix = "!"; let msg = message.content; let channel = message.channelId; // 修正变量声明顺序 const messageArray = message.content.split(" "); const cmd = messageArray[0]; const args = messageArray.slice(1); console.log(message) console.warn(msg) console.log(channel) if(msg == "!sayhi"){ message.channel.send("Hi!") console.log(`Hi command initiated by someone!`) } // 修正模板字符串 if (cmd == `${prefix}kick`){ if (!args[0]){ return message.reply("Prosze kogos dac do tej komendy!"); } // 修复后可正常执行的代码 const member = message.mentions.members.first() || message.guild.members.cache.find(x => x.user.username.toLowerCase() === args.slice(0).join(" ") || x.user.username === args[0]); if (!message.member.permissions.has("KICK_MEMBERS")){ return message.reply("Potrzebujesz moderatora!"); } if (message.member.id === member.id){ return message.reply("Nie wywalaj siebie, lol!"); } if (!message.guild.me.permissions.has('KICK_MEMBERS')){ return message.reply("Nie mam do tego permisji, wezwij admina!"); } member.kick(); message.channel.send(`${member} zostal wywalony z serwera!`); } }) client.login(TOKEN)
内容的提问来源于stack exchange,提问作者Malexz
相关产品推荐
相关产品推荐

