尝试为我的 discord.js 机器人创建排行榜命令,但除第一名之外的所有值都保持为 0
Posted
技术标签:
【中文标题】尝试为我的 discord.js 机器人创建排行榜命令,但除第一名之外的所有值都保持为 0【英文标题】:Trying to make a leader board command for my discord.js bot but all values stay 0 except for the first place value 【发布时间】:2020-11-07 11:13:17 【问题描述】:所以我正在尝试在我的 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 部分以查看问题是否出在我试图获得前三名成员的代码的第一部分。问题是secondplace
和thirdplace
都保持为0,即使discord 服务器中有其他人的xp 大于0。而且forEach 函数会遍历公会中的每个成员,所以这不是问题。
正如预期的那样,因为 secondplace
和 thirdplace
值保持为 0,嵌入将在最后两个字段中以 message.guild.language.invalid_xp 值结束。而第一个字段正确显示第一名。
【问题讨论】:
【参考方案1】:我认为您用于对成员进行分类的“系统”有点糟糕。 尝试对排行榜使用更简单的东西,例如数组。
let leaderboard = new Array()
function update(user,xp)
if (!leaderboard[0]) return leaderboard.push([user,xp])
if (xp >= leaderboard[0][1]) return leaderboard.splice(0,0,[user,xp]);
if (!leaderboard[1]) return leaderboard.push([user,xp])
if (xp >= leaderboard[1][1]) return leaderboard.splice(1,0,[user,xp]);
if (!leaderboard[2]) return leaderboard.push([user,xp])
if (xp >= leaderboard[2][1]) return leaderboard.splice(2,0,[user,xp]);
您现在可以在 forEach 循环的每次迭代中调用该函数。 它看起来像这样:
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`);
((user,xp) =>
if (!leaderboard[0]) return leaderboard.push([user,xp])
if (xp >= leaderboard[0][1]) return leaderboard.splice(0,0,[user,xp]);
if (!leaderboard[1]) return leaderboard.push([user,xp])
if (xp >= leaderboard[1][1]) return leaderboard.splice(1,0,[user,xp]);
if (!leaderboard[2]) return leaderboard.push([user,xp])
if (xp >= leaderboard[2][1]) return leaderboard.splice(2,0,[user,xp]);
)()
(使用匿名函数,看起来更酷(:而且你不必这样声明函数)
【讨论】:
【参考方案2】:注意:如果你使用V12或更高版本,应该是
message.guild.members.cache.forEach()
【讨论】:
以上是关于尝试为我的 discord.js 机器人创建排行榜命令,但除第一名之外的所有值都保持为 0的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试在 discord.js 中为我的机器人创建一个自动角色功能,但它不起作用
我试图在 discord.js 中为我的机器人创建一个合作伙伴命令