1
votes

I am currently coding a discord bot reaction roles command.

Everything is running smoothly but I have one issue.

When I boot the bot and run the command to create the embed, everything works fine. The issue is when I react to the message it doesn't give me the role. Here is my code:

module.exports = {
    name: "reactionrole",
    description: "Sets up a reaction role message!",
    async execute(message, args, Discord, client) {
        const channel = "751217304733351976";
        const yellowTeamRole = message.guild.roles.cache.find((role) => role.name === "ROBLOX");
        const blueTeamRole = message.guild.roles.cache.find((role) => role.name === "Minecraft");
        const redTeamRole = message.guild.roles.cache.find((role) => role.name === "MinecraftBedrock");

        const yellowTeamEmoji = "798904223755927562";
        const blueTeamEmoji = "798904030553440257";
        const redTeamEmoji = "798904121544540181";

        let embed = new Discord.MessageEmbed()
            .setColor("#e42643")
            .setTitle("Choose the games you play!")
            .setDescription("Choosing a game will ping you when others want to play with you!\n\n" + `ROBLOX\n` + `Minecraft\n` + "Minecraft Bedrock");

        let messageEmbed = await message.channel.send(embed);
        messageEmbed.react(yellowTeamEmoji);
        messageEmbed.react(blueTeamEmoji);
        messageEmbed.react(redTeamEmoji);

        client.on("messageReactionAdd", async (reaction, user) => {
            if (reaction.message.partial) await reaction.message.fetch();
            if (reaction.partial) await reaction.fetch();
            if (user.bot) return;
            if (!reaction.message.guild) return;

            if (reaction.message.channel.id == channel) {
                if (reaction.emoji.name === yellowTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.add(yellowTeamRole);
                }
                if (reaction.emoji.name === blueTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.add(blueTeamRole);
                }
                if (reaction.emoji.name === redTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.add(redTeamRole);
                } else {
                    return;
                }
            }
        });

        client.on("messageReactionRemove", async (reaction, user) => {
            if (reaction.message.partial) await reaction.message.fetch();
            if (reaction.partial) await reaction.fetch();
            if (user.bot) return;
            if (!reaction.message.guild) return;

            if (reaction.message.channel.id == channel) {
                if (reaction.emoji.name === yellowTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(yellowTeamRole);
                }
                if (reaction.emoji.name === blueTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(blueTeamRole);
                }
                if (reaction.emoji.name === redTeamEmoji) {
                    await reaction.message.guild.members.cache.get(user.id).roles.remove(redTeamRole);
                } else {
                    return;
                }
            }
        });
    },
};
3

3 Answers

0
votes

Does it give a 0 exit error?

Also check if the Bot's Role is above the Red, blue and yellow role on the role list

0
votes

There are two places where you can grab emojis using discord.js: in the client, and in the guilds. client.emojis is a collection of every emoji the client has access to, and guild.emojis is a collection of the emojis of a specific guild.

const yellowTeamEmoji = client.emojis.get("798904223755927562")

You might also know how to use find to get something with another property - so here, I can get yellowTeamEmoji through its name:

const yellowTeamEmoji = client.emojis.find(emoji => emoji.name === "yellowTeamEmoji");

All the best, Florian.

0
votes

So what you need to do is:

    const reactionEmoji = client.emojis.cache.get("emojiID");
    const reactionEmoji2 = client.emojis.cache.get("emojiID");
    const reactionEmoji3 = client.emojis.cache.get("emojiID");

    const yellowTeamEmoji = "reactionEmoji1";
    const blueTeamEmoji = "reactionEmoji2";
    const redTeamEmoji = "reactionEmoji3";

How to get id of emojis ? The easiest way is to send ,in a test channel, the emoji that you want to set and if you right click on the emoji, at the bottom , it's says "OPEN LINK" . If you open that link in your browser it will show something like this : "https://cdn.discordapp.com/emojis/791979565056000000.png?v=1" You need to copy the numbers in the end and paste is in the section "emojiID"

example:

const reactionEmoji = client.emojis.cache.get("791979565056000000");