From b8821acb953a045798dd9383e6ec056e92022026 Mon Sep 17 00:00:00 2001 From: Succubyss <87207237+Succubyss@users.noreply.github.com> Date: Sat, 1 Feb 2025 14:37:41 -0600 Subject: [PATCH 1/7] add 'full' parameter to findGroupMemberId --- public/scripts/group-chats.js | 39 +++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index c0d7f39e9..750a11910 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -292,10 +292,11 @@ export function getGroupNames() { /** * Finds the character ID for a group member. - * @param {string} arg 0-based member index or character name - * @returns {number} 0-based character ID + * @param {number|string} arg 0-based member index or character name + * @param {Boolean} full Whether to return a key-value object containing extra data + * @returns {number|Object} 0-based character ID or key-value object if full is true */ -export function findGroupMemberId(arg) { +export function findGroupMemberId(arg, full) { arg = arg?.trim(); if (!arg) { @@ -311,15 +312,19 @@ export function findGroupMemberId(arg) { } const index = parseInt(arg); - const searchByName = isNaN(index); + const searchByString = isNaN(index); - if (searchByName) { - const memberNames = group.members.map(x => ({ name: characters.find(y => y.avatar === x)?.name, index: characters.findIndex(y => y.avatar === x) })); - const fuse = new Fuse(memberNames, { keys: ['name'] }); + if (searchByString) { + const memberNames = group.members.map(x => ({ + avatar: x, + name: characters.find(y => y.avatar === x)?.name, + index: characters.findIndex(y => y.avatar === x), + })); + const fuse = new Fuse(memberNames, { keys: ['avatar', 'name'] }); const result = fuse.search(arg); if (!result.length) { - console.warn(`WARN: No group member found with name ${arg}`); + console.warn(`WARN: No group member found using string ${arg}`); return; } @@ -330,9 +335,11 @@ export function findGroupMemberId(arg) { return; } - console.log(`Triggering group member ${chid} (${arg}) from search result`, result[0]); - return chid; - } else { + console.log(`Targeting group member ${chid} (${arg}) from search result`, result[0]); + + return !full ? chid : { ...{ id: chid }, ...result[0].item }; + } + else { const memberAvatar = group.members[index]; if (memberAvatar === undefined) { @@ -347,8 +354,14 @@ export function findGroupMemberId(arg) { return; } - console.log(`Triggering group member ${memberAvatar} at index ${index}`); - return chid; + console.log(`Targeting group member ${memberAvatar} at index ${index}`); + + return !full ? chid : { + id: chid, + avatar: memberAvatar, + name: characters.find(y => y.avatar === memberAvatar)?.name, + index: index, + }; } } From ea1d9e1d1aba2298976151367df5090f773b8127 Mon Sep 17 00:00:00 2001 From: Succubyss <87207237+Succubyss@users.noreply.github.com> Date: Sat, 1 Feb 2025 14:41:02 -0600 Subject: [PATCH 2/7] corrections to /member-* warnings --- public/scripts/slash-commands.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index 42f9c40d0..a2264b505 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -3081,7 +3081,7 @@ async function enableGroupMemberCallback(_, arg) { async function moveGroupMemberUpCallback(_, arg) { if (!selected_group) { - toastr.warning('Cannot run /memberup command outside of a group chat.'); + toastr.warning('Cannot run /member-up command outside of a group chat.'); return ''; } @@ -3098,7 +3098,7 @@ async function moveGroupMemberUpCallback(_, arg) { async function moveGroupMemberDownCallback(_, arg) { if (!selected_group) { - toastr.warning('Cannot run /memberdown command outside of a group chat.'); + toastr.warning('Cannot run /member-down command outside of a group chat.'); return ''; } From ae9296f98923ee89208a4665905a598db534fdb6 Mon Sep 17 00:00:00 2001 From: Succubyss <87207237+Succubyss@users.noreply.github.com> Date: Sat, 1 Feb 2025 14:43:08 -0600 Subject: [PATCH 3/7] =?UTF-8?q?/peek=E2=86=92/member-peek=20(with=20/peek?= =?UTF-8?q?=20alias)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/scripts/slash-commands.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index a2264b505..168442233 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -843,7 +843,8 @@ export function initDefaultSlashCommands() { helpString: 'Moves a group member down in the group chat list.', })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ - name: 'peek', + name: 'member-peek', + aliases: ['peek', 'memberpeek', 'peekmember'], callback: peekCallback, unnamedArgumentList: [ SlashCommandArgument.fromProps({ @@ -3047,7 +3048,7 @@ function performGroupMemberAction(chid, action) { async function disableGroupMemberCallback(_, arg) { if (!selected_group) { - toastr.warning('Cannot run /disable command outside of a group chat.'); + toastr.warning('Cannot run /member-disable command outside of a group chat.'); return ''; } @@ -3064,7 +3065,7 @@ async function disableGroupMemberCallback(_, arg) { async function enableGroupMemberCallback(_, arg) { if (!selected_group) { - toastr.warning('Cannot run /enable command outside of a group chat.'); + toastr.warning('Cannot run /member-enable command outside of a group chat.'); return ''; } @@ -3115,12 +3116,12 @@ async function moveGroupMemberDownCallback(_, arg) { async function peekCallback(_, arg) { if (!selected_group) { - toastr.warning('Cannot run /peek command outside of a group chat.'); + toastr.warning('Cannot run /member-peek command outside of a group chat.'); return ''; } if (is_group_generating) { - toastr.warning('Cannot run /peek command while the group reply is generating.'); + toastr.warning('Cannot run /member-peek command while the group reply is generating.'); return ''; } @@ -3137,7 +3138,7 @@ async function peekCallback(_, arg) { async function removeGroupMemberCallback(_, arg) { if (!selected_group) { - toastr.warning('Cannot run /memberremove command outside of a group chat.'); + toastr.warning('Cannot run /member-remove command outside of a group chat.'); return ''; } From a1abe14e02c0918411ba237af09363f4f836944b Mon Sep 17 00:00:00 2001 From: Succubyss <87207237+Succubyss@users.noreply.github.com> Date: Sat, 1 Feb 2025 14:44:09 -0600 Subject: [PATCH 4/7] add /member-get --- public/scripts/slash-commands.js | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index 168442233..c1d52cc08 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -733,6 +733,47 @@ export function initDefaultSlashCommands() { ], helpString: 'Unhides a message from the prompt.', })); + SlashCommandParser.addCommandObject(SlashCommand.fromProps({ + name: 'member-get', + aliases: ['getmember', 'memberget'], + callback: (async ({field}, arg) => { + if (!selected_group) { + toastr.warning('Cannot run /member-get command outside of a group chat.'); + return ''; + } + if (field === undefined) { + throw new Error('\'/member-get field=\' argument required!'); + } + if (!['name', 'index', 'id', 'avatar'].includes(field)) { + throw new Error(`Invalid '/member-get field=' argument '${field}' specified!`); + } + const isId = !isNaN(parseInt(arg)); + const groupMember = findGroupMemberId(arg, true); + if (!groupMember) { + toastr.warn(`No group member found using ${isId?'id':'string'} ${arg}`); + return ''; + } + return groupMember[field]; + }), + namedArgumentList: [ + SlashCommandNamedArgument.fromProps({ + name: 'field', + description: 'Whether to retrieve the name, index, id, or avatar.', + typeList: [ARGUMENT_TYPE.STRING], + isRequired: true, + enumList: ['name', 'index', 'id', 'avatar'], + }), + ], + unnamedArgumentList: [ + SlashCommandArgument.fromProps({ + description: 'member index (starts with 0), name, or avatar', + typeList: [ARGUMENT_TYPE.NUMBER, ARGUMENT_TYPE.STRING], + isRequired: true, + enumProvider: commonEnumProviders.groupMembers(), + }), + ], + helpString: 'Retrieves a group member\'s name, index, id, or avatar.', + })); SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'member-disable', callback: disableGroupMemberCallback, From d26f99b496121fce2b54344e17f788edd3a306c8 Mon Sep 17 00:00:00 2001 From: Succubyss <87207237+Succubyss@users.noreply.github.com> Date: Sat, 1 Feb 2025 15:44:14 -0600 Subject: [PATCH 5/7] full = false to prevent IDE complaints Co-authored-by: Wolfsblvt --- public/scripts/group-chats.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index 750a11910..8ba133eca 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -296,7 +296,7 @@ export function getGroupNames() { * @param {Boolean} full Whether to return a key-value object containing extra data * @returns {number|Object} 0-based character ID or key-value object if full is true */ -export function findGroupMemberId(arg, full) { +export function findGroupMemberId(arg, full = false) { arg = arg?.trim(); if (!arg) { From b35a74647085d3de1dc0e493aff87d2cc481f1cf Mon Sep 17 00:00:00 2001 From: Succubyss <87207237+Succubyss@users.noreply.github.com> Date: Sat, 1 Feb 2025 15:50:34 -0600 Subject: [PATCH 6/7] /member-get tweaks --- public/scripts/slash-commands.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index c1d52cc08..add43d6de 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -736,16 +736,18 @@ export function initDefaultSlashCommands() { SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'member-get', aliases: ['getmember', 'memberget'], - callback: (async ({field}, arg) => { + callback: (async ({field = 'name'}, arg) => { if (!selected_group) { toastr.warning('Cannot run /member-get command outside of a group chat.'); return ''; } - if (field === undefined) { - throw new Error('\'/member-get field=\' argument required!'); + if (field === '') { + toastr.warning('\'/member-get field=\' argument required!'); + return ''; } if (!['name', 'index', 'id', 'avatar'].includes(field)) { - throw new Error(`Invalid '/member-get field=' argument '${field}' specified!`); + toastr.warning('\'/member-get field=\' argument required!'); + return ''; } const isId = !isNaN(parseInt(arg)); const groupMember = findGroupMemberId(arg, true); @@ -761,6 +763,7 @@ export function initDefaultSlashCommands() { description: 'Whether to retrieve the name, index, id, or avatar.', typeList: [ARGUMENT_TYPE.STRING], isRequired: true, + defaultValue: 'name', enumList: ['name', 'index', 'id', 'avatar'], }), ], From 9c31c21d79f8275172886e19c213555ce6de98d1 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sun, 2 Feb 2025 00:47:12 +0200 Subject: [PATCH 7/7] Use SlashCommandEnumValue --- public/scripts/slash-commands.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index add43d6de..21a79875e 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -736,7 +736,7 @@ export function initDefaultSlashCommands() { SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'member-get', aliases: ['getmember', 'memberget'], - callback: (async ({field = 'name'}, arg) => { + callback: (async ({ field = 'name' }, arg) => { if (!selected_group) { toastr.warning('Cannot run /member-get command outside of a group chat.'); return ''; @@ -745,6 +745,8 @@ export function initDefaultSlashCommands() { toastr.warning('\'/member-get field=\' argument required!'); return ''; } + field = field.toString(); + arg = arg.toString(); if (!['name', 'index', 'id', 'avatar'].includes(field)) { toastr.warning('\'/member-get field=\' argument required!'); return ''; @@ -752,7 +754,7 @@ export function initDefaultSlashCommands() { const isId = !isNaN(parseInt(arg)); const groupMember = findGroupMemberId(arg, true); if (!groupMember) { - toastr.warn(`No group member found using ${isId?'id':'string'} ${arg}`); + toastr.warn(`No group member found using ${isId ? 'id' : 'string'} ${arg}`); return ''; } return groupMember[field]; @@ -764,7 +766,12 @@ export function initDefaultSlashCommands() { typeList: [ARGUMENT_TYPE.STRING], isRequired: true, defaultValue: 'name', - enumList: ['name', 'index', 'id', 'avatar'], + enumList: [ + new SlashCommandEnumValue('name', 'Character name'), + new SlashCommandEnumValue('index', 'Group member index'), + new SlashCommandEnumValue('avatar', 'Character avatar'), + new SlashCommandEnumValue('id', 'Character index'), + ], }), ], unnamedArgumentList: [