discord-vatron
Version:
Módulo para facilitar la interacción con la API de Discord
81 lines (68 loc) • 3.08 kB
JavaScript
const request = require('request-promise-native');
const { permisos, errores, colores } = require('../../props.js');
const Coleccion = require('./Coleccion.js');
module.exports = class Role {
constructor(datos, bot) {
this._datos = datos;
this._bot = bot;
this.nombre = datos.name;
this.id = datos.id;
this.separado = datos.hoist || false;
this.posicion = datos.position;
this.administrado = datos.managed || false;
this.mencionable = datos.mentionable || false;
}
eliminar() {
const promesa = new Promise((resolve, reject) => {
const r = this;
request.delete({ url: `https://discord.com/api/v9/guilds/${this.servidor.id}/roles/${this.id}`, headers: { Authorization: 'Bot ' + this._bot.token } })
.then(() => {
resolve(r);
})
.catch(err => {
reject('[DISCORD-VATRON] ' + errores[err.statusCode] || err.message);
});
});
return promesa;
}
editar(opciones) {
const promesa = new Promise((resolve, reject) => {
const opc = {
name: opciones.nombre || this.nombre,
color: colores[opciones.color] ? parseInt(colores[opciones.color], 16) : (typeof(opciones.color) == 'string' ? parseInt(opciones.color.replace(/\#/g, ''), 16) : opciones.color) || this.color.dec,
hoist: typeof(opciones.separado) == 'boolean' ? opciones.separado : this.separado,
mentionable: typeof(opciones.mencionable) == 'boolean' ? opciones.mencionable : this.mencionable
};
request.patch({ url: `https://discord.com/api/v9/guilds/${this.servidor.id}/roles/${this.id}`, headers: { Authorization: 'Bot ' + this._bot.token, 'Content-Type': 'application/json' }, body: JSON.stringify(opc) })
.then(r => {
resolve(new Role(JSON.parse(r), this.bot));
})
.catch(err => {
reject('[DISCORD-VATRON] ' + errores[err.statusCode] || err.message);
});
});
return promesa;
}
get color() {
return {
hex: this._datos.color.toString(16),
dec: this._datos.color
};
}
get servidor() {
return this._bot.servidores.has(this._datos.guild_id) ? this._bot.servidores.get(this._datos.guild_id) : null;
}
get miembros() {
return this._bot.servidores.has(this._datos.guild_id) ? this._bot.servidores.get(this._datos.guild_id).miembros.filtrar(m => m.roles.has(this.id)) || new Coleccion() : new Coleccion();
}
get permisos() {
const array = Object.entries(permisos).filter(([n, v]) => (this._datos.permissions & v) == v).map(([n]) => n);
return {
array,
num: this._datos.permissions
};
}
toString() {
return this.nombre == '@everyone' ? this.nombre : `<@&${this.id}>`;
}
}