diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index 304544051..c7a4dd86c 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -227,6 +227,7 @@ export function initDefaultSlashCommands() { })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'sendas', + rawQuotes: true, callback: sendMessageAs, returns: 'Optionally the text of the sent message, if specified in the "return" argument', namedArgumentList: [ @@ -293,6 +294,7 @@ export function initDefaultSlashCommands() { })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'sys', + rawQuotes: true, callback: sendNarratorMessage, aliases: ['nar'], returns: 'Optionally the text of the sent message, if specified in the "return" argument', @@ -357,6 +359,7 @@ export function initDefaultSlashCommands() { })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'comment', + rawQuotes: true, callback: sendCommentMessage, returns: 'Optionally the text of the sent message, if specified in the "return" argument', namedArgumentList: [ @@ -574,6 +577,7 @@ export function initDefaultSlashCommands() { })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'send', + rawQuotes: true, callback: sendUserMessageCallback, returns: 'Optionally the text of the sent message, if specified in the "return" argument', namedArgumentList: [ @@ -936,6 +940,7 @@ export function initDefaultSlashCommands() { })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'echo', + rawQuotes: true, callback: echoCallback, returns: 'the text', namedArgumentList: [ diff --git a/public/scripts/slash-commands/SlashCommand.js b/public/scripts/slash-commands/SlashCommand.js index 274dac577..ec57546ba 100644 --- a/public/scripts/slash-commands/SlashCommand.js +++ b/public/scripts/slash-commands/SlashCommand.js @@ -36,6 +36,7 @@ export class SlashCommand { * @param {string} [props.helpString] * @param {boolean} [props.splitUnnamedArgument] * @param {Number} [props.splitUnnamedArgumentCount] + * @param {boolean} [props.rawQuotes] * @param {string[]} [props.aliases] * @param {string} [props.returns] * @param {SlashCommandNamedArgument[]} [props.namedArgumentList] @@ -54,6 +55,7 @@ export class SlashCommand { /**@type {string}*/ helpString; /**@type {boolean}*/ splitUnnamedArgument = false; /**@type {Number}*/ splitUnnamedArgumentCount; + /** @type {boolean} */ rawQuotes = false; /**@type {string[]}*/ aliases = []; /**@type {string}*/ returns; /**@type {SlashCommandNamedArgument[]}*/ namedArgumentList = []; diff --git a/public/scripts/slash-commands/SlashCommandParser.js b/public/scripts/slash-commands/SlashCommandParser.js index ea5b2b37b..c664bc641 100644 --- a/public/scripts/slash-commands/SlashCommandParser.js +++ b/public/scripts/slash-commands/SlashCommandParser.js @@ -975,7 +975,7 @@ export class SlashCommandParser { cmd.startUnnamedArgs = this.index - (/\s(\s*)$/s.exec(this.behind)?.[1]?.length ?? 0); cmd.endUnnamedArgs = this.index; if (this.testUnnamedArgument()) { - cmd.unnamedArgumentList = this.parseUnnamedArgument(cmd.command?.unnamedArgumentList?.length && cmd?.command?.splitUnnamedArgument, cmd?.command?.splitUnnamedArgumentCount); + cmd.unnamedArgumentList = this.parseUnnamedArgument(cmd.command?.unnamedArgumentList?.length && cmd?.command?.splitUnnamedArgument, cmd?.command?.splitUnnamedArgumentCount, cmd?.command?.rawQuotes); cmd.endUnnamedArgs = this.index; if (cmd.name == 'let') { const keyArg = cmd.namedArgumentList.find(it=>it.name == 'key'); @@ -1035,7 +1035,7 @@ export class SlashCommandParser { testUnnamedArgumentEnd() { return this.testCommandEnd(); } - parseUnnamedArgument(split, splitCount = null) { + parseUnnamedArgument(split, splitCount = null, rawQuotes = false) { const wasSplit = split; /**@type {SlashCommandClosure|String}*/ let value = this.jumpedEscapeSequence ? this.take() : ''; // take the first, already tested, char if it is an escaped one @@ -1045,7 +1045,7 @@ export class SlashCommandParser { /**@type {SlashCommandUnnamedArgumentAssignment}*/ let assignment = new SlashCommandUnnamedArgumentAssignment(); assignment.start = this.index; - if (!split && this.testQuotedValue()) { + if (!split && !rawQuotes && this.testQuotedValue()) { // if the next bit is a quoted value, take the whole value and gather contents as a list assignment.value = this.parseQuotedValue(); assignment.end = this.index;