mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-02-10 00:50:43 +01:00
Add /extension-exists and /extension-state
This commit is contained in:
parent
a6445aee1b
commit
1a6f0c0922
@ -1056,7 +1056,7 @@ export async function openThirdPartyExtensionMenu(suggestUrl = '') {
|
|||||||
function getExtensionActionCallback(action) {
|
function getExtensionActionCallback(action) {
|
||||||
return async (args, extensionName) => {
|
return async (args, extensionName) => {
|
||||||
if (args?.reload instanceof SlashCommandClosure) throw new Error('\'reload\' argument cannot be a closure.');
|
if (args?.reload instanceof SlashCommandClosure) throw new Error('\'reload\' argument cannot be a closure.');
|
||||||
if (typeof extensionName !== 'string') throw new Error('Extension name does only support string. Closures or arrays are not allowed.');
|
if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
|
||||||
if (!extensionName) {
|
if (!extensionName) {
|
||||||
toastr.warning(`Extension name must be provided as an argument to ${action} this extension.`);
|
toastr.warning(`Extension name must be provided as an argument to ${action} this extension.`);
|
||||||
return '';
|
return '';
|
||||||
@ -1184,7 +1184,7 @@ function registerExtensionSlashCommands() {
|
|||||||
name: 'extension-toggle',
|
name: 'extension-toggle',
|
||||||
callback: async (args, extensionName) => {
|
callback: async (args, extensionName) => {
|
||||||
if (args?.state instanceof SlashCommandClosure) throw new Error('\'state\' argument cannot be a closure.');
|
if (args?.state instanceof SlashCommandClosure) throw new Error('\'state\' argument cannot be a closure.');
|
||||||
if (typeof extensionName !== 'string') throw new Error('Extension name does only support string. Closures or arrays are not allowed.');
|
if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
|
||||||
|
|
||||||
const action = isTrueBoolean(args?.state) ? 'enable' :
|
const action = isTrueBoolean(args?.state) ? 'enable' :
|
||||||
isFalseBoolean(args?.state) ? 'disable' :
|
isFalseBoolean(args?.state) ? 'disable' :
|
||||||
@ -1238,6 +1238,73 @@ function registerExtensionSlashCommands() {
|
|||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
}));
|
}));
|
||||||
|
SlashCommandParser.addCommandObject(SlashCommand.fromProps({
|
||||||
|
name: 'extension-state',
|
||||||
|
callback: async (_, extensionName) => {
|
||||||
|
if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
|
||||||
|
const internalExtensionName = extensionNames.find(x => equalsIgnoreCaseAndAccents(x, extensionName));
|
||||||
|
if (!internalExtensionName) {
|
||||||
|
toastr.warning(`Extension ${extensionName} does not exist.`);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const isEnabled = !extension_settings.disabledExtensions.includes(internalExtensionName);
|
||||||
|
return String(isEnabled);
|
||||||
|
},
|
||||||
|
unnamedArgumentList: [
|
||||||
|
SlashCommandArgument.fromProps({
|
||||||
|
description: 'Extension name',
|
||||||
|
typeList: [ARGUMENT_TYPE.STRING],
|
||||||
|
isRequired: true,
|
||||||
|
enumProvider: () => extensionNames.map(name => new SlashCommandEnumValue(name)),
|
||||||
|
forceEnum: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
helpString: `
|
||||||
|
<div>
|
||||||
|
Returns the state of a specified extension (true if enabled, false if disabled).
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<strong>Example:</strong>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<pre><code class="language-stscript">/extension-state Summarize</code></pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
}));
|
||||||
|
SlashCommandParser.addCommandObject(SlashCommand.fromProps({
|
||||||
|
name: 'extension-exists',
|
||||||
|
aliases: ['extension-installed'],
|
||||||
|
callback: async (_, extensionName) => {
|
||||||
|
if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
|
||||||
|
const exists = extensionNames.find(x => equalsIgnoreCaseAndAccents(x, extensionName)) !== undefined;
|
||||||
|
return exists ? 'true' : 'false';
|
||||||
|
},
|
||||||
|
unnamedArgumentList: [
|
||||||
|
SlashCommandArgument.fromProps({
|
||||||
|
description: 'Extension name',
|
||||||
|
typeList: [ARGUMENT_TYPE.STRING],
|
||||||
|
isRequired: true,
|
||||||
|
enumProvider: () => extensionNames.map(name => new SlashCommandEnumValue(name)),
|
||||||
|
forceEnum: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
helpString: `
|
||||||
|
<div>
|
||||||
|
Checks if a specified extension exists.
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<strong>Example:</strong>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<pre><code class="language-stscript">/extension-exists LALib</code></pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
}));
|
||||||
|
|
||||||
SlashCommandParser.addCommandObject(SlashCommand.fromProps({
|
SlashCommandParser.addCommandObject(SlashCommand.fromProps({
|
||||||
name: 'reload-page',
|
name: 'reload-page',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user