Skip to content

Discord.js remove roles

I have this issue on my bot command. It doesn’t remove any other specified roles other than the first defined one.

if (args[0] === "yes") {
    const exists = users.find((u) => u.name === message.member.user.tag);
    if (!exists) {
        return message.channel.send("You are not registered into a clan.");
    }
    await RegistryModel.findOneAndDelete({ name: message.member.user.tag });

    let gangroles = message.guild.roles.cache.find(role => role.name === "Eliminaries", "Street Legends/Locos", "The Circle", "Critical Killers", "Crime Master", "Brazil Printer Mafia", "Saint Bude", "Communist Party Of Nevada", "The Cola Association", "National Choppa", "Squad Of Skilled", "Myth", "Shelby Family", "Shooters Family Gang", "Terminator", "Century Street Gang", "Phoenix Core", "Knights of Despair", "Garuda Team", "Sando Gang", "Liberators", "Celestial Blue", "Mystic", "Taniman", "Crimson", "Black Blood Mafia", "Crypts", "Terror", "Hydras");
    message.member.roles.remove(gangroles.id).catch(err => console.log(err))
    message.channel.send(registerdone);
}

This is the part where everything is defined.

Answer

Your callback function for find() is incorrect, and actually find() returns the first found element in an array. You could use .filter() to get a collection of elements instead and use the .includes() method to check if the role name is in the list provided.

if (args[0] === 'yes') {
  const exists = users.find((u) => u.name === message.member.user.tag);
  if (!exists) {
    return message.channel.send('You are not registered into a clan.');
  }
  await RegistryModel.findOneAndDelete({ name: message.member.user.tag });

  const list = [
    'Eliminaries',
    'Street Legends/Locos',
    'The Circle',
    'Critical Killers',
    'Crime Master',
    'Brazil Printer Mafia',
    'Saint Bude',
    'Communist Party Of Nevada',
    'The Cola Association',
    'National Choppa',
    'Squad Of Skilled',
    'Myth',
    'Shelby Family',
    'Shooters Family Gang',
    'Terminator',
    'Century Street Gang',
    'Phoenix Core',
    'Knights of Despair',
    'Garuda Team',
    'Sando Gang',
    'Liberators',
    'Celestial Blue',
    'Mystic',
    'Taniman',
    'Crimson',
    'Black Blood Mafia',
    'Crypts',
    'Terror',
    'Hydras',
  ];

  // get a collection of roles that have names included in the list array
  let gangroles = message.guild.roles.cache.filter((role) =>
    list.includes(role.name)
  );
  // remove every matching roles
  gangroles.each((r) => {
    message.member.roles.remove(r.id).catch((err) => console.log(err));
  });

  message.channel.send(registerdone);
}