(discord.js v14)使用MongoDB时出现问题

0yg35tkg  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(218)

首先,我是discord.js v14的新手,所以还在学习中。我正在基于XPS和级别的级别系统上工作,但当我尝试获取级别时,即使数据库中的级别为“0”(检查了多次)它仍然取为“1”。顺便说一句,当我试图取XP时,我没有问题,它正常给它。我尝试了我所知道的一切,并坚持在这个RN上如此努力,如果你们能帮忙,我会很高兴的

我的代码,为每个消息的用户提供XP

const user = require('../schemas/user.js')

module.exports = {
    system: `level`,
    event: `messageCreate`,

    async execute(bot, message) {
        if (message.author.bot || message.channel.type === 'dm') return;
        if (bot.levelCooldown.has(message.author.id)) return;
        let kontrol = await user.findOne({discord_id: message.author.id});
        if (!kontrol) {
            let newUser = new user({
                discord_id: message.author.id,
                xp: 0,
                level: 0,
            })
            await newUser.save();
        }
        var userdata = await user.findOne({discord_id: message.author.id}).exec();
        userdata.xp = parseInt(userdata.xp) + 1
        if (userdata.xp < 1000) userdata.level = 0
        else if (userdata.xp >= 1000) userdata.level = 1
        else if (userdata.xp >= 2000) userdata.level = 2
        else if (userdata.xp >= 4000) userdata.level = 3
        else if (userdata.xp >= 8000) userdata.level = 4
        else if (userdata.xp >= 16000) userdata.level = 5
        await userdata.save();

        bot.levelCooldown.add(message.author.id);
        setTimeout(() => {
            bot.levelCooldown.delete(message.author.id);
        }, 5000);
    }
};

使用者结构描述

const mongoose = require('mongoose')
const user = new mongoose.Schema({
    discord_id: {
        type: Number,
        unique: true
    },
    xp: Number,
    level: Number,
});

module.exports = mongoose.model('user', user)

提取用户数据的代码

const { EmbedBuilder } = require('discord.js');
const user = require('../schemas/user.js')

module.exports = {
    name: 'user',
    aliases: ['üye'],

    async execute(bot, message, args) {
        var üye;
        if (!args[0]) üye = message.member
        else üye = message.guild.members.cache.find(member => member.id === args[0]) || message.guild.members.cache.find(member => member.id === message.mentions.members.first().id)
        if (!üye) üye = message.member
        let kontrol = await user.findOne({discord_id: üye.id});
        if (!kontrol) {
            let newUser = new user({
                discord_id: üye.id,
                xp: 0,
                level: 0,
            })
            await newUser.save();
        }
        var userdata = await user.findOne({discord_id: üye.id}).exec();
        var hedef;
        var kalan;
        if (userdata.level = 0) {
            hedef = 1000
            kalan = parseInt(hedef) - parseInt(userdata.xp)
        } else if (userdata.level = 1) {
            hedef = 2000
            kalan = parseInt(hedef) - parseInt(userdata.xp)
        } else if (userdata.level = 2) {
            hedef = 4000
            kalan = parseInt(hedef) - parseInt(userdata.xp)
        } else if (userdata.level = 3) {
            hedef = 8000
            kalan = parseInt(hedef) - parseInt(userdata.xp)
        } else if (userdata.level = 4) {
            hedef = 16000
            kalan = parseInt(hedef) - parseInt(userdata.xp)
        } else if (userdata.level = 5) {
            hedef = '?'
            kalan = 'Yakında'
        }
        var embed = new EmbedBuilder()
            .setColor(bot.config.color)
            .setAuthor({name: üye.user.tag, iconURL: üye.user.avatarURL()})
            .setThumbnail(üye.user.avatarURL())
            .setDescription(`**〉Genel bilgiler**\n**ID:**${üye.id} \n**Avatar:**[Tıkla](${üye.user.avatarURL()}) \n*(Olum buraya ne koysam bilmiyorum amk önerin bir şeyler bana -Grkm)* \n\n**〉Seviye bilgileri**\n**Seviye:**${userdata.level} \n**XP:**${userdata.xp}/${hedef} \n\`Sıradaki seviye için ${kalan} xp gerekiyor\``)
            message.channel.send({embeds: [embed]})
    },
};

输出

2hh7jdfx

2hh7jdfx1#

您的if陈述式似乎不正确。它们正在指派值给userdata.level(在撷取之后),而不是检查它的值。
所以下面的:

if (userdata.level = 0) {

应附加一个=,如:

if (userdata.level == 0) {

并对else if语句的其余部分重复此操作。
您可以考虑在此处使用switch语句,但这只是题外话。

相关问题