I have some code that levels up your level by 1 everytime you execute the command and have the proper exp. I want to make it so if people have a lot of exp and haven’t leveled up for a long time can do something like $maxlevelup where it levels it up to the max instead of doing it everytime per levelup.
My current levelup command:
var user = message.author;
Yen.findOne({
guildID: bot.guilds.cache.get(message.guild.id).id,
userID: user.id
}, (err, data) => {
if (err) console.log(err);
if (!data) {
const newData = new Yen({
guildID: bot.guilds.cache.get(message.guild.id).id,
guildName: message.guild.name,
name: bot.users.cache.get(user.id).username,
userID: user.id,
lb: "all",
yen: 0,
daily: 0,
xp: 0,
level: 1,
rank: 1,
class: "None",
wins: 0,
losses: 0
})
newData.save().catch(err => console.log(err));
let embed = new MessageEmbed()
.setColor("#C586C0")
.setDescription(`You need **100** XP to level up! (**0** total xp)`)
return message.channel.send(embed)
} else {
let level = data.level
let xp = data.xp
const getNeededXp = level => level * 100
const needed = getNeededXp(level)
function strengthInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var strengthupgrade = level * (strengthInt(2, 1))
var speedupgrade = level * (strengthInt(2, 1))
var agilityupgrade = level * (strengthInt(2, 1))
var defenseupgrade = level * (strengthInt(2, 1))
function maxhealthInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var maxHealthupgrade = level * maxhealthInt(2, 3)
if (xp >= needed) {
++level
xp -= needed
Stats.findOne({
guildID: bot.guilds.cache.get(message.guild.id).id,
userID: user.id
}, (err, statsdata) => {
if (err) console.log(err)
if (!statsdata) {
const newDataa = new Stats({
guildID: bot.guilds.cache.get(message.guild.id).id,
guildName: message.guild.name,
name: bot.users.cache.get(user.id).username,
userID: user.id,
statslb: "all",
strength: 0,
speed: 0,
agility: 0,
defense: 0,
trainTimeout: 0,
health: 100,
maxHealth: 100,
})
newDataa.save().catch(err => console.log(err));
} else {
statsdata.strength += strengthupgrade
statsdata.speed += speedupgrade
statsdata.agility += agilityupgrade
statsdata.defense += defenseupgrade
statsdata.maxHealth += maxHealthupgrade
statsdata.health += maxHealthupgrade
let strength = statsdata.strength
let speed = statsdata.speed
let agility = statsdata.agility
let defense = statsdata.defense
let maxHealth = statsdata.maxHealth
let health = statsdata.health
async function updateOneta() {
await Stats.updateOne({
guildID: bot.guilds.cache.get(message.guild.id).id,
userID: message.author.id
}, {
strength,
speed,
agility,
defense,
health,
maxHealth,
})
}
updateOneta()
}
})
let lvlupembed = new MessageEmbed()
.setTitle("Level Up!")
.setColor("RANDOM")
.setDescription(`
You are now level **${level.toLocaleString()}** with **${xp.toLocaleString()}** XP!
You gained **+${strengthupgrade.toLocaleString()}** strength!
You gained **+${speedupgrade.toLocaleString()}** speed!
You gained **+${agilityupgrade.toLocaleString()}** agility!
You gained **+${defenseupgrade.toLocaleString()}** defense!
You gained **+${maxHealthupgrade.toLocaleString()}** health!`)
.setFooter(`${getNeededXp(level).toLocaleString()} XP needed to level up again!`)
message.reply(lvlupembed)
async function updateOnelevels() {
await Yen.updateOne({
guildID: bot.guilds.cache.get(message.guild.id).id,
userID: message.author.id
}, {
level,
xp,
})
}
updateOnelevels()
} else {
let embed = new MessageEmbed()
.setColor("#C586C0")
.setDescription(`You need **${getNeededXp(level).toLocaleString()}** XP to level up!`)
return message.channel.send(embed)
}
}
})
Please help!!