0
votes

I made a Discord bot to handle 'reaction roles'. A user can react to a message to get a role.

Now, the embed and the reactions are added, but immediately after, it crashes:

embedMsg.message.react('????') ^

TypeError: Cannot read property 'react' of undefined at Client. (C:\Users\rdvdn\Desktop\Bot\Bot.js:19:34) at Client.emit (events.js:311:20) at MessageCreateAction.handle (C:\Users\rdvdn\Desktop\Bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14) at Object.module.exports [as MESSAGE_CREATE] (C:\Users\rdvdn\Desktop\Bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) at WebSocketManager.handlePacket (C:\Users\rdvdn\Desktop\Bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31) at WebSocketShard.onPacket (C:\Users\rdvdn\Desktop\Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22) at WebSocketShard.onMessage (C:\Users\rdvdn\Desktop\Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10) at WebSocket.onMessage (C:\Users\rdvdn\Desktop\Bot\node_modules\ws\lib\event-target.js:125:16) at WebSocket.emit (events.js:311:20) at Receiver.receiverOnMessage (C:\Users\rdvdn\Desktop\Bot\node_modules\ws\lib\websocket.js:797:20)

I believe the error might be due to v12 of Discord.js. I'm not sure why it crashes but does add the embed and reactions, I would greatly appreciate any help I can get.

My code right now is as follows:

const { Client, MessageEmbed } = require('discord.js');
const client = new Client();
const TOKEN = require('./config.json');

client.login(TOKEN.token);

client.on('ready', () => {
    console.log("Bot is online and ready!")
})

client.on('message', message =>{
    if(message.author.bot)
    {
        if(message.embeds)
        {
            const embedMsg = message.embeds.find(msg => msg.title === 'Application Access');
            if(embedMsg)
            {
                embedMsg.message.react('????')
                .then(reaction => reaction.message.react('????'))
                .catch(err => console.error);
            }
        }
        return;
    }

    if(message.content.toLowerCase() === ']roles')
    {
        const embed = new MessageEmbed();
        embed.setTitle("Application Access");
        embed.setColor("GREEN");
        embed.setDescription("React with the emoji and you will be able to apply for Logistics!\n" +
        "\n" +
        "\???? - Applicant");
        message.channel.send(embed);
    }
})

client.on('messageReactionAdd', (reaction, user) => {
   if(user.bot)
    return;

   var roleName = "Applicant";
   var role = reaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());
   var member = reaction.message.guild.members.find(member => member.id === user.id);

    member.addRole(role.id).then(member => {
        console.log("Added " + member.user.username + " to Applicant.");
    }).catch(err => console.error);
});

client.on('messageReactionRemove', (reaction, user) => {
    if(user.bot)
        return;

        var roleName = "Applicant";
        var role = reaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());
        var member = reaction.message.guild.members.find(member => member.id === user.id);

        if(member.roles.has(role.id))
        {
            member.removeRole(role.id).then(member => {
                console.log("Removed " + member.user.username + " from Applicant role.");
            }).catch(err => console.error);
        }
})

Any help is appreciated!

1

1 Answers

2
votes

message is not a MessageEmbed property, which is why your bot is giving an error.

// change:
const embedMsg = message.embeds.find(
 (msg) => msg.title === 'Application Access'
);

if (embedMsg) {
 embedMsg.message
  .react('📖')
  .then((reaction) => reaction.message.react('📖'))
  .catch((err) => console.error);
}

// to:
if (message.embeds[0].title === 'Application Access') {
 message
  .react('📖') // you can't react to the same message twice
  .catch(console.error);
}

Also, there are many outdated v11.x functions in your code, such as addRole(). I would suggest checking out this post to fix them.