mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Add enum provider for /emote
This commit is contained in:
		| @@ -10,6 +10,7 @@ import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js'; | |||||||
| import { SlashCommand } from '../../slash-commands/SlashCommand.js'; | import { SlashCommand } from '../../slash-commands/SlashCommand.js'; | ||||||
| import { ARGUMENT_TYPE, SlashCommandArgument } from '../../slash-commands/SlashCommandArgument.js'; | import { ARGUMENT_TYPE, SlashCommandArgument } from '../../slash-commands/SlashCommandArgument.js'; | ||||||
| import { isFunctionCallingSupported } from '../../openai.js'; | import { isFunctionCallingSupported } from '../../openai.js'; | ||||||
|  | import { SlashCommandEnumValue } from '../../slash-commands/SlashCommandEnumValue.js'; | ||||||
| export { MODULE_NAME }; | export { MODULE_NAME }; | ||||||
|  |  | ||||||
| const MODULE_NAME = 'expressions'; | const MODULE_NAME = 'expressions'; | ||||||
| @@ -87,6 +88,7 @@ function getFallbackExpression() { | |||||||
|  */ |  */ | ||||||
| function toggleTalkingHeadCommand(_) { | function toggleTalkingHeadCommand(_) { | ||||||
|     setTalkingHeadState(!extension_settings.expressions.talkinghead); |     setTalkingHeadState(!extension_settings.expressions.talkinghead); | ||||||
|  |     return String(extension_settings.expressions.talkinghead); | ||||||
| } | } | ||||||
|  |  | ||||||
| function isVisualNovelMode() { | function isVisualNovelMode() { | ||||||
| @@ -914,6 +916,7 @@ async function setSpriteSetCommand(_, folder) { | |||||||
|     // moduleWorker(); |     // moduleWorker(); | ||||||
|     const vnMode = isVisualNovelMode(); |     const vnMode = isVisualNovelMode(); | ||||||
|     await sendExpressionCall(folder, lastExpression, true, vnMode); |     await sendExpressionCall(folder, lastExpression, true, vnMode); | ||||||
|  |     return ''; | ||||||
| } | } | ||||||
|  |  | ||||||
| async function classifyCommand(_, text) { | async function classifyCommand(_, text) { | ||||||
| @@ -935,7 +938,7 @@ async function classifyCommand(_, text) { | |||||||
| async function setSpriteSlashCommand(_, spriteId) { | async function setSpriteSlashCommand(_, spriteId) { | ||||||
|     if (!spriteId) { |     if (!spriteId) { | ||||||
|         console.log('No sprite id provided'); |         console.log('No sprite id provided'); | ||||||
|         return; |         return ''; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     spriteId = spriteId.trim().toLowerCase(); |     spriteId = spriteId.trim().toLowerCase(); | ||||||
| @@ -955,7 +958,7 @@ async function setSpriteSlashCommand(_, spriteId) { | |||||||
|  |  | ||||||
|         if (!spriteItem) { |         if (!spriteItem) { | ||||||
|             console.log('No sprite found for search term ' + spriteId); |             console.log('No sprite found for search term ' + spriteId); | ||||||
|             return; |             return ''; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         label = spriteItem.label; |         label = spriteItem.label; | ||||||
| @@ -963,6 +966,7 @@ async function setSpriteSlashCommand(_, spriteId) { | |||||||
|  |  | ||||||
|     const vnMode = isVisualNovelMode(); |     const vnMode = isVisualNovelMode(); | ||||||
|     await sendExpressionCall(spriteFolderName, label, true, vnMode); |     await sendExpressionCall(spriteFolderName, label, true, vnMode); | ||||||
|  |     return label; | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -1330,10 +1334,18 @@ async function renderFallbackExpressionPicker() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function getCachedExpressions() { | ||||||
|  |     if (!Array.isArray(expressionsList)) { | ||||||
|  |         return []; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return [...expressionsList, ...extension_settings.expressions.custom].filter(onlyUnique); | ||||||
|  | } | ||||||
|  |  | ||||||
| async function getExpressionsList() { | async function getExpressionsList() { | ||||||
|     // Return cached list if available |     // Return cached list if available | ||||||
|     if (Array.isArray(expressionsList)) { |     if (Array.isArray(expressionsList)) { | ||||||
|         return [...expressionsList, ...extension_settings.expressions.custom].filter(onlyUnique); |         return getCachedExpressions(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -2037,17 +2049,23 @@ function migrateSettings() { | |||||||
|     }); |     }); | ||||||
|     eventSource.on(event_types.MOVABLE_PANELS_RESET, updateVisualNovelModeDebounced); |     eventSource.on(event_types.MOVABLE_PANELS_RESET, updateVisualNovelModeDebounced); | ||||||
|     eventSource.on(event_types.GROUP_UPDATED, updateVisualNovelModeDebounced); |     eventSource.on(event_types.GROUP_UPDATED, updateVisualNovelModeDebounced); | ||||||
|     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'sprite', |     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ | ||||||
|  |         name: 'sprite', | ||||||
|         aliases: ['emote'], |         aliases: ['emote'], | ||||||
|         callback: setSpriteSlashCommand, |         callback: setSpriteSlashCommand, | ||||||
|         unnamedArgumentList: [ |         unnamedArgumentList: [ | ||||||
|             new SlashCommandArgument( |             SlashCommandArgument.fromProps({ | ||||||
|                 'spriteId', [ARGUMENT_TYPE.STRING], true, |                 description: 'spriteId', | ||||||
|             ), |                 typeList: [ARGUMENT_TYPE.STRING], | ||||||
|  |                 isRequired: true, | ||||||
|  |                 enumProvider: () => getCachedExpressions().map((x) => new SlashCommandEnumValue(x)), | ||||||
|  |             }), | ||||||
|         ], |         ], | ||||||
|         helpString: 'Force sets the sprite for the current character.', |         helpString: 'Force sets the sprite for the current character.', | ||||||
|  |         returns: 'label', | ||||||
|     })); |     })); | ||||||
|     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'spriteoverride', |     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ | ||||||
|  |         name: 'spriteoverride', | ||||||
|         aliases: ['costume'], |         aliases: ['costume'], | ||||||
|         callback: setSpriteSetCommand, |         callback: setSpriteSetCommand, | ||||||
|         unnamedArgumentList: [ |         unnamedArgumentList: [ | ||||||
| @@ -2057,8 +2075,9 @@ function migrateSettings() { | |||||||
|         ], |         ], | ||||||
|         helpString: 'Sets an override sprite folder for the current character. If the name starts with a slash or a backslash, selects a sub-folder in the character-named folder. Empty value to reset to default.', |         helpString: 'Sets an override sprite folder for the current character. If the name starts with a slash or a backslash, selects a sub-folder in the character-named folder. Empty value to reset to default.', | ||||||
|     })); |     })); | ||||||
|     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'lastsprite', |     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ | ||||||
|         callback: (_, value) => lastExpression[value.trim()] ?? '', |         name: 'lastsprite', | ||||||
|  |         callback: (_, value) => lastExpression[String(value).trim()] ?? '', | ||||||
|         returns: 'sprite', |         returns: 'sprite', | ||||||
|         unnamedArgumentList: [ |         unnamedArgumentList: [ | ||||||
|             new SlashCommandArgument( |             new SlashCommandArgument( | ||||||
| @@ -2067,12 +2086,15 @@ function migrateSettings() { | |||||||
|         ], |         ], | ||||||
|         helpString: 'Returns the last set sprite / expression for the named character.', |         helpString: 'Returns the last set sprite / expression for the named character.', | ||||||
|     })); |     })); | ||||||
|     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'th', |     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ | ||||||
|  |         name: 'th', | ||||||
|         callback: toggleTalkingHeadCommand, |         callback: toggleTalkingHeadCommand, | ||||||
|         aliases: ['talkinghead'], |         aliases: ['talkinghead'], | ||||||
|         helpString: 'Character Expressions: toggles <i>Image Type - talkinghead (extras)</i> on/off.', |         helpString: 'Character Expressions: toggles <i>Image Type - talkinghead (extras)</i> on/off.', | ||||||
|  |         returns: ARGUMENT_TYPE.BOOLEAN, | ||||||
|     })); |     })); | ||||||
|     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'classify', |     SlashCommandParser.addCommandObject(SlashCommand.fromProps({ | ||||||
|  |         name: 'classify', | ||||||
|         callback: classifyCommand, |         callback: classifyCommand, | ||||||
|         unnamedArgumentList: [ |         unnamedArgumentList: [ | ||||||
|             new SlashCommandArgument( |             new SlashCommandArgument( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user