Akzus
Akzus

Reputation: 29

Discord.js Cannot Read property 'run' of undefined

Im created a bot for discord using Discord.js, and every time I try to run my Bal command through my command handler it rejects it with the error Cannot read property 'run' of undefined

here is my code for Index.js

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

const db = require("@replit/database")

const client = new Discord.Client();

const token = process.env.TOKEN;

const keep_alive = require('./keep_alive.js')

const PREFIX = "orb ";

const fs = require('fs');

const activities_list = [
    "orb help.", 
    `${client.guilds.cache.size} servers!`,
    "n 3^o7 !"
];

client.commands = new Discord.Collection();

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

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

client.on('ready', () => {
  console.log("Orbitus online");
    setInterval(() => {
        const index = Math.floor(Math.random() * (activities_list.length - 1) + 1);
        client.user.setActivity(activities_list[index], { type: 'WATCHING' });
    }, 30000);
});

//Command Handler\\
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 === 'bal'){
        client.commands.get('bal').run(message, args, Discord);
    }
});


client.login(token);

And here is my code for Bal.js

module.exports.run = async (message, args, Discord) => {
  if(!message.content.startsWith(PREFIX))return;  

  let user = message.mentions.members.first() || message.author;

  let bal = db.fetch(`money_${message.guild.id}_${user.id}`)

  if (bal === null) bal = 0;

  let bank = await db.fetch(`bank_${message.guild.id}_${user.id}`)
  if (bank === null) bank = 0;

  let moneyEmbed = new Discord.RichEmbed()
  .setColor("#FFFFFF")
  .setDescription(`**${user}'s Balance**\n\nPocket: ${bal}\nBank: ${bank}`);
  message.channel.send(moneyEmbed)
};

I really need help because I want to continue development on my bot. Thanks for your time

Upvotes: 1

Views: 99

Answers (1)

TYPICAL NINJA
TYPICAL NINJA

Reputation: 150

so uuh , i think you should follow the official guide:

https://discordjs.guide/command-handling/

your's seems bit similar but maybe got from yt (etc)

anyway the issue is you dont export name from Bal.js only run (function)

module.exports.run = .....

and as name is undefined your here setting undefined as the key with your run function to client.commands (collection)

for(const file of ecocommandFiles){
    const command = require(`./ecocommands/${file}`);
 
    client.commands.set(command.name, command);
                          ^^^^^^^^

}

now only key in the client.commands collection is undefined

client.commands.get('bal') this will come undefined as there is not command called bal in your collection (only undefined)

what you could do is add module.exports.name = 'bal' into bal.js

every command from now on should have this (if you decide to use this way)

Again I would suggest you read the discord.js official guide as it very beginner friendly and has a command handler and dynamic command handling tutorials with additional features, I will leave the links down below if you need them :)

Links

Official-docs: Click-here

official guide (this is the official guide for beginners with d.js): Click-here

Command-Handling (guide): Click-here

Dynamic-Command-Handling(guide) : Click-here

Additional-Features) (guide): Click-here

Other guides:

Event handling (from the same official guide): Click-here

An-idiots-Guide (use jointly with the official guide): Click-here

Upvotes: 1

Related Questions