如何修复“无法读取”“ null”的属性“ id”

时间:2018-12-21 16:02:36

标签: javascript node.js discord.js

我有时会收到此错误消息,导致我的机器人崩溃。
这是控制台中的错误消息:

C:\Users\Administrator\Desktop\FortniteRanked8.5\events\message.js:7
  if(prefixed.hasOwn(message.guild.id)){
                                   ^

TypeError: Cannot read property 'id' of null
    at module.exports (C:\Users\Administrator\Desktop\FortniteRanked8.5\events\message.js:7:36)

问题来自此行:

if (prefixes.hasOwn(message.guild.id)){

设置:

  • Windows Server 2012
  • Discord.js:v11.4.2
  • 节点:v8.11.1

代码:

const Store = require('data-store');

module.exports = (client, message) => {
  var prefixes = new Store({ path: __dirname + '/../prefixes.json' });
  // console.log(prefixes.clone())

  if (message.author.bot) return;

  var prefix = client.config.prefix

  if (prefixes.hasOwn(message.guild.id)){
    prefix = prefixes.get(message.guild.id)
  }

  if (message.content.indexOf(prefix) !== 0) return;

  const args = message.content.slice(prefix.length).trim().split(/ +/g);
  const command = args.shift().toLowerCase();
  const cmd = client.commands.get(command);

  if (!cmd) return;

  if (cmd && !message.guild)
    return message.channel.send("Vous ne pouvez pas faire de commande ici, Merci de faire les commandes directement sur votre serveur discord.");

  cmd.run(client, message, args);
};

4 个答案:

答案 0 :(得分:3)

message.guild为空,然后应检查它是否像message && message.guild && ...一样存在。使用此方法,您可以确保所有字段都存在。

答案 1 :(得分:2)

在使用公会之前先进行检查

if(message.guild && prefixes.hasOwn(message.guild.id))

答案 2 :(得分:0)

如果错误消息显示“无法读取null的属性'id'” ,则表示guild属性存在,但它是{{ 1}}。如前所述,您必须进行检查,但除此之外,还必须检查:为什么 nullguild吗?

如果没有属性,您将得到“无法读取未定义的属性'id'” 作为错误。

答案 3 :(得分:0)

  

您正在访问的Guild对象不存在。因此它没有id成员。就是这样,TypeError: Cannot read property 'id' of null。感谢所有其他用户的贡献。

     

MDN上有关TypeError的更多信息。

解决方案

您需要检查正在访问的公会是否存在?为此,您需要检查行会的avialable属性。

/* Check the evidence of guild's existance */
if(message.guild.avialable === true && prefixes.hasOwn(message.guild.id))