Команда Discord bot snipe «Не удается прочитать свойство ‘get’ неопределенного»

#discord #discord.js

#Discord #discord.js

Вопрос:

Я пытаюсь разработать команду snipe для моего бота discord, поэтому я пошел и посмотрел учебник о том, как это сделать, но я всегда натыкаюсь на эту проблему, независимо от того, что я пытаюсь сделать, чтобы ее исправить. Есть ли какая-либо причина, по которой это может произойти? Всплывающая ошибка: «Не удается прочитать свойство’get’ неопределенного». Любая помощь будет оценена, спасибо!

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

module.exports = {
    name: "snipe",
    description: "Recover a deleted message from someone.",
    execute (bot, message, args) {
      const msg = bot.snipes.get(message.channel.id)
      if (!msg) return message.channel.send(`That is not a valid snipe...`);
      const embed = new Discord.MessageEmbed()
        .setAuthor(msg.author.tag, msg.author.displayAvatarURL({ dynamic: true, size: 256 }))
        .setDescription(msg.content)
        .setFooter(msg.date);
      if (msg.image) embed.setImage(msg.image);
      message.channel.send(embed);
    }
};
  

Edit: bot.snipes is defined here

 bot.snipes = new Discord.Collection();

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

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    bot.commands.set(command.name, command);
}

bot.on('ready', () => {
    console.log('THE WORST BOT IN THE WORLD IS READY TO FAIL AGAIN!');
    bot.user.setActivity('WUNNA FLOW', {type: "LISTENING"})
    
});

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

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

    if (command === 'anmar') {
        bot.commands.get('anmar').execute(message, args);
    } else if (command === 'mar') {
        bot.commands.get('anmar').execute(message, args);
    } else if (command === 'fishe') {
        bot.commands.get('fishe').execute(message, args);
    } else if (command === 'ran') {
        bot.commands.get('ran').execute(message, args);
    } else if (command === 'help') {
        bot.commands.get('help').execute(message, args);
    } else if (command === 'snipe') {
        bot.commands.get('snipe').execute(message, args);
    }

});

bot.on("messageDelete", message => {
    bot.snipes.set(message.channel.id, message);
});

bot.login (botconfig.token);
  

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

1. Привет, добро пожаловать в Stack Overvfow! Похоже bot.snipes undefined , что это так, не могли бы вы предоставить код, в котором bot.snipes он определен?

2. @cherryblossom Я отредактировал его, чтобы показать, что bot.snipes это было определено в моем основном файле бота.

3. Как вы выполняете команды? Убедитесь, что вы передаете bot в качестве первого аргумента execute .

4. @cherryblossom Я отредактировал его, чтобы показать, как я их запускаю, это ненадежный способ их запуска, но я планирую скоро его пересмотреть, и я исправлю эту проблему прямо сейчас!

Ответ №1:

Проблема заключается в том, что вы вызываете execute :

 bot.commands.get('snipe').execute(message, args);
  

Здесь вы передаете message вместо bot в качестве первого аргумента, когда ваша execute функция ожидает 3 аргумента: bot , message , и args .

Используйте это вместо:

 bot.commands.get('snipe').execute(bot, message, args);
  

Кроме того, вы можете реорганизовать свои команды, чтобы получить bot из message :

 execute (message, args) {
  const bot = message.client;
  // rest of code...
}
  
 bot.commands.get('snipe').execute(message, args);