Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- New Level Code (Supporting SQLite) v2.3
- How to setup:
- 1. Run command prompt or powershell by Admin and run "npm i -g --production windows-build-tools"
- 2. Install "npm i discord.js better-sqlite3" for your bot
- 3. Install "npm i mathjs"
- (btw you dont need to make any files.. they will be made automaticly)
- */
- // /*
- const SQLite = require('better-sqlite3')
- const sql = new SQLite('./levels.sqlite')
- const newMath = require('mathjs')
- bot.on("ready", () => {
- const table = sql.prepare("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'levels';").get()
- if(!table['count(*)']){
- sql.prepare("CREATE TABLE levels (id TEXT PRIMARY KEY, user TEXT, guild TEXT, xp INTEGER, vxp INTEGER, level INTEGER);").run()
- sql.prepare("CREATE UNIQUE INDEX idx_levels_id ON levels (id);").run()
- sql.pragma("synchronous = 1")
- sql.pragma("journal_mode = wal")
- }
- bot.getlevel = sql.prepare("SELECT * FROM levels WHERE user = ? AND guild = ?")
- bot.setlevel = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, vxp, level) VALUES (@id, @user, @guild, @xp, @vxp, @level);")
- })
- bot.on('voiceStateUpdate', (oldMember, newMember) => {
- // Settings for voice state update \\
- if(newMember.guild.id == 314762746380156928) var msgChat = "🤜-main-chat-🤛" // Auto message chat Name
- if(newMember.guild.id == 483687285129216000) var msgChat = "level-up" // Auto message chat Name
- var xpMultiplyer = 200 // How much xp is muliplyed to get lvls (You need to set same to text chat!!!!!)
- var timeSetting = 120 // Time for intervals (Seconds)
- var time = newMath.multiply(timeSetting, 1000)
- setInterval(() => {
- if(newMember){
- if(newMember.user.bot) return
- if(!newMember.voiceChannel) return
- var user = newMember.user
- var level
- if(newMember.guild){
- level = bot.getlevel.get(newMember.user.id, newMember.guild.id)
- if(!level){
- level = {
- id: `${newMember.guild.id}-${newMember.user.id}`,
- user: newMember.user.id,
- guild: newMember.guild.id,
- xp: 0,
- vxp: 0,
- level: 1
- }
- }
- }
- var vxp = level.vxp
- var curxp = level.xp
- var allxp = curxp + vxp
- var curlvl = level.level
- var nextlvl = curlvl * xpMultiplyer * curlvl
- level.vxp += 1
- if(nextlvl <= allxp){
- let curLevel = curlvl + 1
- let levelUpEmbed = new Discord.RichEmbed()
- .setAuthor(user.tag)
- .setColor(`#20f95a`)
- .addField(`You've leveled up to **${curLevel}** Level!`, `You have **${allxp}** xp`)
- .setThumbnail(user.avatarURL)
- .setTimestamp()
- newMember.guild.channels.find(channel => channel.name === msgChat).send(levelUpEmbed)
- level.level += 1
- }
- bot.setlevel.run(level)
- } else if(oldMember){
- if(oldMember.user.bot) return
- if(!oldMember.voiceChannel) return
- var user = oldMember.user
- var level
- if(oldMember.guild){
- level = bot.getlevel.get(oldMember.user.id, oldMember.guild.id)
- if(!level){
- level = {
- id: `${oldMember.guild.id}-${oldMember.user.id}`,
- user: oldMember.user.id,
- guild: oldMember.guild.id,
- xp: 0,
- vxp: 0,
- level: 1
- }
- }
- }
- var vxp = level.vxp
- var curxp = level.xp
- var allxp = curxp + vxp
- var curlvl = level.level
- var nextlvl = curlvl * xpMultiplyer * curlvl
- level.vxp += 1
- if(nextlvl <= allxp){
- let curLevel = curlvl + 1
- let levelUpEmbed = new Discord.RichEmbed()
- .setAuthor(user.tag)
- .setColor(`#20f95a`)
- .addField(`You've leveled up to **${curLevel}** Level!`, `You have **${allxp}** xp`)
- .setThumbnail(user.avatarURL)
- .setTimestamp()
- oldMember.guild.channels.find(channel => channel.name === msgChat).send(levelUpEmbed)
- level.level += 1
- }
- bot.setlevel.run(level)
- }
- }, time) // Time for how much you need to be in VC to get 2 XP!! (ms)
- })
- bot.on("message", message => {
- if(message.author.bot) return
- if(!message.guild) return
- var xpMin = 5 // Minimum xp for lvl System
- var xpMax = 25 // Maximum xp for lvl System
- var xpMultiplyer = 200 // Xp Multriplyer
- // (to get 1st lvl you need 200 (for example) xp, to get 2nd you need 200 * 2 (2 is level) and so on)
- const args = message.content.slice(PREFIX.length).trim().split(/ +/g)
- const targetUser = message.mentions.users.first() || bot.users.get(args[0])
- var user = message.author
- var level
- if(message.guild){
- level = bot.getlevel.get(message.author.id, message.guild.id)
- if(!level){
- level = {
- id: `${message.guild.id}-${message.author.id}`,
- user: message.author.id,
- guild: message.guild.id,
- xp: 0,
- vxp: 0,
- level: 1
- }
- }
- }
- var vxp = level.vxp
- var curxp = level.xp
- var allxp = curxp + vxp
- var curlvl = level.level
- var nextlvl = curlvl * xpMultiplyer * curlvl
- var minusOneLvl = newMath.subtract(curlvl, 1)
- var prevlvl = minusOneLvl * xpMultiplyer * minusOneLvl
- var sublvl = nextlvl - prevlvl
- if(targetUser){
- var tlevel
- if(message.guild){
- tlevel = bot.getlevel.get(targetUser.id, message.guild.id)
- if(!tlevel){
- tlevel = {
- id: `${message.guild.id}-${targetUser.id}`,
- user: targetUser.id,
- guild: message.guild.id,
- xp: 0,
- vxp: 0,
- level: 1
- }
- }
- }
- var tvxp = tlevel.vxp
- var tcurxp = tlevel.xp
- var tallxp = tcurxp + tvxp
- var tcurlvl = tlevel.level
- var tnextlvl = tcurlvl * xpMultiplyer * tcurlvl
- var tminusOneLvl = newMath.subtract(tcurlvl, 1)
- var tprevlvl = tminusOneLvl * xpMultiplyer * tminusOneLvl
- var tsublvl = tnextlvl - tprevlvl
- }
- if(!message.content.startsWith(PREFIX)){
- if(message.guild){
- // Xp adding
- var xpRandom = Math.floor(Math.random() * (xpMax - xpMin + 1)) + xpMin
- level.xp += xpRandom
- var curLevel = level.level + 1
- if(nextlvl <= allxp){
- let levelUpEmbed = new Discord.RichEmbed()
- .setAuthor(user.tag)
- .setColor(`#20f95a`)
- .addField(`You've leveled up to **${curLevel}** Level!`, `You have **${allxp}** xp`)
- .setThumbnail(user.avatarURL)
- .setTimestamp()
- message.channel.send(levelUpEmbed)
- level.level += 1
- }
- bot.setlevel.run(level)
- // Role adding if user gets X level
- // Roles
- let lvlUpRole1 = message.guild.roles.find(role => role.name === "Beginner")
- let lvlUpRole2 = message.guild.roles.find(role => role.name === "Experienced")
- let lvlUpRole3 = message.guild.roles.find(role => role.name === "Specialist")
- let lvlUpRole4 = message.guild.roles.find(role => role.name === "Veteran")
- let lvlUpRole5 = message.guild.roles.find(role => role.name === "Legend")
- let lvlUpRole6 = message.guild.roles.find(role => role.name === "Overpowered")
- // Role Adding
- if(level.level == 5) message.member.addRole(lvlUpRole1)
- else if(level.level == 10) message.member.addRole(lvlUpRole2)
- else if(level.level == 15) message.member.addRole(lvlUpRole3)
- else if(level.level == 20) message.member.addRole(lvlUpRole4)
- else if(level.level == 25) message.member.addRole(lvlUpRole5)
- else if(level.level == 30) message.member.addRole(lvlUpRole6)
- }
- } else if(message.content.startsWith(PREFIX)){
- const command = args.shift().toLowerCase()
- if(command === "level" || command === "xp" || command === "rank"){
- message.delete()
- if(!targetUser){
- let progressXp = newMath.subtract(allxp, prevlvl)
- let percentageDivide = newMath.divide(progressXp, sublvl)
- let percentageMultiply = newMath.multiply(percentageDivide, 100)
- let percentageResult = newMath.round(percentageMultiply)
- let percentageTotalDivide = newMath.divide(allxp, nextlvl)
- let percentageTotalMultiply = newMath.multiply(percentageTotalDivide, 100)
- let percentageTotalResult = newMath.round(percentageTotalMultiply)
- let difference = newMath.subtract(nextlvl, allxp)
- let yourEmbed = new Discord.RichEmbed()
- .setAuthor(user.tag)
- .setColor(`#ff0000`)
- .addField(`**Level**`, curlvl, true)
- .addField(`**Text XP**`, curxp, true)
- .addField(`**Total XP**`, allxp, true)
- .addField(`**VoiceChat XP**`, level.vxp, true)
- .addField(`**Level Progress**`, `${progressXp}/${sublvl} (${percentageResult}%)`, true)
- .addField(`**Total Progress**`, `${allxp}/${nextlvl} (${percentageTotalResult}%)`, true)
- .setFooter(`${difference} XP to next level up`)
- .setThumbnail(user.avatarURL)
- .setTimestamp()
- return message.channel.send(yourEmbed)
- } else if(targetUser){
- let tprogressXp = newMath.subtract(tallxp, tprevlvl)
- let tpercentageDivide = newMath.divide(tprogressXp, tsublvl)
- let tpercentageMultiply = newMath.multiply(tpercentageDivide, 100)
- let tpercentageResult = newMath.round(tpercentageMultiply)
- let tpercentageTotalDivide = newMath.divide(tallxp, tnextlvl)
- let tpercentageTotalMultiply = newMath.multiply(tpercentageTotalDivide, 100)
- let tpercentageTotalResult = newMath.round(tpercentageTotalMultiply)
- let tdifference = newMath.subtract(tnextlvl, tallxp)
- let targetEmbed = new Discord.RichEmbed()
- .setAuthor(targetUser.tag)
- .setColor(`#ff0000`)
- .addField(`**Level**`, tcurlvl, true)
- .addField(`**Text XP**`, tcurxp, true)
- .addField(`**Total XP**`, tallxp, true)
- .addField(`**VoiceChat XP**`, tlevel.vxp, true)
- .addField(`**Level Progress**`, `${tprogressXp}/${tsublvl} (${tpercentageResult}%)`, true)
- .addField(`**Total Progress**`, `${tallxp}/${tnextlvl} (${tpercentageTotalResult}%)`, true)
- .setFooter(`${tdifference} XP to next level up`)
- .setThumbnail(targetUser.avatarURL)
- .setTimestamp()
- return message.channel.send(targetEmbed)
- }
- } else if(command === "give"){
- message.delete()
- if(!message.member.hasPermission("ADMINISTRATOR")) return message.reply("You are not the boss of me, you can't do that!")
- // if(message.author.id !== message.guild.ownerID) return message.reply("You are not the boss of me, you can't do that!")
- const user = message.mentions.users.first() || bot.users.get(args[0])
- if(!user) return message.reply("You must mention someone or give their ID!")
- const xpToAdd = parseInt(args[1], 10)
- if(!xpToAdd) return message.reply("You didn't tell me how many xp to give...")
- let userlevel = bot.getlevel.get(user.id, message.guild.id)
- if(!userlevel){
- userlevel = {
- id: `${message.guild.id}-${user.id}`,
- user: user.id,
- guild: message.guild.id,
- xp: 0,
- vxp: 0,
- level: 1
- }
- }
- userlevel.xp += xpToAdd
- // Auto Level up system (COMING SOON)
- bot.setlevel.run(userlevel)
- return message.channel.send(`**${user.tag}** has **received** **${xpToAdd}** xp and now has **${userlevel.xp}** xp.`)
- } else if(command === "remove"){
- message.delete()
- if(!message.member.hasPermission("ADMINISTRATOR")) return message.reply("You are not the boss of me, you can't do that!")
- // if(message.author.id !== message.guild.ownerID) return message.reply("You are not the boss of me, you can't do that!")
- const user = message.mentions.users.first() || bot.users.get(args[0])
- if(!user) return message.reply("You must mention someone or give their ID!")
- const xpToRemove = parseInt(args[1], 10)
- if(!xpToRemove) return message.reply("You didn't tell me how many xp to give...")
- let userlevel = bot.getlevel.get(user.id, message.guild.id)
- if(!userlevel){
- userlevel = {
- id: `${message.guild.id}-${user.id}`,
- user: user.id,
- guild: message.guild.id,
- xp: 0,
- vxp: 0,
- level: 1
- }
- }
- userlevel.xp -= xpToRemove
- // Auto Level DOWN system xd (COMING SOON)
- bot.setlevel.run(userlevel)
- return message.channel.send(`**${user.tag}** has **lost** **${xpToRemove}** xp and now has **${userlevel.xp}** xp.`)
- } else if(command === "leaderboard" || command === "top10" || command === "top"){
- message.delete()
- const top10 = sql.prepare("SELECT * FROM levels WHERE guild = ? ORDER BY xp + vxp DESC LIMIT 10;").all(message.guild.id)
- const embed = new Discord.RichEmbed()
- .setAuthor(`${message.guild.name} - Leaderboard`, message.guild.iconURL)
- .setDescription("Our top 10 xp leaders!")
- .setColor("#ff0000")
- .setThumbnail(message.guild.iconURL)
- .setTimestamp()
- var i = 1
- for(const data of top10){
- embed.addField(`**${i++}.** ` + bot.users.get(data.user).tag, `Total xp amount: **${data.xp + data.vxp}** (level ${data.level})\nChat xp: **${data.xp}** - Voice xp: **${data.vxp}**`)
- }
- return message.channel.send(embed)
- }
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement