【问题标题】:how to fix this problem TypeError: Cannot read property 'roles' of undefined如何解决这个问题 TypeError: Cannot read property 'roles' of undefined
【发布时间】:2020-10-13 22:02:48
【问题描述】:

请帮帮我,我想明天完成这个

if (baru.voiceChannelID === channelid) {
  // const Role = baru.guild.roles.get("724997095236304987");
  let Role = baru.member.roles.some((r) => ["IRON", "BRONZE"].includes(r.name));

  baru.guild
    .createChannel(`${Role.name} | ${baru.user.username}`, "voice")
    .then((tempChannel) => {
      tempChannel.overwritePermissions(baru.guild.id, {
        CONNECT: false,
      });

      tempChannel.overwritePermissions(Role.id, {
        CONNECT: true,
      });
      tempChannel.setParent(kategorikanal);
      baru.setVoiceChannel(tempChannel.id);
      tempChannel.setUserLimit("5");
    })

    .catch(console.error);
}

这是问题代码的主要部分

【问题讨论】:

  • 那么baru 是什么?看起来您将它用作Message 类和Guild 类?
  • music.on('voiceStateUpdate',(lama, baru) => { var state = null;
  • 看起来问题是 baru.member 未定义,请尝试记录 baru 是什么。查看文档,它的 VoiceState 确实有一个成员属性,可能是它没有休假
  • (oldMember, newMember) 喜欢这样吗?
  • 不更改参数名称不会做任何事情,在您的 if 语句之前添加此代码:console.log(baru),并将结果添加到您的帖子中

标签: javascript node.js discord discord.js


【解决方案1】:

Array.prototype.some 返回一个布尔值。

你会得到一个错误,因为布尔值上没有 name 属性。


  baru.guild
    .createChannel(`${Role.name} | ${baru.user.username}`, "voice")

另外,将baru 对象记录到您的控制台,以便您检查它是否具有角色属性。它说它是未定义的。

【讨论】:

  • music.on('voiceStateUpdate',(lama, baru) => { var state = null;
【解决方案2】:

baru.member.roles.some

baru 没有.member,所以无法查找.roles

您是否检查过baru 的数据是否正确?

【讨论】:

  • music.on('voiceStateUpdate',(lama, baru) => { var state = null;
  • console.log baru 并检查它是否有 member 属性
【解决方案3】:

看起来您使用的是 v11,在 v11 中它是 GuildMember 而不是 VoiceState

因此,而不是 baru.member 它只是 baru,您可能应该重命名变量以使其更有意义,例如 oldMembernewMember

所以这里是代码更改:

let Role = baru.member.roles.some((r) => ["IRON", "BRONZE"].includes(r.name));

=>

let Role = baru.roles.some((r) => ["IRON", "BRONZE"].includes(r.name));

此外,您不能使用公会 ID 来覆盖权限,如果您想为所有人更改它,那么您需要使用 @everyone .id:

tempChannel.overwritePermissions(baru.guild.id, {
   CONNECT: false,
})

=>

tempChannel.overwritePermissions(baru.guild.defaultRole.id, {
   CONNECT: false,
})

【讨论】:

  • UnhandledPromiseRejectionWarning: TypeError: Supplied parameter was neither a User nor a Role
  • 那是因为你不能把一个公会的 id 用于覆盖权限,如果你想为每个人覆盖你需要使用 guild.defaultRole.id,编辑我的答案。
  • 那是因为baru.member.roles.some 返回一个布尔值,而不是一个角色。请改用baru.member.roles.find()
  • 我刚刚回答了为什么它是未定义的,也许你没有阅读它,因为它就在你的commnt之前。也没有,问题已经回答了,所以要么学习一些调试,要么单独发帖。
  • 我又遇到了一些错误.createChannel(${Role.name} | ${baru.user.username},"voice") ^ TypeError: Cannot read property 'name' of null
猜你喜欢
  • 2022-10-18
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2020-04-16
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多