discord.js - 排行榜/顶部命令显示错误的顺序

Posted

技术标签:

【中文标题】discord.js - 排行榜/顶部命令显示错误的顺序【英文标题】:discord.js - Leaderboard / top command showing wrong order 【发布时间】:2021-04-10 20:23:59 【问题描述】:

我最近在排行榜命令中以错误的顺序显示用户时遇到了很多麻烦。

我正在使用 DiscordJS 主分支和 Sequelize v6

这是我所描述的图像:

排行榜命令文件:

const  MessageEmbed  = require("discord.js");

exports.run = async (client, message, args) => 
    const  Users  = require("../functions/database");

    let users = await Users.findAll( limit: 10, order: [['count', 'DESC']] );
    for (const user of users) 
        await client.users.fetch(user.userid);
    
    let embed = new MessageEmbed()
        .setAuthor("Middleman Leaderboard", `$client.user.displayAvatarURL( dynamic: true )`)
        .setDescription(users.map((user, position) => `**$position + 1**. $(client.users.cache.get(user.userid).username): $user.count Points`))
        .setThumbnail('https://i.ibb.co/ByRSBmB/hp.png')
        .setColor("#d70069");
    await message.reply(embed)

Sequelize 数据库模型:

const Users = sequelize.define('users', 
    userid: 
        type: Sequelize.INTEGER,
    ,
    count: Sequelize.INTEGER,
);

exports.Users = Users;

请注意,这在很大程度上是概念验证,而不是用于生产。 任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

这是来自 discordjs.guide 的解决方案:

users.sort((a, b) => b.balance - a.balance)
        .filter(user => client.users.cache.has(user.user_id))
        .first(10)
        .map((user, position) => `($position + 1) $(client.users.cache.get(user.user_id).tag): $user.balance?`)
        .join('\n'),

【讨论】:

老实说,我真的不知道这是怎么从我的脑海中消失的,我记得尝试过,但没有成功!我想我试图在对象(用户)上使用 .sort 。这成功了,非常感谢!

以上是关于discord.js - 排行榜/顶部命令显示错误的顺序的主要内容,如果未能解决你的问题,请参考以下文章

discord.js - 排行榜未定义的用户名

排行榜命令中未定义的用户名 [ quick.db / discord.js ]

尝试为我的 discord.js 机器人创建排行榜命令,但除第一名之外的所有值都保持为 0

Discord.JS,使用 Canvas 在 For 循环中显示多个用户个人资料图片

Javascript discord.js 排行榜

discord.js unban 命令错误,当没有给 unban 一个 id 时