From 7a1b43eb8943b48747bd3efa139e81186346f964 Mon Sep 17 00:00:00 2001 From: Wolfsblvt Date: Tue, 1 Oct 2024 00:37:21 +0200 Subject: [PATCH] Refactor /classify-expressions, deprecating... - Update /classify-expressions, deprecating the old "format" - Fix some oversights --- .../scripts/extensions/expressions/index.js | 40 +++++++++++++++---- public/scripts/slash-commands.js | 2 +- .../SlashCommandReturnHelper.js | 2 +- public/scripts/variables.js | 2 +- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/public/scripts/extensions/expressions/index.js b/public/scripts/extensions/expressions/index.js index 71be1e422..a37d011c5 100644 --- a/public/scripts/extensions/expressions/index.js +++ b/public/scripts/extensions/expressions/index.js @@ -12,6 +12,8 @@ import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from ' import { isFunctionCallingSupported } from '../../openai.js'; import { SlashCommandEnumValue, enumTypes } from '../../slash-commands/SlashCommandEnumValue.js'; import { commonEnumProviders } from '../../slash-commands/SlashCommandCommonEnumsProvider.js'; +import { slashCommandReturnHelper } from '../../slash-commands/SlashCommandReturnHelper.js'; +import { SlashCommandClosure } from '../../slash-commands/SlashCommandClosure.js'; export { MODULE_NAME }; const MODULE_NAME = 'expressions'; @@ -2128,18 +2130,42 @@ function migrateSettings() { name: 'classify-expressions', aliases: ['expressions'], callback: async (args) => { - const list = await getExpressionsList(); - switch (String(args.format).toLowerCase()) { - case 'json': - return JSON.stringify(list); - default: - return list.join(', '); + /** @type {import('../../slash-commands/SlashCommandReturnHelper.js').SlashCommandReturnType} */ + // @ts-ignore + let returnType = args.return; + + // Old legacy return type handling + if (args.format) { + toastr.warning(`Legacy argument 'format' with value '${args.format}' is deprecated. Please use 'return' instead. Routing to the correct return type...`, 'Deprecation warning'); + const type = String(args?.format).toLowerCase().trim(); + switch (type) { + case 'json': + returnType = 'object'; + break; + default: + returnType = 'pipe'; + break; + } } + + // Now the actual new return type handling + const list = await getExpressionsList(); + + return await slashCommandReturnHelper.doReturn(returnType ?? 'pipe', list, { objectToStringFunc: list => list.join(', ') }); }, namedArgumentList: [ + SlashCommandNamedArgument.fromProps({ + name: 'return', + description: 'The way how you want the return value to be provided', + typeList: [ARGUMENT_TYPE.STRING], + defaultValue: 'pipe', + enumList: slashCommandReturnHelper.enumList({ allowObject: true }), + forceEnum: true, + }), + // TODO remove some day SlashCommandNamedArgument.fromProps({ name: 'format', - description: 'The format to return the list in: comma-separated plain text or JSON array. Default is plain text.', + description: '!!! DEPRECATED - use "return" instead !!! The format to return the list in: comma-separated plain text or JSON array. Default is plain text.', typeList: [ARGUMENT_TYPE.STRING], enumList: [ new SlashCommandEnumValue('plain', null, enumTypes.enum, ', '), diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index d74eedbb9..85744fdd8 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -1538,7 +1538,7 @@ export function initDefaultSlashCommands() { // TODO remove some day SlashCommandNamedArgument.fromProps({ name: 'format', - description: '!!! DEPRECATED - use "return" instead !!! output format)', + description: '!!! DEPRECATED - use "return" instead !!! output format', typeList: [ARGUMENT_TYPE.STRING], isRequired: true, forceEnum: true, diff --git a/public/scripts/slash-commands/SlashCommandReturnHelper.js b/public/scripts/slash-commands/SlashCommandReturnHelper.js index 941e1f302..9d34846bb 100644 --- a/public/scripts/slash-commands/SlashCommandReturnHelper.js +++ b/public/scripts/slash-commands/SlashCommandReturnHelper.js @@ -23,7 +23,7 @@ export const slashCommandReturnHelper = { */ enumList: ({ allowPipe = true, allowObject = false, allowChat = false, allowPopup = false, allowTextVersion = true } = {}) => [ allowPipe && new SlashCommandEnumValue('pipe', 'Return to the pipe for the next command', enumTypes.name, '|'), - allowObject && new SlashCommandEnumValue('object', 'Return as an object to the pipe for the next command', enumTypes.variable, enumIcons.dictionary), + allowObject && new SlashCommandEnumValue('object', 'Return as an object (or array) to the pipe for the next command', enumTypes.variable, enumIcons.dictionary), allowChat && new SlashCommandEnumValue('chat-html', 'Sending a chat message with the return value - Can display HTML', enumTypes.command, enumIcons.message), allowChat && allowTextVersion && new SlashCommandEnumValue('chat-text', 'Sending a chat message with the return value - Will only display as text', enumTypes.qr, enumIcons.message), allowPopup && new SlashCommandEnumValue('popup-html', 'Showing as a popup with the return value - Can display HTML', enumTypes.command, enumIcons.popup), diff --git a/public/scripts/variables.js b/public/scripts/variables.js index 55e9fe9ab..67844e375 100644 --- a/public/scripts/variables.js +++ b/public/scripts/variables.js @@ -951,7 +951,7 @@ export function registerVariableCommands() { // TODO remove some day SlashCommandNamedArgument.fromProps({ name: 'format', - description: '!!! DEPRECATED - use "return" instead !!! output format)', + description: '!!! DEPRECATED - use "return" instead !!! output format', typeList: [ARGUMENT_TYPE.STRING], isRequired: true, forceEnum: true,