UNPKG

discord-vatron

Version:

Módulo para facilitar la interacción con la API de Discord

81 lines (68 loc) 3.08 kB
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}>`; } }