import UIUtil from '../../util/UIUtil'; import UIEvents from '../../../../service/UI/UIEvents'; /** * List with supported commands. The keys are the names of the commands and * the value is the function that processes the message. * @type {{String: function}} */ const commands = { 'topic': processTopic }; /** * Extracts the command from the message. * @param message the received message * @returns {string} the command */ function getCommand(message) { if (message) { for (const command in commands) { if (message.indexOf(`/${command}`) === 0) { return command; } } } return ''; } /** * Processes the data for topic command. * @param commandArguments the arguments of the topic command. */ function processTopic(commandArguments, emitter) { const topic = UIUtil.escapeHtml(commandArguments); emitter.emit(UIEvents.SUBJECT_CHANGED, topic); } /** * Constructs a new CommandProccessor instance from a message that * handles commands received via chat messages. * @param message the message * @constructor */ function CommandsProcessor(message, emitter) { const command = getCommand(message); this.emitter = emitter; /** * Returns the name of the command. * @returns {String} the command */ this.getCommand = function() { return command; }; const messageArgument = message.substr(command.length + 2); /** * Returns the arguments of the command. * @returns {string} */ this.getArgument = function() { return messageArgument; }; } /** * Checks whether this instance is valid command or not. * @returns {boolean} */ CommandsProcessor.prototype.isCommand = function() { if (this.getCommand()) { return true; } return false; }; /** * Processes the command. */ CommandsProcessor.prototype.processCommand = function() { if (!this.isCommand()) { return; } commands[this.getCommand()](this.getArgument(), this.emitter); }; export default CommandsProcessor;