Discord机器人启动报错ReferenceError: Client未定义求解决
解决Discord机器人启动时的
ReferenceError: Client is not defined错误 报错信息
ReferenceError: Client is not defined
at Object.(D:\TestBot1\index.js:1:1)
at Module._compile (node:internal/modules/cjs/loader:1239:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1293:10)
at Module.load (node:internal/modules/cjs/loader:1096:32)
at Module._load (node:internal/modules/cjs/loader:935:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:84:12)
at node:internal/main/run_main_module:23:47
错误原因
你的代码开头两行完全无效且错误:
Client._validateOptions(options = this.options) Object.Client;
此时还未引入discord.js模块,Client标识符根本未被定义,程序执行第一行就直接抛出未定义错误。
此外代码还有两处问题:
message.content.startWith("prefix")存在拼写错误,正确方法名是startsWith;同时应该判断是否以你定义的prefix变量开头,而非字符串"prefix"。- 最后一个
if(!message.content.startWith(prefix+"ping"))会导致所有非ping的命令(哪怕是符合前缀的其他命令)都触发错误提示,逻辑不合理。
修正后的代码
const Discord = require("discord.js"); const bot = new Discord.Client(); const token = "TOKEN_HERE"; const prefix = "t/" bot.once("ready", () => { console.log("BOT WENT ONLINE"); }); bot.on("message", message => { if(message.author.bot) return; // 修正拼写错误,判断是否以设定前缀开头 if(!message.content.startsWith(prefix)) return; // 提取前缀后的命令内容 const command = message.content.slice(prefix.length).trim().split(' ')[0]; if(command === "ping"){ message.channel.send("PONG"); } else { // 仅当不是已定义命令时提示错误 message.channel.send("WRONG COMMANDS!"); } }); bot.login(token);
关键修改说明
- 删除开头两行无意义且触发错误的代码,确保先引入
discord.js模块再使用其中的Client类。 - 修正
startsWith拼写错误,正确使用prefix变量判断命令前缀。 - 优化命令判断逻辑:先提取前缀后的命令内容再匹配,避免原逻辑中只要不是
ping就触发错误提示的问题。
内容的提问来源于stack exchange,提问作者IBANG0495
相关产品推荐
相关产品推荐

