当前位置: 首页 > 知识库问答 >
问题:

节点。js Discord机器人类型错误:无法读取未定义的“voice”的属性

姚臻
2023-03-14

这是我的整个命令代码,问题是当我移动所有人123132123123(示例通道id)时。该命令工作正常,但给我一个错误(节点:317)UnhandledPromisejectionWarning:TypeError:无法读取未定义的的属性“voice”。我一直在尝试。catch()错误,但它仍然会给我该错误。每当我返回成员时。嗓音setChannel(`${move}`) 。错误停止了,但也只是出于某种原因让我感动。。。

if (command === 'move') {
  if (!message.member.permissions.has("MOVE_MEMBERS")) return message.channel.send(':x: **You do not have the permission to use this command!**');
  const args = message.content.slice(prefix.length).trim().split(/ +/g);
  const command = args.shift().toLowerCase();
  const mem = message.mentions.members.first()
  let move = args[1]; // Remember arrays are 0-based!.
  let move2 = args[2];
  let idcheckchannel1 = client.channels.cache.get(move)
  let idcheckchannel2 = client.channels.cache.get(move2)
  if (!args[0]) return message.channel.send('Please mention user and voice channel ID/IDs')
  if (!args[1]) return message.channel.send('Please mention voice channel ID/IDs')

  if(args[0] === 'everyone' && !move2) {
    if (!idcheckchannel1) return message.channel.send('Please use a valid voice channel ID')
    let channel = message.guild.channels.cache.get(message.member.voice.channel.id);
    for (const [memberID, member] of channel.members)
      member.voice.setChannel(`${move}`);
  }

  if (!mem.voice.channel) return message.channel.send('User is not in voice channel')

  if (!move2) {
    if (!idcheckchannel1) return message.channel.send('Please use a valid voice channel ID')
    mem.voice.setChannel(`${move}`)
  } else {
    if (!idcheckchannel1) return message.channel.send('Please use a valid voice channel ID')
    if (!idcheckchannel2) return message.channel.send('Please use a valid voice channel ID')
    mem.voice.setChannel(`${move}`)
    mem.voice.setChannel(`${move2}`)
  }
}

共有2个答案

松新
2023-03-14

频道。成员返回一个集合,而不是一个数组,因此数组分解将不起作用。即使有,每个元素的第一个属性也不是memberIDmember

此外,您还创建了一个新的通道变量,即使您已经拥有通道对象。

// let channel = message.guild.channels.cache.get(message.member.voice.channel.id);
// for (const [memberID, member] of channel.members)
//  member.voice.setChannel(`${move}`);
// };

for (const member of message.member.voice.channel.members) 
 member.voice.setChannel(move);
江瀚昂
2023-03-14
匿名用户

如果message.mentions.members是空的,那么mem可能是un定义的。在使用mem之前,您应该检查它是否未定义。

试试这个:

if (command === 'move') {
  if (!message.member.permissions.has("MOVE_MEMBERS")) return message.channel.send(':x: **You do not have the permission to use this command!**');
  const args = message.content.slice(prefix.length).trim().split(/ +/g);
  const command = args.shift().toLowerCase();
  const mem = message.mentions.members.first()
  let move = args[1]; // Remember arrays are 0-based!.
  let move2 = args[2];
  let idcheckchannel1 = client.channels.cache.get(move)
  let idcheckchannel2 = client.channels.cache.get(move2)
  if (!args[0]) return message.channel.send('Please mention user and voice channel ID/IDs')
  if (!args[1]) return message.channel.send('Please mention voice channel ID/IDs')

  if(args[0] === 'everyone' && !move2) {
    if (!idcheckchannel1) return message.channel.send('Please use a valid voice channel ID')
    let channel = message.guild.channels.cache.get(message.member.voice.channel.id);
    for (const [memberID, member] of channel.members)
      member.voice.setChannel(`${move}`);
  }

  if (mem != null) { // << ensure that mem is not undefined
    if (!mem.voice.channel) return message.channel.send('User is not in voice channel')

    if (!move2) {
      if (!idcheckchannel1) return message.channel.send('Please use a valid voice channel ID')
      mem.voice.setChannel(`${move}`)
    } else {
      if (!idcheckchannel1) return message.channel.send('Please use a valid voice channel ID')
      if (!idcheckchannel2) return message.channel.send('Please use a valid voice channel ID')
      mem.voice.setChannel(`${move}`)
      mem.voice.setChannel(`${move2}`)
    }
  }
}

 类似资料:
  • 我的代码: 错误: 未处理PromisejectionWarning:TypeError:无法读取未定义的未处理PromisejectionWarning:未处理的promise拒绝的属性“forEach”。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。(拒绝id:1)(节点:7188)[DEP0018]弃用警告:未处理的promise

  • 我试图使一个对话框弹出每当我得到一个错误从myerrorhandler我可以看到调用,但不是 这是我的错误消息。 错误类型错误:无法读取未定义的属性'openDialogTEST' 奇怪的是,如果我用按钮调用它,一切都很好。这是我的课程: usertable.component.ts auth.service.ts myerrorHandle.ts 对话框.component.ts 完整错误消息:

  • 我想在我的角度项目中添加钢系列。我有createad html-compass组件,但我收到了这个错误: _services错误类型错误:无法读取未定义的属性(读取主题)在ProjectService…/app/Subject.js:53/_next(node_modules)在_esm5__tryOrUnsub[EventEmitter.push.](node_modules)在_esm5…/c

  • 我正在选择area_enninFantry的所有子div,并循环调整某些子div的文本。cardArray是一个全局常量,myId在父函数中定义。 未捕获的TypeError:无法读取未定义的属性(读取“getAttribute”) 我在这篇文章中读到,这可能是因为字段/元素的内容可能是DOM元素,我应该用$()包装它们,所以我确实这样做了——将两个变量都更改为$(元素)[a]. attr(“标题

  • 我遇到了一个有趣的问题,这使我感到困惑。我正在执行一个正确返回数据的Sharepoint RestAPI调用,当我在数据上运行for循环时,它生成html,但仍然抛出我用作标题的错误。代码如下。如果我记录每个循环,它将返回值。HTML也可以很好地工作。问题是错误仍然会出现。

  • 尝试使用< code>getAuth请求来存储令牌。请求不调用API并抛出错误。 TypeError:无法在HttpHeaders.push处读取undefined的属性(读取“length”)../node _ modules/@ angular/common/Fe sm5/http . js . http headers . apply update(http . js:199)at http