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