首页 > 解决方案 > 没有出现在排行榜上的用户 mongoose discordjs

问题描述

我创建了一个排行榜,在 discord.js 和 mongoose 中将用户从最富有到最贫穷进行排序。有些用户本应出现在排行榜上时却没有出现在排行榜上。这家伙有数万亿,但不在上面 在此处输入图像描述

这是我的排行榜代码


const { Message, DiscordAPIError } = require('discord.js')
const Client = require('../bot')
const stats = require('./stats')
const mongoose = require('mongoose')
const Discord = require('discord.js')
const commaNumber = require('comma-number')

module.exports = {
    name: `lb`,
    aliases:['leaderboard'],

    /**
     * @param {Client} client
     * @param {Message} message
     * @param {String[]} args
     */
run: async(client, message, args) => {
        
    const users = await client.schema.find()
    const Userid = users.User
    const lb = users
              .slice(0)
              .sort(({ Bobux: a }, { Bobux: b }) => b - a)
              .map(
                
                ({ User, Bobux }, pos) => `${pos + 1}. <@${User}> - ${commaNumber(Bobux)} Bobux`,
              );

          const newnew =     lb.slice(0, 15)
              const embed = new Discord.MessageEmbed()
              .setTitle('Global Leaderboard For Most Bobux - Top 15')
              .setDescription(newnew)
              .setColor('RANDOM')
    message.channel.send(embed)
    

},
timeout: 5000
}

这是架构代码。它在主 bot.js 文件中


 this.schema = this.mongoose.model(
            `economy`,
            new this.mongoose.Schema({
                User: String,
                Bobux: Number,

            })
        );



        const self = this
        this.economy = {
            async getBal(User) {
                return await self.schema.findOne({
                    User
                }).then((d) => d ? d.Bobux : 0)
            },

            async addBal(User, Bobux) {
                return await self.schema.findOne({ User }, async(err, data) => {
                    if(err) throw err
                    if(data) {
                        data.Bobux += Number(Bobux)
                    } else {
                        data = new self.schema({ User, Bobux })
                    }
                    data.save()
                })
            },
            async subBal(User, Bobux) {
                return await self.schema.findOne({ User }, async(err, data) => {
                    if(err) throw err
                    if(data) {
                        data.Bobux -= Number(Bobux)
                    } else {
                        data = new self.schema({ User, Bobux })
                    }
                    data.save()
                })
            }


我不确定为什么用户没有出现在排行榜上

对不起,很长的帖子

标签: node.jsmongodbmongoosediscord.jsleaderboard

解决方案


因为您提到并且您的客户端(不和谐应用程序)尚未将该用户缓存在您的服务器中,因此它们不会仅与您一起显示。如果其他客户端没有缓存该用户,行为与其他客户端相同我希望您获取 guildMember 并在排行榜中显示他们的昵称或用户名和标签(未提及)以便很好地显示


推荐阅读