首页 > 解决方案 > “TypeError:无法读取未定义的属性 'id'” Discord.js 错误

问题描述

我正在用 Discord.js 编写一个 Discord 机器人。我有下面的代码,但是当我运行命令时出现错误:"person.roles.remove(mainrole.id); TypeError: Cannot read property 'id' of undefined"

我不知道如何或确切地定义什么。任何帮助将不胜感激,在此先感谢。

bot.on('message', msg => {

  let args = msg.content.substring(PREFIX.length).split(" ");

  switch (args[0]) {
    case 'mute':
      let person = msg.guild.member(msg.mentions.users.first() || msg.guild.member.cache.find(args[1]))
      if (!person) {
        return msg.reply("Couldn't find that user");
      }
      let mainrole = msg.guild.roles.cache.find(role => role.name == "Member");
      let muterole = msg.guild.roles.cache.find(role => role.name === "muted");

      if (!muterole) {
        return msg.reply("Couldn't find mute role");
      }

      let time = args[2];

      if (!time){
        return msg.reply("Please specify a time")
      } 

      person.roles.remove(mainrole.id);
      person.roles.add(muterole.id);

      msg.channel.send(`@${person.user.tag} has been muted for @${ms(ms(time))}`);

      setTimeout(function (){
        person.roles.add(mainrole.id);
        person.roles.remove(muterole.id);
        msg.channel.send(`@${person.user.tag} has been unmuted`)
      }, ms(time));


      break;
  }
})

标签: javascriptdiscord.js

解决方案


似乎您没有满足此条件,role => role.name == "Member"mainrole就是undefined的原因。

您可以避免错误是:

if(mainrole && mainrole.id) {
       person.roles.remove(mainrole.id);
       person.roles.add(muterole.id);
       msg.channel.send(`@${person.user.tag} has been muted for @${ms(ms(time))}`);

       setTimeout(function(){
           person.roles.add(mainrole.id);
           person.roles.remove(muterole.id);
           msg.channel.send(`@${person.user.tag} has been unmuted`)
       }, ms(time));
} 

推荐阅读