# Zeew Levels

# Informacion

Zeew-levels es un modulo para crear sistema de niveles de manera facil usando la base de datos mysql que para este tipo de sistemas es perfecto.

A qui tendras todas las funciones y explicaciones mas detalladas y extensas.

# Como usarlo

Todas las funciones de zeew levels son asyncronos, a si que no olvides el await y async

Primero debes hacer la conexion de mysql, te recomiendo usar mysql2. A qui te dejo el ejemplo. Se lo que necesitaras.

const mysql = require('mysql2');

const conexionMYSQL = mysql.createConnection({
    host,
    user,
    database
});

Una vez que lo tengas, pasa la conexion de mysql a zeewlevels.

NOTA Esta funcion solo debe existir una vez. Colocalo en el archivo principal.

zeewLevels.conexion(conexionMYSQL)

y ahora podras usar las funciones.

# Propiedades

La key es un indentificador. Por ejemplo la id del servidor, pero si sera global, pone algo que siempre tendran.

La id es el indentifacdor del usuario.

La amount es la cantidad que sera añadida o removida

El limit es para obtener cierta cantidad de datos

El limitXP es el limite de XP que necesita para que suba de nivel. Por defecto sera 1000.

El maxXP el maximo de XP random que pueden obtener. Por defecto sera de 5.

# Principal

# main: options

zeewLevels.main.options({limitXP, maxXP});

# main: newLevel

Esta es la funcion que debes colocar en el evento de mensajes para que suban de nivel.
Esta funcion tambien regresa el nivel subido.

zeewLevels.main.newLevel(id, key);

# Obtener

# Get: Level

  • Return: Nivel actual del usuario
zeewLevels.get.Level(id, key);

# Get: XP

  • Return: XP actual del usuario
zeewLevels.get.XP(id, key);

# Get: TOP

  • Return: Array con cierta cantidad de usuarios con el nivel mas alto
zeewLevels.get.TOP(key, limit);

# Agregar

# set: Level

  • Return: El nivel agregado
zeewLevels.set.Level(id , key, amount);

# set: XP

  • Return: El XP agregado
zeewLevels.set.XP(id , key, amount);

# Eliminar

# delete: User

  • Return: True si salio todo correcto
zeewLevels.delete.user(id, id);

# delete: All

  • Return: True si salio todo correcto

Este elimina todo los datos en la base de datos, ten cuidado.

 zeewLevels.delete.all(key);

# Ejemplo

# MYSQL

const mysql = require('mysql2');

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'zeew',
    password: '4tLaNL@h'
    database: 'bot'
});

connection.connect(error => {
    if(error) return console.log(error);
})

connection.on('error', (err) => {
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
        console.log('DB disconnected attempting reconnection')
        connection.connect((err) => {
            if (err) throw err;
            console.log('DB reconnected!')
        });
    } else {
        throw err;
    }
})
connection.on('connect', () => {
    console.log(`Connected!`)
})

module.exports = connection;

# Discord

const { Client, Intents, MessageEmbed } = require('discord.js');
const client = new Client({ ws: { intents: Intents.ALL } });
const { Discord: { token } } = require('./config');
const conexiondb = require('./mysql')

const zeewLevels = require('zeew-levels');
zeewLevels.conexion(conexiondb)
zeewLevels.main.options({
    limitXP: 500,
    maxXP: 50
})

const embed = (message, title, description) => {
    const ed = new MessageEmbed()
        .setTitle(title)
        .setDescription(description)
        .setColor(0xFF0000)
    message.channel.send(ed)
}

client.on('ready', () => {
    console.log('Logged in as', client.user.tag, client.user.id);
})

client.on("message", async (message) => {
    if (message.author.bot) return;

    if (message.content.startsWith('!getlevel')) {
        const getlevel = await zeewLevels.get.Level(message.author.id, message.guild.id);
        embed(message, "Tu Nivel", `Nivel: ${getlevel}`)
    }
    if (message.content.startsWith('!getxp')) {
        const getXP = await zeewLevels.get.XP(message.author.id, message.guild.id);
        embed(message, "Tu X", `XP: ${getXP}`)
    }
    if (message.content.startsWith('!gettop')) {
        const getXP = await zeewLevels.get.TOP(message.guild.id, 10);
        embed(message, "TOP 10", getXP.map(a => `• <@${a.id}> > LvL: ${a.lvl} - XP: ${a.xp}`))
    }
    if (message.content.startsWith('!setlevel')) {
        const setlevel = await zeewLevels.set.Level(message.author.id, message.guild.id, message.content.split(' ')[1]);
        embed(message, "Nuevo Nivel", `Nivel: ${setlevel}`)
    }
    if (message.content.startsWith('!setxp')) {
        const setlevel = await zeewLevels.set.XP(message.author.id, message.guild.id, message.content.split(' ')[1]);
        embed(message, "Nuevo XP", `XP: ${setlevel}`)
    }
    if (message.content.startsWith('!deleteuser')) {
        await zeewLevels.delete.user(message.author.id, message.guild.id);
        embed(message, "Borrado", `Borrado: <@${message.author.id}>`)
    }
    if (message.content.startsWith('!deleteall')) {
        await zeewLevels.delete.all(message.guild.id);
        embed(message, "Borrado", `Borrado: Todos`)
    }

    let newLevel = await zeewLevels.main.newLevel(message.author.id, message.guild.id)
    if(!newLevel) return;
    embed(message, "Zeew-Level", `Nuevo Nivel: ${newLevel} - <@${message.author.id}>`)
})

client.login(token);
Last Updated: 10/4/2021, 10:17:10 PM