Ошибка типа: не удается прочитать свойство «пользователи» неопределенного значения с помощью Discordjs v12

#javascript #node.js #discord #discord.js #typeerror

#javascript #node.js #Discord #discord.js #ошибка типа

Вопрос:

Я работаю над ботом JavaScript Discord (v12.4.0) и пытаюсь создать команду channelinfo, но у меня ошибка при определении и поиске свойств message.channel.

Это channelinfo.js

 const { MessageEmbed } = require("discord.js")

module.exports = {
  name: "channelinfo",
  cooldown: 5,
  aliases: ["ci", "infochannel"],
  description: "Displays info about a channel!",
  guildOnly: true,
  execute(client, message, args) {
  
  const Discord = require("discord.js")

//Definimos discord.

// const channel = message.mentions.channels.first() || message.guild.channels.cache.find(x => x.id == args[0])

//Definimos el canal del cual sacaremos informacion. Obteniendo el primer canal mencionado o la primera id.
    
//if (!channel) return message.reply("You must enter a channel!")
//Si  no menciono un canal o no puso una id, retorna.


//Definimos el embed que enviaremos
 const cha = new Discord.MessageEmbed()
    
   .addField(`Name:`, `- ${Discord.Util.escapeMarkdown(message.channel.name)}`)

//Obtenemos el nombre del canal.

    .addField(`Mention:`, `- `${message.channel}``)

//Un simple ejemplo de como se menciona este.

    .addField(`ID:`, `- ${message.channel.id}`)

//Se obtiene la id del canal.

    .addField(`Type`, `- ${message.channel.type}`)

//Obtenemos el tipo de canal, noticias, texto, voz etc
    
     .addField(`Is it nsfw?`, `${message.channel.nsfw}`)

//Revisamos si el canal es nswf, mediante un boolean (false | true)

    .addField(`Topic:`, `- ${message.channel.topic.toString().length < 1 ? "There's no topic" : message.channel.topic}`)

//Se obtiene el tema del canal, si el contenido es menor a 1 caracter (Se hace esto por que a veces se buguean los temas) retorne a "No hay un tema."
//Si hay un tema, lo envia.
   
    .addField(`Category:`, `- ${message.channel.parent.name}`)
 
//Obtenemos la categoria en el que esta el canal.
    
    .setColor("RANDOM") //Color(?
    
    message.channel.send(cha)

}}
  

И это ошибка журнала консоли

 2020-10-26T13:29:59.413677 00:00 app[worker.1]:     TypeError: Cannot read property 'channel' of undefined
2020-10-26T13:29:59.413677 00:00 app[worker.1]:     at Object.execute (/app/commands/channelinfo.js:26:72)
  

Сначала я попытался добавить const, который получит канал с упоминанием или с идентификатором. Код был таким:

 const channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]) || message.channel;
  

Поскольку это не сработало, я попытался определить канал только как message.channel (const channel = message.channel), но у меня была та же ошибка.

Затем я стер строку const и использовал message.channel вместо channel файлов для встраивания, но я все равно получаю ту же ошибку.

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

Любопытство: я попытался выполнить аналогичную команду, но отобразить информацию о роли, и ошибка была той же (TypeError: не удается прочитать свойство ‘roles’ undefined)

Вот bot.js

 // require fs para el command handler
const fs = require('fs'); 
// require the discord.js module
const Discord = require('discord.js');

       const { token, prefix, yt_api_key } = require('./config.json');
// create a new Discord client
const client = new Discord.Client();


      
fs.readdir("./events/", (err, files) => {
  if (err) return console.error(err);
  files.forEach(file => {
    const event = require(`./events/${file}`);
    let eventName = file.split(".")[0];
    client.on(eventName, event.bind(null, client));
  });
});


client.noprefixcommands = new Discord.Collection();

fs.readdir("./noprefixcommands/", (err, files) => {
  if (err) return console.error(err);
  files.forEach(file => {
    if (!file.endsWith(".js")) return;
    let props = require(`./noprefixcommands/${file}`);
    let noprefixcommandName = file.split(".")[0];
    client.noprefixcommands.set(noprefixcommandName, props);
  });
});



client.commands = new Discord.Collection();

const cooldowns = 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.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

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

    const command = client.commands.get(commandName)
        || client.commands.find(cmd => cmd.aliases amp;amp; cmd.aliases.includes(commandName));

    if (!command) return;
    
    if (command.guildOnly amp;amp; message.channel.type === 'dm') {
    return message.reply('I can't execute that command inside DMs!');
}
    
          if (command.args amp;amp; !args.length) {
            let reply = `You didn't provide any arguments, ${message.author}!`;

        if (command.usage) {
            reply  = `nThe proper usage would be: `${prefix}${command.name} ${command.usage}``;
        }

        return message.channel.send(reply);
    }

       if (!cooldowns.has(command.name)) {
        cooldowns.set(command.name, new Discord.Collection());
    }
    const now = Date.now();
    const timestamps = cooldowns.get(command.name);
    const cooldownAmount = (command.cooldown || 3) * 1000;
    if (timestamps.has(message.author.id)) {
        const expirationTime = timestamps.get(message.author.id)   cooldownAmount;
        if (now < expirationTime) {
            const timeLeft = (expirationTime - now) / 1000;
            return message.reply(`please wait ${timeLeft.toFixed(1)} more second(s) before using the `${command.name}` command.`);
        }
    }
    timestamps.set(message.author.id, now);
    setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
    
try {
    command.execute(message, args);
} catch (error) {
    console.error(error);
    message.reply('there was an error trying to execute that command!');
}
});


client.login(process.env.BOT_TOKEN);
  

Я использую Github для редактирования кода и Heroku для размещения.

У меня возникла эта проблема, когда я начал создавать команду в Glitch, но я вернулся на Github, и проблема была похожа на сбой.

Пожалуйста, кто-нибудь, помогите, я был бы очень благодарен

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

1. Ошибка означает, что у вас где-то есть someObject.users в вашем коде, и someObject она не определена. Однако в вашем вопросе отсутствует соответствующая строка.

2. @ChrisG Поэтому я должен добавить bot.js файл

3. Ошибка содержит номер файла и строки, в которых она возникает. Однако, похоже, это не соответствует файлу кода / скрипта в вашем вопросе.

4. Я предполагаю, что это потому, что подпись функции есть execute(client, message, args) , но вы вызываете ее как command.execute(message, args); . Имя не имеет значения, важен только порядок параметров.

5. Спасибо! Я удалил client его из command.execute(<>) , и теперь он работает. Действительно спасибо, чувак