javascript - 为什么不为 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')
}
})
解决方案
只有.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}`);
推荐阅读
- nix - Nix:nixlang 语法如何更改现有集合?语法错误意外 '=' ,期待 $end
- user-interface - Flink 应用程序的流媒体指标
- ios - Swift - 用间距向 UITextfield 添加底线
- flutter - Flutter:处理异步操作
- chef-infra - 将节点引导到厨师获得许可证错误
- react-native - 全局更改颜色导入
- javascript - 在 p5.js 方法中调整窗口大小
- java - 属性中的 Spring Boot 和 Keycloak 配置引发 NullPointerException 然后 500 状态代码
- spring - 当来自同一主机的相同 url 的 curl 工作正常时,为什么 Spring RestTemplate.getForObject() 到 localhost 会得到 404?
- django - 如何根据条件增加和减少 django Templete 中的值