为什么 discord.js 的用户 ID 未定义

时间:2021-02-24 16:44:06

标签: javascript node.js discord.js

好的,所以我一直在与某个不和谐调平系统的人合作,我们已经接近完成了,但是当我们制作排行榜时,它不断弹出错误,“无法读取未定义标签的属性”。我们希望能够使用人们的不和谐名称,而不仅仅是他们的 id,这样更容易知道排行榜上的是谁。我们尝试了许多不同的方法来代替它,但似乎无法弄清楚。我知道问题是某些用户 ID 未定义,因此机器人无法找到他们的标签,我只是不确定为什么首先未定义某些用户 ID。如果您知道解决方案,请告诉我,我们将不胜感激。

const XP = require('quick.xp');
const xp = new XP.SQLiteManager({
deleteMessage: false
})

client.on('message', (message) => {
    const level = xp.getLevel(message, message.author.id)
    const userxp = xp.getXP(message, message.author.id)
    if (message.author.bot) {
      return;}
    else {
      xp.giveXP(message);
    }
    if (message.content === "?rank") message.channel.send(`You are on level ${level} and have ${userxp} XP`)
    if (message.content === "?leaderboard") {
        let lb = xp.leaderboard(message, message.guild.id, {limit: 10, raw: false});
        const embed = new Discord.MessageEmbed()
        .setTitle("Leaderboard")
        .setColor("#FFFFFF")
        lb.forEach(m => {
            embed.addField(`${m.position}. ${client.users.cache.get(m.id).tag}`, `Level: ${xp.getLevel(message, m.id)}\n XP: ${m.xp}`)
        })
        message.channel.send(embed);
    }
    if (level === '10') {
      member.role.add('788820930331017244')
    }
})

1 个答案:

答案 0 :(得分:0)

您在此代码中仅尝试访问的 .tag 是:

embed.addField(`${m.position}. ${client.users.cache.get(m.id).tag}`, `Level: ${xp.getLevel(message, m.id)}\n XP: ${m.xp}`)

这意味着有 undefined 返回:client.users.cache.get(m.id)

由于您没有仅从此处的代码中提供此函数,我可以判断该函数返回未定义的 - 也许如果在缓存中找不到给定的 m.id?

例如,您应该对此类代码有一些保护

const userFromCache = client.users.cache.get(m.id);
embed.addField(`${m.position}. ${(userFromCache ? userFromCache.tag : '-- no tag --'}`, `Level: ${xp.getLevel(message, m.id)}\n XP: ${m.xp}`);