首页 > 解决方案 > 为什么不为 discord.js 定义用户 ID

问题描述

好的,所以我一直在与某人合作开发不和谐的调平系统,我们几乎完成了,但是当我们制作排行榜时,它不断弹出错误,“无法读取未定义标签的属性”。我们希望能够使用人们不和谐的名字,而不仅仅是他们的 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')
    }
})

标签: javascriptnode.jsdiscord.js

解决方案


只有.tag您尝试访问此代码是:

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

这意味着从以下位置返回未定义: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}`);

推荐阅读