JavaScript,Discord.js, Node.js TypeError: Cannot read property ‘execute’ of undefined

Tags: , ,



I’m building a discord bot and I want to save information in bdays.json but this error pops up. All other commands are working just fine but I am getting this error:

TypeError: Cannot read property ‘execute’ of undefined

What should I do?

main.js

const Discord = require('discord.js');

const client = new Discord.Client();

const prefix = '?';

const fs = require('fs');

client.commands = new Discord.Collection();

const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);

    client.commands.set(command.name, command);
}

client.once('ready', () => {
    console.log('Bot is online!');
});

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

    if (command === 'jsidement') {
        client.commands.get('ping').execute(message, args);
    } else if (command === 'help') {
        client.commands.get('help').execute(message, args, Discord);
    } else if (command === 'mute') {
        client.commands.get('mute').execute(message, args);
    } else if (command === 'unmute') {
        client.commands.get('unmute').execute(message, args);
    } else if (command === 'remember') {
        client.commands.get('remember').execute(message, args);
    }
})

client.login('Token');

and remeber.js

module.exports = {
    name: 'remeber',
    description: 'this is a remember command!',
    execute(message, args){
        const fs = require('fs');
        client.bdays = require ('./bdays.json');
        
        client.bdays [message.author.username] = {
            message: message.content
        }
        fs.writeFile('./bdays.json', JSON.stringify (client.bdays, null, 4), err => {
            if(err) throw err;
            message.channel.send('Saved!');
        });
    }
}

What should I do?

Answer

You have a typo in your code…

In remeber.js you give the command the name of remeber but then in your main.js file you use client.commands.get('remember').execute(message, args);

To fix it, use either:

// remember.js
module.exports = {
    name: 'remember',
    description: 'this is a remember command!',
    execute(message, args){
        const fs = require('fs');
        client.bdays = require ('./bdays.json');
        
        client.bdays [message.author.username] = {
            message: message.content
        }
        fs.writeFile('./bdays.json', JSON.stringify (client.bdays, null, 4), err => {
            if(err) throw err;
            message.channel.send('Saved!');
        });
    }
}

Or replace the line with the typo with this instead:

client.commands.get('remeber').execute(message, args);


Source: stackoverflow