Search code examples
javascriptdiscorddiscord.js

Check if the message sender has a specific role


I'm new in Discord bot coding and I want to create a command where the bot only replies if the message sender has a specific role.

According to the discord.js documentation I have to use GuildMemberRoleManager.cache. Sadly, it isn't working.

The whole command looks like this:

client.on('messageCreate', (message) => {
  if (
    message.content.toLowerCase() === prefix + 'test' &&
    GuildMemberRoleManager.cache.has(AdminRole)
  )
    message.reply('test');
});

Solution

  • You should get the author's roles. Only members have roles, so you will need to get the author as a member using message.member. message.member returns a GuildMember and GuildMembers have a roles property that returns a GuildMemberRoleManager (the one you mentioned in your original post).

    Its cache property is a collection of the roles of this member, so you can use its has() method to check if the user has the admin role:

    client.on('messageCreate', (message) => {
      let adminRole = 'ADMIN_ROLE';
      let isAdmin = message.member.roles.cache.has(adminRole);
    
      if (message.content.toLowerCase() === prefix + 'test' && isAdmin)
        message.reply('test');
    });