simply-xp
Version:
A Simple, Easy and Beginner Friendly XP System
67 lines (50 loc) • 1.36 kB
JavaScript
const levels = require("../src/models/level.js");
let {roleSetup} = require("../simplyxp");
/**
* @param {Discord.Message} message
* @param {string} userID
* @param {string} guildID
* @param {number} level
*/
async function addLevel(message, userID, guildID, level) {
if (!userID) throw new Error("[XP] User ID was not provided.");
if (!guildID) throw new Error("[XP] Guild ID was not provided.");
if (!level) throw new Error("[XP] Level amount is not provided.");
let {client} = message;
const user = await levels.findOne({user: userID, guild: guildID});
if (!user) {
const newUser = new levels({
user: userID,
guild: guildID,
xp: 0,
level: 0
});
await newUser.save().catch(() => console.log("[XP] Failed to save new user to database"));
let xp = (level * 10) ** 2;
return {
level: level,
exp: xp
};
}
let level1 = user.level;
user.level += parseFloat(level);
user.xp = (user.level * 10) ** 2;
await user.save().catch((e) =>
console.log(`[XP] Failed to add Level | User: ${userID} | Err: ${e}`)
);
if (level1 !== level) {
let data = {
xp: user.xp,
level: user.level,
userID,
guildID
};
let role = await roleSetup.find(client, guildID, level);
client.emit("levelUp", message, data, role);
}
return {
level: user.level,
xp: user.xp
};
}
module.exports = addLevel;