“ checkwarns”命令给我这个错误

时间:2019-03-20 23:56:30

标签: discord.js

每当我使用checkwarns命令检查用户发出的警告数量时,都会出现此错误:

2019-03-20T23:55:35.590941+00:00 app[worker.1]: (node:4) 
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'warns' of 
undefined
2019-03-20T23:55:35.590958+00:00 app[worker.1]:     at 
Object.module.exports.run (/app/commands/checkwarns.js:10:35)

我不知道该如何解决,我的代码找不到任何问题。

const Discord = require("discord.js");
const fs = require("fs");
const ms = require("ms");
let warns = JSON.parse(fs.readFileSync("./warnings.json", "utf8"));

module.exports.run = async(bot, message, args) => {
  if (!message.member.hasPermission("MANAGE_MESSAGES")) return
  message.reply("You don't have permssion to use this command");
  let wUser = message.guild.member(message.mentions.users.first()) ||
    message.guild.members.get(args[0])
  if (!wUser) return message.reply("Couldn't find that user");
  let warnlevel = warns[wUser.id].warns;

  if (!warns[wUser.id]) warns[wUser.id] = {
    warns: 0
  };

  message.delete().catch();

  let warnembed = new Discord.RichEmbed()
    .setTitle("**warns**")
    .setColor("#0xff80ff")
    .addField("User Warns", warnlevel, true);

  message.channel.send(warnembed);
}

module.exports.help = {
  name: "checkwarns"
}

我正在使用Heroku托管该机器人。

1 个答案:

答案 0 :(得分:0)

您的问题可能在这里发生:

let warnlevel = warns[wUser.id].warns;

如果键wUser.id不存在,则warns[wUser.id]的值为undefined,其中不包含任何用户定义的属性。因此,尝试读取warnsundefined(用户定义的属性)的值时会出错。

要解决此问题,您想检查warns[wUser.id]处的对象是否首先存在。一种简单的方法是执行以下操作:

var warnLevel;

if (warns[wUser.id] != undefined) {
    warnLevel = warns[wUser.id].warns
}
else {
    // Do something else to initialize either warnLevel or warns[wUser.id] here
}