NunuTheOni
NunuTheOni

Reputation: 9

Giving roles on discord

I'm making a discord murder mystery bot.

const Discord = require('discord.js');
const client = new Discord.Client();

client.on("message", (message) => {
    msg = message.content.toLowerCase();

    if (message.author.bot) {
        return;
    }
    mention = message.mentions.users.first();

    if (msg.startsWith("kill")) {
        if (mention == null) {
            return;
        }
        message.delete();
        mention.send('you are dead');
        message.channel.send("now done");
    }
});
client.login('my token');

What would I add to the code so after the person who was tagged got there role changed from alive to dead?

Upvotes: 0

Views: 70

Answers (1)

Lauren Yim
Lauren Yim

Reputation: 14098

// First, make sure that you're in a guild
if (!message.guild) return;

// Get the guild member from the user
// You can also use message.mentions.members.first() (make sure that you check that
// the message was sent in a guild beforehand if you do so)
const member = message.guild.members.cache.get(mention.id);

// You can use the ID of the roles, or get the role by name. Example:
// const aliveRole = message.guild.roles.cache.find(r => r.name === 'Alive');
const aliveRole = 'alive role ID here';
const deadRole = 'dead role ID here';

// You can also use try/catch with await if you make the listener and async
// function:
/*
client.on("message", async (message) => {
  // ...
  try {
    await Promise.all([
      member.roles.remove(aliveRole),
      member.roles.add(deadRole)
    ]);
  } catch (error) {
    console.error(error);
  }
})
*/
Promise.all([
  member.roles.remove(aliveRole),
  member.roles.add(deadRole)
]).catch(console.error);

The Promise.all means that the promises for adding and removing the roles are started at the same time. A promise is an object that can resolve to a value or reject with an error, so the .catch(console.error) logs all errors. I recommend that you handle errors for message.delete(), mention.send('you are dead'), and message.channel.send("now done") as well.

For more information on member.roles.remove() and member.roles.add(), see the documentation for GuildMemberRoleManager.

Upvotes: 1

Related Questions