UNPKG

zyno-bot-addons

Version:

Create easily addons for Zyno Bot

74 lines (71 loc) 3.68 kB
const BaseChannel = require('./base.js'); const { validatePermission, getAddonPermission } = require('../../../utils/functions.js'); const scopes = require('../../../bitfields/scopes.js'); const Permissions = require('../permissions.js'); const Save = require('../../save.js'); const channelManager = require('../../managers/channelManager.js'); class CategoryChannel extends BaseChannel{ constructor(data, addon, guild, structureHandler, cache){ super(data, addon); if(cache){ const addonChannelManager = channelManager.get(addon.name) || new Save(); const guildChannelManager = addonChannelManager.get(guild.id) || new Save(); guildChannelManager.set(data.id, this); addonChannelManager.set(guild.id, guildChannelManager); channelManager.set(addon.name, addonChannelManager); } this.viewable = data.viewable; this.name = data.name; this.position = data.position; this.deletable = data.deletable; this.guild = guild; this.guildId = guild.id; this.manageable = data.manageable; this.permissions = new Save(); const permissions = Array.from(data.permissionOverwrites.cache.values()); for(var i = 0; i < permissions.length; i++){ var permission = permissions[i]; this.permissions.set(permission.id, new Permissions(permission, this)); } if(validatePermission(getAddonPermission(addon.name), scopes.bitfield.CHANNELS)){ addon.channels.set(this.id, this); } this.delete = function(){ return new Promise((resolve, reject) => { if(!validatePermission(getAddonPermission(addon.name), scopes.bitfield.CHANNELS)) return reject(`Missing channels scope in bitfield`); data.delete().then(() => resolve()).catch(reject); }); }; this.setName = function(name, reason){ return new Promise((resolve, reject) => { if(!validatePermission(getAddonPermission(addon.name), scopes.bitfield.CHANNELS)) return reject(`Missing channels scope in bitfield`); if(typeof name !== 'string') return reject('The name of the channel must be a type of string'); if(typeof reason !== 'string') reason = undefined; data.setName(name, reason).then(ch => { resolve(structureHandler.createStructure('CategoryChannel', [ch, addon, guild])); }).catch(reject); }); } this.setPosition = function(position, reason){ return new Promise((resolve, reject) => { if(!validatePermission(getAddonPermission(addon.name), scopes.bitfield.CHANNELS)) return reject(`Missing channels scope in bitfield`); if(typeof position !== 'number') return reject('The position of the channel must be a type of number'); if(typeof reason !== 'string') reason = undefined; data.setPosition(position, {reason: reason}).then(ch => { resolve(structureHandler.createStructure('CategoryChannel', [ch, addon, guild])); }).catch(reject); }); } this.update = function(){ return new Promise((resolve, reject) => { data.fetch().then(ch => { resolve(structureHandler.createStructure('CategoryChannel', [ch, addon, guild])); }).catch(reject); }); } } get channels(){ return this.guild.channels.filter(ch => ch.parentId === this.id); } } module.exports = CategoryChannel;