【问题标题】:Discord.js TypeError: Cannot read property 'id' of undefinedDiscord.js TypeError:无法读取未定义的属性“id”
【发布时间】:2018-06-07 03:52:57
【问题描述】:

错误发生在if(serversInfo[user.guild.id].modlog_enabled

另外,let serversInfo = JSON.parse(fs.readFileSync('./data/servers.json', 'utf8')); 如果有帮助的话。

client.on('guildBanAdd', user => {
  if (serversInfo[user.guild.id].modlog_enabled == true && serversInfo[user.guild.id].modlog_channel !== null) {
    var d = Date.now()
    d = new Date(d)
    d = d.getMonth() + 1 + '/' + d.getDate() + '/' + 
      d.getFullYear() + ' ' + 
      (d.getHours() > 12 ? d.getHours() - 12 : d.getHours()) + ':' + d.getMinutes() + ' ' + (d.getHours() >= 12 ? 'PM' : 'AM')

    client.channels
      .get(serversInfo[user.guild.id].modlog_channel)
      .send(`${user}**//**${user.id} was banned on **${d}**.`)

  } else if (err) {
    console.log(err)
  }
})

我尝试只使用guild.id,但这似乎不起作用,因为我会收到guild is not defined 的错误。 modlog_enabled 已在 .json 文件中设置为 true,但它看不到它。检查modlog_enabled 时,我的其他事件工作正常。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    client.on('guildBanAdd') 返回一个公会和一个用户,而不是同时返回。
    并且用户不再属于公会,因此使用user.guild 没有多大意义。

    client.on('guildBanAdd', (guild, user) => {
    
        if(serversInfo[guild.id].modlog_enabled == true && serversInfo[guild.id].modlog_channel !== null){
            var d = Date.now();
            d = new Date(d);
            d = (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear()+' '+(d.getHours() > 12 ? d.getHours() - 12 : d.getHours())+':'+d.getMinutes()+' '+(d.getHours() >= 12 ? "PM" : "AM");
    
            client.channels.get(serversInfo[guild.id].modlog_channel).send(`${user}**//**${user.id} was banned on **${d}**.`)
        } else if (err){console.log(err)}
    
    });
    

    【讨论】:

    • 谢谢!当我注意到在 discord.js 模块的 GuildBanAddHandler.js 文件中定义了公会和用户时,我知道我的代码出了问题。但是,是的,再次感谢。