所以我试图在我的 discord.js 机器人中使用 quick.db 为我的 xp 系统创建一个排行榜命令。该命令的代码:
const db = require("quick.db");
const Discord = require("discord.js");
let firstplace = 0;
let firstplaceperson = "";
let secondplace = 0;
let secondplaceperson = "";
let thirdplace = 0;
let thirdplaceperson = "";
message.guild.members.forEach(member => {
console.log(member.displayName)
let xp = db.get(`xp_${message.guild.id}_${member.id}`);
if (xp === null) db.set(`xp_${message.guild.id}_${member.id}`, 0);
xp = db.get(`xp_${message.guild.id}_${member.id}`);
if (xp >= firstplace) {
firstplace = xp;
firstplaceperson = member.displayName;
}
if (xp <= firstplace && xp > secondplace && firstplaceperson != member.displayName) {
secondplace = xp;
secondplaceperson = member.displayName;
}
if (xp <= secondplace && xp > thirdplace && firstplaceperson != member.displayName && secondplaceperson != member.displayName) {
thirdplace = xp;
thirdplaceperson = member.displayName;
}
});
console.log(firstplace);
console.log(firstplaceperson);
console.log(secondplace);
console.log(secondplaceperson);
console.log(thirdplace);
console.log(thirdplaceperson);
let embed = {
color: 000000,
timestamp: new Date(),
fields: [
{
name: message.guild.language.first_place,
value: firstplaceperson + " " + firstplace
},
{
name: message.guild.language.second_place,
value: secondplaceperson + " " + secondplace
},
{
name: message.guild.language.third_place,
value: thirdplaceperson + " " + thirdplace
}
]
}
if (thirdplace === 0) {
embed.fields = [
{
name: message.guild.language.first_place,
value: firstplaceperson + " " + firstplace
},
{
name: message.guild.language.second_place,
value: secondplaceperson + " " + secondplace
},
{
name: message.guild.language.third_place,
value: message.guild.language.invalid_xp
}
]
}
if (secondplace === 0) {
embed.fields = [
{
name: message.guild.language.first_place,
value: firstplaceperson + " " + firstplace
},
{
name: message.guild.language.second_place,
value: message.guild.language.invalid_xp
},
{
name: message.guild.language.third_place,
value: message.guild.language.invalid_xp
}
]
}
message.channel.send({ embed: embed })
}
我添加了 console.log 部分以查看问题是否出在我试图获得前三名成员的代码的第一部分。问题是,即使在不和谐服务器中有其他人的 xp 大于 0,两者都secondplace
保持thirdplace
为 0。forEach 函数也会遍历公会中的每个成员,所以这不是问题。
正如预期的那样,因为secondplace
andthirdplace
值保持为 0,嵌入将在最后两个字段中以 message.guild.language.invalid_xp 值结束。而第一个字段正确显示第一名。