TypeError: Cannot read property 'cache' of undefined - Fixing needed

Viewed 5434

I made a user info command and one of the things I would like to show is the roles of the member. But for some odd reason, I am getting a TypeError: Cannot read property 'cache' of undefined.

Please help me and my code is listed below for reference. Thanks!

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;
}
2 Answers

This is because user.roles is undefined.

You can use a safe fallback by changing your Roles line to the following:

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

This is because users do not have roles. only GuildMembers do. If you want to get the first mentioned member, use message.mentions.members.first(). Users represent worldwide discord users, while GuildMembers are members of specific guilds.

Related