From 2e24705a19af6bba35b1d7f12c6ca55188b47dd8 Mon Sep 17 00:00:00 2001 From: LenAnderson Date: Sat, 6 Apr 2024 18:39:11 -0400 Subject: [PATCH] use scope macros for QR args --- .../scripts/extensions/quick-reply/src/QuickReply.js | 10 ++++++---- .../extensions/quick-reply/src/QuickReplySet.js | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/public/scripts/extensions/quick-reply/src/QuickReply.js b/public/scripts/extensions/quick-reply/src/QuickReply.js index e71fc9c71..8075a1a88 100644 --- a/public/scripts/extensions/quick-reply/src/QuickReply.js +++ b/public/scripts/extensions/quick-reply/src/QuickReply.js @@ -1,5 +1,6 @@ import { callPopup } from '../../../../script.js'; import { setSlashCommandAutoComplete } from '../../../slash-commands.js'; +import { SlashCommandScope } from '../../../slash-commands/SlashCommandScope.js'; import { getSortableDelay } from '../../../utils.js'; import { log, warn } from '../index.js'; import { QuickReplyContextLink } from './QuickReplyContextLink.js'; @@ -493,10 +494,11 @@ export class QuickReply { async execute(args = {}) { if (this.message?.length > 0 && this.onExecute) { - const message = this.message.replace(/\{\{arg::([^}]+)\}\}/g, (_, key) => { - return args[key] ?? ''; - }); - return await this.onExecute(this, message, args.isAutoExecute ?? false); + const scope = new SlashCommandScope(); + for (const key of Object.keys(args)) { + scope.setMacro(`arg::${key}`, args[key]); + } + return await this.onExecute(this, this.message, args.isAutoExecute ?? false, scope); } } diff --git a/public/scripts/extensions/quick-reply/src/QuickReplySet.js b/public/scripts/extensions/quick-reply/src/QuickReplySet.js index 848466452..56f4c21a9 100644 --- a/public/scripts/extensions/quick-reply/src/QuickReplySet.js +++ b/public/scripts/extensions/quick-reply/src/QuickReplySet.js @@ -1,5 +1,6 @@ import { getRequestHeaders, substituteParams } from '../../../../script.js'; import { executeSlashCommands } from '../../../slash-commands.js'; +import { SlashCommandScope } from '../../../slash-commands/SlashCommandScope.js'; import { debounceAsync, warn } from '../index.js'; import { QuickReply } from './QuickReply.js'; @@ -102,8 +103,9 @@ export class QuickReplySet { /** * @param {QuickReply} qr * @param {String} [message] - optional altered message to be used + * @param {SlashCommandScope} [scope] - optional scope to be used when running the command */ - async execute(qr, message = null, isAutoExecute = false) { + async execute(qr, message = null, isAutoExecute = false, scope = null) { /**@type {HTMLTextAreaElement}*/ const ta = document.querySelector('#send_textarea'); const finalMessage = message ?? qr.message; @@ -119,7 +121,7 @@ export class QuickReplySet { } if (input[0] == '/' && !this.disableSend) { - const result = await executeSlashCommands(input); + const result = await executeSlashCommands(input, true, scope); return typeof result === 'object' ? result?.pipe : ''; }