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

如何解决discord.js代码中的TypeError: Cannot read property 'client' of undefined错误?

解决Discord.js中VoiceChannel实例化错误并获取语音频道成员

嗨,我来帮你搞定这个问题!你遇到的TypeError: Cannot read property 'client' of undefined错误,根源在于你手动创建了VoiceChannel实例,但Discord.js的VoiceChannel类需要依赖已有的服务器和客户端数据来初始化,不能直接用new Discord.VoiceChannel()创建空实例。

错误原因分析

当你执行let voice = new Discord.VoiceChannel()时,这个构造函数需要传入客户端和频道数据作为参数,你没传的话,内部就找不到guild.client,自然就抛出了这个错误。你真正需要做的是获取发送命令的用户当前所在的语音频道,而不是凭空创建一个频道对象。

修正后的代码

把你ladder命令的代码替换成下面这段:

client.on('message', function(msg){
  if(msg.content[0] === '>'){
    if(msg.content.slice(1)==='ladder'){
      // 获取发送命令的用户所在的语音频道
      const voiceChannel = msg.member.voice.channel;
      
      if(!voiceChannel){
        // 用户不在任何语音频道里
        msg.reply("你需要先加入一个语音频道才能使用这个命令哦!");
        console.log("Error: 用户未加入语音频道");
      } else{
        // 获取语音频道的成员集合
        const members = voiceChannel.members;
        
        // 将成员转换为用户名数组(方便输出)
        const memberNames = members.map(member => member.user.tag);
        
        console.log("当前语音频道成员:", memberNames);
        // 也可以把成员列表发送到文本频道
        msg.channel.send(`当前语音频道成员列表:\n${memberNames.join('\n')}`);
      }
    }
  }
});

关键知识点说明

  • msg.member.voice.channel:这个属性会返回发送消息的用户当前所在的语音频道,如果用户没在任何语音频道,就会返回undefined。
  • voiceChannel.members:这是一个Collection对象,包含了该语音频道里的所有成员(包括机器人自己),你可以用map、forEach等方法来遍历处理。
  • 权限注意:确保你的机器人有查看语音频道和发送消息的权限,否则可能无法正常获取成员或发送回复。

额外提示

如果你使用的是Discord.js v13及以上版本,message事件已经被messageCreate替代,不过你的代码看起来是v12版本,所以上面的代码可以直接运行。如果之后升级版本,记得把client.on('message', ...)改成client.on('messageCreate', ...)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:52:31