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

时间:2021-01-05 03:37:30

标签: node.js sequelize.js discord.js

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

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

这是我所描述的图像: Leaderboard

<块引用>

排行榜命令文件:

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 个答案:

答案 0 :(得分: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'),