I’m trying to make the bot say the name of someone I pinged and give that person a role. Right now, if you don’t ping someone, the whole bot breaks.
Here is my code:
const taggedUser0 = msg.mentions.members.first();
if (!args.length) {
msg.author.send(`You didn't ping, ${msg.author}!`);
msg.delete(); // Deletes command
} else if (msg.member.roles.holds(role)) {
// checks if the person mentioned already has a role
return;
} else {
taggedUser0.roles.add(role); // adds role
}
msg.author.send(`${taggedUser0}.`);
msg.delete(); // Deletes command
}
Advertisement
Answer
I see a few problems with your code:
First of all, else if() will always return an error.
if (false) console.log(false) else if () console.log(true) // wrong usage
if (false) console.log(false) else console.log(true) // correct usage
Second of all, you should switch this if statement:
if (!args.length) // to: if (!taggedUser0)
Someone could have added an arg and still not have mentioned anyone.
Third of all, GuildMember.roles returns a Manager, not a Collection, so make sure you pass through the cache property:
taggedUser0.roles.cache.holds()
Also, Collection.holds() is not a function. Instead, use Collection.has() (and make sure the passed parameter is the role ID, not the role object):
taggedUser0.roles.cache.has('ID Here');
Lastly, to ping someone, you should use this format:
message.channel.send(`<@${taggedUser0.id}>`);