Dylan Corcoran
Dylan Corcoran

Reputation: 17

TypeError: Cannot read property 'send' of undefined discord.js v12

i have this reaction role system everything works up to the last part where the coulour slection happens

      async run(message, client, con) {
    await message.channel.send("Give the color for the embed.")
        answer = await message.channel.awaitMessages(answer => answer.author.id === message.author.id,{max: 1});
        var color = (answer.map(answers => answers.content).join()).toUpperCase()
        if(color.toUpperCase()==='CANCEL') return (message.channel.send("The Process Has Been Cancelled!"))
    function embstr(){
        var finalString = '';
        for(var i =0;i<n;i++){
            
            finalString += b[i]+ ' - '+a[i] +'\n';
        }
        return finalString;
    }
    const botmsg = message.client.channels.cache.get(channel => channel.id === reactChannel)
    
    const embed = new MessageEmbed()
        .setTitle(embtitle)
        .setColor(color)
        .setDescription(embstr());
        
        botmsg.send(embed);
        message.channel.send("Reaction Role has been created successfully")
    

   

here is the error message

{
  "stack": "TypeError: Cannot read property 'send' of undefined
    at SlowmodeCommand.run (B:\\stuff\\Downloads\\Admeeeeeen bot\\src\\commands\\reactionroles\\createreactionrole.js:100:22)
    at processTicksAndRejections (node:internal/process/task_queues:93:5)"
}

Upvotes: 0

Views: 36

Answers (1)

Itamar S
Itamar S

Reputation: 1565

The .get() method takes in a snowflake as its parameter. AKA an ID of a certain object. It is not an iterator, meaning that what you're currently attempting to do is not right JavaScript wise.

Instead of passing in a parameter to represent a channel object, we'll just want to pass in the ID of the channel that we'd like to get. Alternatively, you could replace .get() with .find() there, which is in fact an iterator that uses this form of a callback, although it's insufficient in our case considering we can just use .get() which is more accurate when it comes to IDs.

    /**
    * Insufficient code:
    * const botmsg = message.client.channels.cache.find(channel => channel.id === reactChannel)
    */
    const botmsg = message.client.channels.cache.get(reactChannel /* assuming that reactChannel represents a channel ID */)


Upvotes: 1

Related Questions