You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.create
    • voiceChannelID → channelId
    • setVoiceChannel → member.voice.setChannel
    • 语音频道类型从"voice"改为"GUILD_VOICE"(v12+要求)
    • channels.get → 使用channels.cache(v12+缓存机制变化)
  • 增加错误捕获(.catch),方便排查创建/删除频道时的问题
  • 变量名改为小驼峰(Old→oldState,New→newState),符合JS编码规范

内容的提问来源于stack exchange,提问作者distortgeek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:06:26