import { sendSystemMessage, system_message_types } from "../script.js"; export { executeSlashCommands, registerSlashCommand, getSlashCommandsHelp, } class SlashCommandParser { constructor() { this.commands = {}; this.helpStrings = []; } addCommand(command, callback, aliases, helpString = '', interruptsGeneration = false, purgeFromMessage = true) { const fnObj = { callback, helpString, interruptsGeneration, purgeFromMessage }; this.commands[command] = fnObj; if (Array.isArray(aliases)) { aliases.forEach((alias) => { this.commands[alias] = fnObj; }); } let stringBuilder = `/${command} ${helpString} `; if (Array.isArray(aliases) && aliases.length) { let aliasesString = `(aliases: ${aliases.map(x => `/${x}`).join(', ')})`; stringBuilder += aliasesString; } this.helpStrings.push(stringBuilder); } parse(text) { const firstSpace = text.indexOf(' '); const command = firstSpace !== -1 ? text.substring(1, firstSpace) : text.substring(1); const args = firstSpace !== -1 ? text.substring(firstSpace + 1) : ''; const argObj = {}; let unnamedArg; if (args.length > 0) { const argsArray = args.split(' '); for (let arg of argsArray) { const equalsIndex = arg.indexOf('='); if (equalsIndex !== -1) { const key = arg.substring(0, equalsIndex); const value = arg.substring(equalsIndex + 1); argObj[key] = value; } else { break; } } unnamedArg = argsArray.slice(Object.keys(argObj).length).join(' '); } if (this.commands[command]) { return { command: this.commands[command], args: argObj, value: unnamedArg }; } return false; } getHelpString() { const listItems = this.helpStrings.map(x => `
Slash commands: