Ошибка типа: не удается прочитать свойство ‘execute’ неопределенного в discord.js

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

РЕДАКТИРОВАТЬ: эта проблема решена

Я получаю следующую ошибку при попытке выполнить!команда fish в discord:

 TypeError: Cannot read property 'execute' of undefined
    at Client.<anonymous> (C:UsersshaneDesktopDiscordBotmain.js:38:43)
    at Client.emit (events.js:315:20)
    at MessageCreateAction.handle (C:UsersshaneDesktopDiscordBotnode_modulesdiscord.jssrcclientactionsMessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:UsersshaneDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsockethandlersMESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:UsersshaneDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:384:31)
    at WebSocketShard.onPacket (C:UsersshaneDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:UsersshaneDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10)
    at WebSocket.onMessage (C:UsersshaneDesktopDiscordBotnode_moduleswslibevent-target.js:125:16)
    at WebSocket.emit (events.js:315:20)
    at Receiver.receiverOnMessage (C:UsersshaneDesktopDiscordBotnode_moduleswslibwebsocket.js:797:20)
  

Все остальные команды, похоже, работают нормально. Просто «fishCommand» выдает ошибку. fishCommand определяется в fish.js

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('DiscordBot 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 === 'ping'){
        client.commands.get('ping').execute(message, args);
    } else if (command == 'youtube'){
        client.commands.get('youtube').execute(message, args);
    } else if (command == 'yeet'){
        client.commands.get('yeet').execute(message, args);
    } else if (command == 'modtoggle'){
        client.commands.get('modtoggle').execute(message, args);
    } else if (command == 'fish'){
        client.commands.get('fishCommand').execute(message, args);
    } else if (command == 'backpack'){
        client.commands.get('backpack').execute(message, args);
    }
});

client.login('Discord Bot token here');
  

fish.js:

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

// embeds that are picked at random
const rawFish = new Discord.MessageEmbed()
.setColor('#0077be')
.setTitle('You caught a raw fish!')
.setDescription('It has been added to your backpack.')
.setThumbnail('https://vignette.wikia.nocookie.net/minecraft-computer/images/7/77/Raw_Fish.png/revision/latest/scale-to-width-down/340?cb=20130815172634')

const rawSalmon = new Discord.MessageEmbed()
.setColor('#0077be')
.setTitle('You caught a raw salmon!')
.setDescription('It has been added to your backpack.')
.setThumbnail('https://vignette.wikia.nocookie.net/minecraft/images/f/fd/RawSalmonOldTexture.png/revision/latest/window-crop/width/200/x-offset/0/y-offset/0/window-width/201/window-height/200?cb=20200519072953')

const pufferfish = new Discord.MessageEmbed()
.setColor('#0077be')
.setTitle('You caught a pufferfish!')
.setDescription('It has been added to your backpack.')
.setThumbnail('https://static.wikia.nocookie.net/minecraft_gamepedia/images/0/02/Pufferfish_(item)_JE5_BE2.png/revision/latest/scale-to-width-down/150?cb=20191230044452')

const tropicalFish = new Discord.MessageEmbed()
.setColor('#0077be')
.setTitle('You caught a tropical fish!')
.setDescription('It has been added to your backpack.')
.setThumbnail('https://static.wikia.nocookie.net/minecraft_gamepedia/images/a/ad/Tropical_Fish_JE2_BE2.png/revision/latest/scale-to-width-down/150?cb=20191230044408')

const fishTypes = [rawFish, rawSalmon, pufferfish, tropicalFish];

module.exports = {
    name: 'fishCommand',
    description: "Lets the user fish",
    execute(message, args){

        //sends a random embed from fishTypes
        message.channel.send(fishTypes[Math.floor(Math.random() * fishTypes.length)]);
        
       
        }
    }

    var backpack = 0;

 module.exports = {
    name: 'backpack',
    description: "Lets the user see their backpack",
    execute(message, args){

        message.channel.send('Your backpack has '   backpack   ' fish in it.');
           
            }
        }
  

Ответ №1:

Ваш командный файл (fish.js ) имя должно совпадать с именем файла, который получает клиент.

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

Имя файла должно быть ‘fishCommand.js «ИЛИ вы должны написать это как get('fish') .

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

execute не определено, потому что ваш клиент не знает, где оно находится.

Комментарии:

1. На самом деле, в коллекции каждая команда сопоставлена с именем команды из name свойства в файле в качестве ключа; имена файлов не являются проблемой.

2. Спасибо, я ценю помощь, но, похоже, это не решило проблему. Я переименовал файл в «fishCommand.js » как вы и сказали, и я все еще получаю ту же ошибку. Любые другие идеи о том, что может быть причиной этого?

3. @Lioness100 хорошо, я не очень разбираюсь в javascript, и я не профессионал, лол. @Dashanesta можете ли вы попытаться удалить тот module.exports , который выполняет backpack команду? а затем вместо этого создайте файл для backpack команды.

4. @Hons спасибо за предложение, я попробую его позже сегодня, когда у меня будет возможность.

5. Это устранило проблему! Спасибо, ребята, я действительно ценю помощь!