Discord机器人报错:ReferenceError: Client未定义,求解决方案
解决Discord机器人的ReferenceError: Client is not defined错误
错误原因
你代码里的核心问题是没正确引入discord.js库并赋值给变量。第一行的require('discord.js')只是加载了库,但没把它存到变量里,导致后面调用Discord.Client()时,Discord这个变量根本不存在,所以抛出ReferenceError: Client is not defined。
另外,你的代码还用到了discord.js旧版本的API(比如createChannel、voiceChannelID),如果用的是v12及以上版本,这些API已经被废弃,会导致新的错误,下面一起修正。
修正后的代码
// 正确引入discord.js并赋值给Discord变量 const Discord = require('discord.js'); const client = new Discord.Client(); client.once('ready', () => { console.info('Bot started.'); }); client.on('voiceStateUpdate', (oldState, newState) => { // 跳过机器人用户 if (newState.user.bot || oldState.user.bot) return; // 用户进入指定创建频道时,生成专属语音频道 if (newState.channelId === process.env.voiceID) { newState.guild.channels.create(newState.user.username, { type: 'GUILD_VOICE', parent: process.env.categoryID }).then(createdChannel => { // 将用户移动到新创建的频道 newState.member.voice.setChannel(createdChannel); }).catch(err => { console.error('创建频道出错:', err); }); } // 用户离开频道后,如果频道为空且属于指定分类,删除频道 if (oldState.channel) { const filter = channel => channel.parentId === process.env.categoryID && channel.id !== process.env.voiceID && channel.id === oldState.channelId && channel.members.size === 0; oldState.guild.channels.cache.filter(filter).forEach(channel => { channel.delete().catch(err => { console.error('删除频道出错:', err); }); }); } }); client.login(process.env.BOT_TOKEN);
关键修改点
- 第一行新增
const Discord = require('discord.js'),把库赋值给变量,才能正常调用Discord.Client() - 替换旧API:
createChannel→channels.createvoiceChannelID→channelIdsetVoiceChannel→member.voice.setChannel- 语音频道类型从
"voice"改为"GUILD_VOICE"(v12+要求) channels.get→ 使用channels.cache(v12+缓存机制变化)
- 增加错误捕获(
.catch),方便排查创建/删除频道时的问题 - 变量名改为小驼峰(
Old→oldState,New→newState),符合JS编码规范
内容的提问来源于stack exchange,提问作者distortgeek
相关产品推荐
相关产品推荐

