Merge pull request #1652 from LenAnderson/wi-world-command

add optional arguments to /world command
This commit is contained in:
Cohee 2024-01-07 19:01:32 +02:00 committed by GitHub
commit f3a5ed0ac2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 8 deletions

View File

@ -2265,24 +2265,52 @@ export async function importEmbeddedWorldInfo(skipPopup = false) {
setWorldInfoButtonClass(chid, true); setWorldInfoButtonClass(chid, true);
} }
function onWorldInfoChange(_, text) { function onWorldInfoChange(args, text) {
if (_ !== '__notSlashCommand__') { // if it's a slash command if (args !== '__notSlashCommand__') { // if it's a slash command
const silent = isTrueBoolean(args.silent);
if (text.trim() !== '') { // and args are provided if (text.trim() !== '') { // and args are provided
const slashInputSplitText = text.trim().toLowerCase().split(','); const slashInputSplitText = text.trim().toLowerCase().split(',');
slashInputSplitText.forEach((worldName) => { slashInputSplitText.forEach((worldName) => {
const wiElement = getWIElement(worldName); const wiElement = getWIElement(worldName);
if (wiElement.length > 0) { if (wiElement.length > 0) {
selected_world_info.push(wiElement.text()); const name = wiElement.text();
wiElement.prop('selected', true); switch (args.state) {
toastr.success(`Activated world: ${wiElement.text()}`); case 'off': {
if (selected_world_info.includes(name)) {
selected_world_info.splice(selected_world_info.indexOf(name), 1);
wiElement.prop('selected', false);
if (!silent) toastr.success(`Deactivated world: ${name}`);
} else {
if (!silent) toastr.error(`World was not active: ${name}`);
}
break;
}
case 'toggle': {
if (selected_world_info.includes(name)) {
selected_world_info.splice(selected_world_info.indexOf(name), 1);
wiElement.prop('selected', false);
if (!silent) toastr.success(`Activated world: ${name}`);
} else {
selected_world_info.push(name);
wiElement.prop('selected', true);
if (!silent) toastr.success(`Deactivated world: ${name}`);
}
break;
}
default: {
selected_world_info.push(name);
wiElement.prop('selected', true);
if (!silent) toastr.success(`Activated world: ${name}`);
}
}
} else { } else {
toastr.error(`No world found named: ${worldName}`); if (!silent) toastr.error(`No world found named: ${worldName}`);
} }
}); });
$('#world_info').trigger('change'); $('#world_info').trigger('change');
} else { // if no args, unset all worlds } else { // if no args, unset all worlds
toastr.success('Deactivated all worlds'); if (!silent) toastr.success('Deactivated all worlds');
selected_world_info = []; selected_world_info = [];
$('#world_info').val(null).trigger('change'); $('#world_info').val(null).trigger('change');
} }
@ -2414,7 +2442,7 @@ function assignLorebookToChat() {
jQuery(() => { jQuery(() => {
$(document).ready(function () { $(document).ready(function () {
registerSlashCommand('world', onWorldInfoChange, [], '<span class="monospace">(optional name)</span> sets active World, or unsets if no args provided', true, true); registerSlashCommand('world', onWorldInfoChange, [], '<span class="monospace">[optional state=off|toggle] [optional silent=true] (optional name)</span> sets active World, or unsets if no args provided, use <code>state=off</code> and <code>state=toggle</code> to deactivate or toggle a World, use <code>silent=true</code> to suppress toast messages', true, true);
}); });