Discord.js TypeError: не удается прочитать имя свойства undefined

const botconfig = require("./botconfig.json");
const tokenfile = require("./token.json");
const Discord = require("discord.js");
const fs = require("fs");
const bot = new Discord.Client({disableEveryone: true});
bot.commands = new Discord.Collection();

fs.readdir("./commands/", (err, files) => {

  if (err) console.info(err);

  let jsfile = files.filter(f => f.split(".").pop() === "js")
  if (jsfile.length <= 0){
    console.info("Couldn't find commands.");
    return;
  }

  jsfile.forEach((f, i) =>{
    let props = require(`./commands/${f}`);
    console.info(`${f} loaded!`);
    bot.commands.set(props.help.name, props);
  });

});


bot.on("ready", async () => {
  console.info(`${bot.user.username} is online on ${bot.guilds.size} servers!`);

  bot.user.setActivity("!help | website.xyz", {type: "WATCHING"});

  //bot.user.setGame("on SourceCade!");
});

bot.on("message", async message => {
  if (message.author.bot) return;
  if (message.channel.type === "dm") return;

  let prefix = botconfig.prefix;
  let messageArray = message.content.split(" ");
  let cmd = messageArray[0];
  let args = messageArray.slice(1);

  let commandfile = bot.commands.get(cmd.slice(prefix.length));
  if (commandfile) commandfile.run(bot,message,args);

});

bot.login(tokenfile.token);

Это моя индексная папка, когда я пытаюсь запустить бота, я получаю эту ошибку. Я пробовал все, но я не лучший в этом, так как я все еще учусь, поэтому любая помощь будет принята с благодарностью! Спасибо

C:\Users\Luca\Desktop\DiscordJS\RedHQ-Bot\index.js:21
    bot.commands.set(props.help.name, props);
                                ^

TypeError: Cannot read property 'name' of undefined
    at jsfile.forEach (C:\Users\Luca\Desktop\DiscordJS\RedHQ-Bot\index.js:21:33)
    at Array.forEach (<anonymous>)
    at fs.readdir (C:\Users\Luca\Desktop\DiscordJS\RedHQ-Bot\index.js:18:10)
    at FSReqWrap.oncomplete (fs.js:135:15)
[nodemon] app crashed - waiting for file changes before starting...

Как выглядит командный файл?

Jonas Wilms 31.03.2018 18:06

Это означает, что у объекта ur prop нет клавиши справки.

sridhar.. 31.03.2018 18:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
14 699
3

Ответы 3

Существует проблема с props.help, потому что он возвращает undefined (ключ «help» не существует в реквизитах) в качестве сообщения об ошибке. Вероятно, вам следует точно проверить, что вы назначаете реквизитам.

Когда вы обращаетесь к свойству свойства, вы должны добавить проверку для первого свойства.

Ваш props.help - это undefined. undefined не является объектом Javascript, и поиск свойства name на undefined завершится ошибкой.

Если вы попытаетесь найти свойства undefined, вы получите ошибку TypeEror.

Object.getOwnPropertyNames(undefined)
// prints 'Uncaught TypeError: Cannot convert undefined or null to object'

Тем более, что вы читаете несколько файлов и получаете доступ к полям в этих файлах, вам следует позаботиться о том случае, если файл имеет неправильный формат или файл был неправильно прочитан и т. д.

jsfile.forEach((f, i) =>{
  let props = require(`./commands/${f}`);
  console.info(`${f} loaded!`);
  if (props.help && props.help.name) {
    bot.commands.set(props.help.name, props);
  } else {
    console.error(`file ${f} does not have .help or .help.name property!`);
});

ваш обработчик команд не имеет

exports.conf = {
  aliases: ['Stuff', 'AlsoStuff']
  };
  exports.help = {
  name: "More Stuff", description: "SillyStuff.", usage: ".SeriousStuff"
  }

Вот почему вам возвращается ошибка "Имя не найдено". Потому что в коде, где он ищет, его нет.

Другие вопросы по теме