【问题标题】:TypeError: Cannot read property 'cache' of undefined - Fixing neededTypeError:无法读取未定义的属性“缓存” - 需要修复
【发布时间】:2020-07-24 11:17:51
【问题描述】:

我做了一个用户信息命令,我想展示的一件事是成员的角色。但出于某种奇怪的原因,我收到了TypeError: Cannot read property 'cache' of undefined

请帮助我,我的代码列在下面以供参考。谢谢!

case 'whois': {
  const embed = new Discord.MessageEmbed()
  var user = message.mentions.users.first()            
  if(!args[1]) return message.reply('Apologies! Please specify a particular member!');

  embed.setTitle('User Information')
  embed.addField('Username', user.username)
  embed.addField('User ID', user.id)
  embed.addField('User Tag', user.tag)
  embed.addField('Roles:', user.roles.cache.map(r =>`${r}`).join(' | '))
  embed.addField('Created at:', user.createdAt)             
  embed.setColor(0x00FF93)
  embed.setThumbnail(user.avatarURL())
  embed.setFooter('Generated by Salty!')
  message.channel.send(embed);
  break;
}

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    这是因为 user.roles 未定义。

    您可以通过将 Roles 行更改为以下内容来使用安全后备:

    embed.addField('Roles:', user.roles ? user.roles.cache.map(r =>`${r}`).join(' | ') : '')
    

    【讨论】:

    • 这并不完全需要,正确的GuildMember 对象将始终具有roles 属性。有问题的错误来自他们使用User 对象而不是GuildMember
    • 另外,我不认为roles?.cache 是正确的方法,因为没有迹象表明OP 使用TypeScript,并且根据node.green,它甚至在Node 14.0.0 中也不可用。
    【解决方案2】:

    这是因为用户没有角色。只有公会成员会这样做。如果要获取第一个提到的成员,请使用 message.mentions.members.first()。用户代表全球 Discord 用户,而 GuildMembers 是特定公会的成员。

    【讨论】:

    • 如果您指出这一点,您还可以解释如何解决它。解决问题的正确方法是使用var member = message.mentions.members.first() 而不是var user = message.mentions.users.first(),当然用下面的member 替换user,以免出现member is not defined 错误。
    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 2021-02-27
    • 2019-11-26
    • 1970-01-01
    • 2019-08-19
    • 2020-07-23
    • 2021-10-03
    • 2021-10-28
    相关资源
    最近更新 更多