Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

discord.js "TypeError: Cannot read property 'execute' of undefined" with async function in command file

I’m trying to add a command code under the command file, but i’m unable to get it to work. The problem arises at this line => if (command == ‘checkin’ || command == ‘ch’) {
client.commands.get(‘chk’).execute(message)
.

Without that line, the code works fine with the other 2 commands. I think it has to do with the async function but I’m not sure how to solve this problem. I don’t want to include the whole chunk of code in the main file either, as it gets very long and cluttered. I’m new to coding, so it might be something I can’t understand yet – please help me!

bot.js (the main .js file)

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

const { token, prefix } = require('./config.json');
const fs = require('fs');
const db = require('quick.db');
const ms = require('parse-ms-2')
const { Client, Intents, Message, Collection } = require("discord.js");
const client = new Client({
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MESSAGES
    ]
});

client.commands = new Discord.Collection();

// filter commands 
const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'));

// fetch commands
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);

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

client.once("ready", () => {
    console.log("online.");
    client.user.setPresence({ activties: [{ name: 'with commands' }] });
})



client.on('messageCreate', async message => {
    // definite command components
    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase()

    if (command == 'help' || command == 'h') {
        client.commands.get('help').execute(message)
    }

    if (command == 'bal') {
        client.commands.get('bal').execute(message)
    }

    if (command == 'checkin' || command == 'ch') {
        client.commands.get('chk').execute(message)
    }
})

client.login(token)

chk.js (where the command is)

const db = require('quick.db')
const nm = require('parse-ms-2')

module.exports = {
    name: "check in",
    descrption: "daily check in rewards.",
    async execute(message) {
    let user = message.mentions.users.first() || message.author;
    let daily = await db.fetch(`daily_${message.author.id}`);
    let money = db.fetch(`money_${user.id}`);
    let cooldown = 1000*60*60*20
    let amount = Math.floor(Math.random() * 500) + 250

        if (daily != null && cooldown - (Date.now() - daily) > 0) {
            let time = ms(cooldown - (Date.now() - daily));
            message.channel.send(`You have already collected the daily check in reward, please check in again in **${time.hours}h ${time.minutes}m ${time.seconds}s**`)
        } else {
            let embed = new Discord.MessageEmbed()
            .setTitle('Daily Check In')
            .setDescription(`Here is the amount collected today: ${amount}`)
            .setColor('#ffc300')
            message.channel.send({embeds: })

            db.add(`money_${message.author.id}`, amount)
            db.add(`daily_${message.author.id}`, Date.now())
        }
}}

>Solution :

Cannot read property 'execute' of undefined"

Means client.commands.get('chk') is returning undefined.
Presumably, this means the chk command can’t be found.

So, let’s look at where you’re setting the commands:

// fetch commands
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);

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

And let’s check your chk.js file which is being imported.

module.exports = {
    name: "check in",
    // ...

What I can see is, you’re exporting the module and setting the command with the name "check in" but later in the script, you’re asking for a command called "chk". The command can’t be found, returns undefined, and kills your code as it isn’t handled.

The solution in this case is to just change your name property to "chk", or request client.commands.get("check in") instead.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading