首先,我是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]})
},
};
输出
1条答案
按热度按时间2hh7jdfx1#
您的
if
陈述式似乎不正确。它们正在指派值给userdata.level
(在撷取之后),而不是检查它的值。所以下面的:
应附加一个
=
,如:并对
else if
语句的其余部分重复此操作。您可以考虑在此处使用
switch
语句,但这只是题外话。