First steps in slash command piping

This commit is contained in:
Cohee 2023-11-22 00:39:17 +02:00
parent 1b4d955aec
commit 4b78ddbc8a
1 changed files with 29 additions and 2 deletions

View File

@ -84,7 +84,7 @@ class SlashCommandParser {
const key = match[1];
const value = match[2];
// Remove the quotes around the value, if any
argObj[key] = value.replace(/(^")|("$)/g, '');
argObj[key] = substituteParams(value.replace(/(^")|("$)/g, ''));
}
// Match unnamed argument
@ -157,11 +157,36 @@ parser.addCommand('memberup', moveGroupMemberUpCallback, ['upmember'], '<span cl
parser.addCommand('memberdown', moveGroupMemberDownCallback, ['downmember'], '<span class="monospace">(member index or name)</span> moves a group member down in the group chat list', true, true);
parser.addCommand('peek', peekCallback, [], '<span class="monospace">(message index or range)</span> shows a group member character card without switching chats', true, true);
parser.addCommand('delswipe', deleteSwipeCallback, [], '<span class="monospace">(optional 1-based id)</span> deletes a swipe from the last chat message. If swipe id not provided - deletes the current swipe.', true, true);
parser.addCommand('echo', echoCallback, [], '<span class="monospace">(text)</span> echoes the text to toast message. Useful for pipes debugging.', true, true);
parser.addCommand('gen', generateCallback, [], '<span class="monospace">(prompt)</span> generates text using the provided prompt and passes it to the next command through the pipe.', true, true);
const NARRATOR_NAME_KEY = 'narrator_name';
const NARRATOR_NAME_DEFAULT = 'System';
export const COMMENT_NAME_DEFAULT = 'Note';
async function generateCallback(_, arg) {
if (!arg) {
console.warn('WARN: No argument provided for /gen command');
return;
}
// Prevent generate recursion
$('#send_textarea').val('');
const result = await generateQuietPrompt(arg, false, false, '');
return result;
}
async function echoCallback(_, arg) {
if (!arg) {
console.warn('WARN: No argument provided for /echo command');
return;
}
toastr.info(arg);
return arg;
}
async function deleteSwipeCallback(_, arg) {
const lastMessage = chat[chat.length - 1];
@ -895,6 +920,7 @@ async function executeSlashCommands(text) {
const linesToRemove = [];
let interrupt = false;
let pipeResult = '';
for (let index = 0; index < lines.length; index++) {
const trimmedLine = lines[index].trim();
@ -914,7 +940,8 @@ async function executeSlashCommands(text) {
}
console.debug('Slash command executing:', result);
await result.command.callback(result.args, result.value);
const unnamedArg = pipeResult || result.value;
pipeResult = await result.command.callback(result.args, unnamedArg);
if (result.command.interruptsGeneration) {
interrupt = true;