我如何让 DJS 机器人检查多个级别的数据库并只提升到下一个级别?

How can I have a DJS bot check through a DB of multiple ranks and only promote to the next rank?

目前正在研究 discord.js 机器人,运行 在尝试为服务器创建排名系统时遇到问题,以便在聊天时添加基于 XP 的使用。但是,我 运行 遇到了多个等级的问题。

等级数据库有 4 个不同的等级,起始要求为 1000xp,每个等级增加 1000。

由于此机器人旨在用于多个服务器,因此用户通过他们与机器人共享的服务器 ID 关联,因此所有等级也根据角色所在的服务器 ID 关联created/used.

因此机器人首先检查 XP table 以拉取该用户当前的 xp,然后它会检查用户在用户 table 中的哪个服务器,然后关闭然后它将从排名 table.

中提取具有匹配服务器 ID 的所有排名

这是我遇到问题的下一部分,

在代码中,您将看到机器人正在检查当前 xp 是否大于或等于等级 table 中的 XP 匹配与所述服务器关联的等级,当用户有1001+ XP 无论下一个等级的 XP 要求如何,它都会不断尝试添加新等级。 (示例用户有 1001xp - 下一个等级是 2000xp bot 仍然尝试推广)

 con.query(`SELECT * FROM xp WHERE ID = ${message.author.id}`, (err, rows) => {
    if (err) return console.log(err)
    let exp = rows[0].XP
    //finding user in db to get sid
    con.query(`SELECT * FROM users WHERE ID = ${message.author.id}`, (err, rows) => {
        if (err) return console.log(err)
        let si = rows[0]
        //finding next rank based off xp/sid
        con.query(`SELECT * FROM rank WHERE DID = ${si.SID}`, (err, rows) => {
            console.log(rows)
            if (err) return console.log(err)
            let srl = rows[0]

            if(exp >= srl.xp){
                console.log("promo")
            }
            if(exp <= srl.xp){
                console.log("No")
            }
            
            //defining role to add
            let prole = member.guild.roles.cache.find(r => r.id === srl.rid)

        })
    })
})

之前我在每个查询点添加了 console.log(rows) 并且所有信息都被正确找到但是我认为这是我尝试执行实际促销的方式,我试图通过 Whosebug 进行搜索,google,在来这里之前在 youtube 上寻找一些答案,但未能成功。

我在这里想要的目标是机器人将根据数据库信息识别下一个级别是什么以及实现它所需的 XP。我已经准备好添加排名并使用新信息更新数据库的代码,但是我需要克服当前的速度障碍。

编辑

我想我应该包括缩写

exp = users current xp
si = users associated server ID
srl = Server Ranked Role

si.SID = Just actually pulling the server ID from the SID column of the DB
srl.xp = The actual required XP to promote to that rank. 

找到修复:

   //check for local server rank up
//finding current xp

con.query(`SELECT * FROM xp WHERE ID = ${message.author.id}`, (err, rows) => {
    if (err) return console.log(err)
    let exp = rows[0].XP
    
    //finding user in db to get sid
    con.query(`SELECT * FROM users WHERE ID = ${message.author.id}`, (err, rows) => {
        if (err) return console.log(err)
        let si = rows[0]
        let mth = Math.floor(+ 1)
        //finding next rank based off xp/sid
        
        con.query(`SELECT * FROM rank WHERE DID = ${si.SID}  `, (err, rows) => {
            if (err) return console.log(err)
            let srl = rows[0]
            
            con.query(`SELECT * FROM rank WHERE DID= ${si.SID} AND spr=${mth}+${si.level}`, (err, rows) => {
                let prf = rows[0]

                if(exp >= prf.xp){
                    let nrole = member.guild.roles.cache.find(r => r.id === srl.rid)
                    member.roles.add(nrole)
                    con.query(`UPDATE users SET level = level+${mth} WHERE ID= ${message.author.id} `, (err, rows) => {
                        if(err) return console.log(err)
                        const prm = new discord.MessageEmbed()
                            .setColor(`#fa0707`)
                            .setTitle("Rank up!")
                            .setDescription(reply.moderation.prm.replace("<CHANGE>", message.author).replace("<CHANGE2>", prf.name).replace("<CHANGE3>", exp))
                            .setFooter(reply.footer.footer)
                        message.channel.send(prm)
                    })
                    
                }
                if(exp <= prf.xp){

                }
            }) 
        })
    })
})