/* eslint no-console: 0 */ /** * @author Marzavec ( https://github.com/marzavec ) * @summary Unlock target channel * @version 1.0.0 * @description Unlocks a channel allowing anyone to join * @module unlockroom */ import { isModerator, } from '../utility/_UAC.js'; /** * Automatically executes once after server is ready * @param {Object} core - Reference to core enviroment object * @public * @return {void} */ export async function init(core) { if (typeof core.locked === 'undefined') { core.locked = {}; } } /** * Executes when invoked by a remote client * @param {Object} env - Enviroment object with references to core, server, socket & payload * @public * @return {void} */ export async function run({ core, server, socket, payload, }) { // increase rate limit chance and ignore if not admin or mod if (!isModerator(socket.level)) { return server.police.frisk(socket, 10); } let targetChannel; if (typeof payload.channel !== 'string') { if (typeof socket.channel !== 'string') { // @todo Multichannel return false; // silently fail } targetChannel = socket.channel; } else { targetChannel = payload.channel; } if (!core.locked[targetChannel]) { return server.reply({ cmd: 'info', text: 'Channel is not locked.', channel: socket.channel, // @todo Multichannel }, socket); } core.locked[targetChannel] = false; server.broadcast({ cmd: 'info', text: `Channel: ?${targetChannel} unlocked by [${socket.trip}]${socket.nick}`, channel: targetChannel, // @todo Multichannel, false for global info }, { channel: targetChannel, level: isModerator }); console.log(`Channel: ?${targetChannel} unlocked by [${socket.trip}]${socket.nick} in ${socket.channel}`); return true; } /** * Module meta information * @public * @typedef {Object} unlockroom/info * @property {string} name - Module command name * @property {string} category - Module category name * @property {string} description - Information about module * @property {string} usage - Information about module usage */ export const info = { name: 'unlockroom', category: 'moderators', description: 'Unlock the current channel you are in or target channel as specified', usage: ` API: { cmd: 'unlockroom', channel: '' }`, };