无法读取未定义的属性“ id”

时间:2020-01-21 09:43:13

标签: javascript node.js discord.js

问题是我试图创建一个显示用户拥有多少硬币的命令,但是每次我键入命令时,它只会返回“无法读取未定义的属性” id”。

代码如下:

const Discord = require("discord.js");
let coins = require("../coins.json");

module.exports.run = async (bot, message, args) => {
  //!coins
    let pUser = message.guild.member(message.mentions.users.first()) || message.guild.members.get(args[0]);
    if(!coins[pUser.id]){
    coins[pUser.id] = {
      coins: 0
    };
  }

    if(!coins[message.author.id]){
    coins[message.author.id] = {
      coins: 0
    };
  }

  let pCoins = coins[pUser.id].coins;
  let uCoins = coins[message.author.id].coins;


  if (!pUser) { 
      message.channel.send(`**${message.author}**: Ai manglit **${uCoins}** puncte de neață!`);
  } else {
      message.channel.send(`**${pUser}**: Ai manglit **${pCoins}** puncte de neață!`);
    }
}

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

这也是我的coin.json文件:

{
   "108225935509057536":{
      "coins":3,
      "id":"108225935509057536"
   },
   "513103473571790857":{
      "coins":579
   },
   "274234269944119296":{
      "coins":436
   },
   "289874882974711808":{
      "coins":48
   },
   "282255872871235584":{
      "coins":372
   },
   "260746723805233153":{
      "coins":721
   },
   "595994062864121872":{
      "coins":18
   },
   "225239396339679232":{
      "coins":362
   },
   "346946888634728450":{
      "coins":59
   },
   "186871446125936644":{
      "coins":159
   },
   "279263622247743488":{
      "coins":669
   },
   "126321478550552576":{
      "coins":1
   },
   "469899490686664714":{
      "coins":1
   },
   "242381361158029314":{
      "coins":13
   },
   "224095971955441665":{
      "coins":11
   },
   "547093167040757770":{
      "coins":26
   },
   "252882616297062400":{
      "coins":4
   },
   "261602781981310976":{
      "coins":59
   },
   "254002772679196682":{
      "coins":6
   },
   "371414290156093440":{
      "coins":20
   },
   "188347467874435073":{
      "coins":9
   },
   "449120976870047744":{
      "coins":122
   },
   "286178947148939265":{
      "coins":10
   },
   "539794625972404225":{
      "coins":0
   },
   "491701834193305600":{
      "coins":2
   },
   "280730839946493953":{
      "coins":13
   }
}

3 个答案:

答案 0 :(得分:1)

此块将始终是未定义的,pUser是guild.member,并且没有属性id

if(!coins[pUser.id]){
  coins[pUser.id] = {
    coins: 0
  };
}

此代码的第一部分将返回message.author的集合,因此您将看到[object,object]

if (!pUser) { 
  message.channel.send(`**${message.author}**: Ai manglit **${uCoins}** puncte de neață!`);
} else {
  message.channel.send(`**${pUser}**: Ai manglit **${pCoins}** puncte de neață!`);
}

正确的方法是:

const Discord = require("discord.js");
let coins = require("../coins.json");

module.exports.run = async (bot, message, args) => {
  let targetMember = message.guild.member(message.mentions.users.first()) || message.guild.members.get(args[0])
  if(!targetMember) targetMember = message.member

  if(!coins[targetMember.user.id]){
    coins[targetMember.user.id] = {
      coins: 0
    };
  }

  let pCoins = coins[targetMember.user.id].coins;

  message.channel.send(`**${targetMember.user.id}**: Ai manglit **${pCoins}** puncte de neață!`);
}

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

答案 1 :(得分:0)

实际上,在您的代码中,您得到的用户是被提及的用户,或者如果您在第一个arg中键入ID的用户,则得到的用户

/ coin @ john#0000或/ coin 192367487362(这是一个示例)

您必须添加一个条件来保护您的代码免遭诸如此类的错误:

module.exports.run = async (bot, message, args) => {
  //!coins
    let pUser = message.guild.member(message.mentions.users.first()) || message.guild.members.get(args[0]);

    if(!pUser) {
      // Do something if no user was mentionned and no id was sent with the first argument
      return;
    }

    if(!coins[pUser.id]){
    coins[pUser.id] = {
      coins: 0
    };
  }

    if(!coins[message.author.id]){
    coins[message.author.id] = {
      coins: 0
    };
  }

  let pCoins = coins[pUser.id].coins;
  let uCoins = coins[message.author.id].coins;


  if (!pUser) { 
      message.channel.send(`**${message.author}**: Ai manglit **${uCoins}** puncte de neață!`);
  } else {
      message.channel.send(`**${pUser}**: Ai manglit **${pCoins}** puncte de neață!`);
    }
}

答案 2 :(得分:0)

const data = {“ 108225935509057536”:{硬币:3,编号:“ 108225935509057536”}};

console.log(data [“ 108225935509057536”]);

尝试