首页 > 解决方案 > 无法读取未定义、discord.js 经济的属性“标签”

问题描述

我的代码有问题,我收到以下错误:Cannot read property 'tag' of undefined. 我希望你能帮助我。:)

if(message.content.toLowerCase() === `${prefix}rich` || message.content.toLowerCase() === `${prefix}lb` || message.content.toLowerCase() === `${prefix}leaderboard`) {
            let money = db.all().filter(data => data.ID.startsWith(`wallet`)).sort((a, b) => b.data - a.data)
            money.length = 10
            var finalLb = ""
            for(var i in money) {
                finalLb += `**${money.indexOf(money[i])+1})** ${client.users.cache.get(money[i].ID.slice(6)).tag} :- \`$${money[i].data.toLocaleString()}\`\n`
            }
            const embed = new Discord.MessageEmbed()
            .setAuthor(`Global LeaderBoard`, client.user.displayAvatarURL({ dynamic: true }))
            .setTimestamp()
            .setColor('RANDOM')
            .setDescription(`
${finalLb}
            `)
            message.channel.send(embed)
        }

标签: javascriptdiscord.js

解决方案


我认为正在发生的事情是您正在寻找的用户尚未被缓存,因此您正在获取undefined而不是用户。

这可以通过替换${client.users.cache.get(money[i].ID.slice(6)).tag}为以下内容来解决,这将从所有可用用户中获取用户:

${(await client.users.fetch(money[i].ID.slice(6))).tag}

请注意,您必须在异步函数(带有关键字的函数async)中执行此操作,或者,如果您愿意,也可以在函数返回的.then()函数上使用该函数。Promisefetch

我还建议您添加某种错误处理,以防此操作仍然失败,因为它仍然可以但是我相信我上面提到的是您的代码无法正常工作的主要原因。


推荐阅读