feat: shuffle macro
This commit is contained in:
@@ -24,7 +24,7 @@ Get a random word from a WordList. can be used as a Macro or a Placeholder. Macr
|
||||
|
||||
### Shuffle
|
||||
|
||||
Shuffle a list of values. can be used as Placeholder only. Placeholder format: `%%Shuffle::Value1::Value2::Value3;;separator%%`. Example: `%%Shuffle::Value1::Value2::Value3;;, %%` will return `Value3, Value1, Value2`.
|
||||
Shuffle a list of values. can be used as Placeholder only. Macro format: `{{Shuffle::Value1::Value2::Value3;;separator}}`. Placeholder format: `%%Shuffle::Value1::Value2::Value3;;separator%%`. Example: `%%Shuffle::Value1::Value2::Value3;;, %%` will return `Value3, Value1, Value2`.
|
||||
|
||||
### Pick
|
||||
|
||||
|
||||
108
dist/index.js
vendored
108
dist/index.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,7 +1,9 @@
|
||||
import { setupRandomWordMacros } from '@/services/randomWord'
|
||||
import { setupShuffleMacro } from '@/services/shuffle'
|
||||
|
||||
const initializeMacros = () => {
|
||||
setupRandomWordMacros()
|
||||
setupShuffleMacro()
|
||||
}
|
||||
|
||||
export default initializeMacros
|
||||
|
||||
@@ -10,6 +10,42 @@ const fishersYatesShuffle = <Type>(arr: Type[]): Type[] => {
|
||||
}
|
||||
return shuffled
|
||||
}
|
||||
export const setupShuffleMacro = () => {
|
||||
const { macros } = SillyTavern.getContext()
|
||||
|
||||
macros.register('shuffle', {
|
||||
category: 'random',
|
||||
description:
|
||||
'Shuffle a list of items, last item can contain a separator with the \"item;;separator\" format',
|
||||
returns: 'A shuffled list of items',
|
||||
exampleUsage: [
|
||||
`{{shuffle::item1::item2::item3}}`,
|
||||
`{{shuffle::lemon::orange::apple::banana;;, }}`
|
||||
],
|
||||
strictArgs: true,
|
||||
|
||||
list: { min: 1, max: Number.POSITIVE_INFINITY },
|
||||
handler: ({ raw, list }) => {
|
||||
if (
|
||||
raw === undefined ||
|
||||
list === null ||
|
||||
list === undefined ||
|
||||
list?.length === 0
|
||||
) {
|
||||
return ``
|
||||
}
|
||||
const items = raw.replace('shuffle::', '').split('::')
|
||||
const lastItem = items[items.length - 1] as string
|
||||
let separator = ''
|
||||
if (lastItem.includes(';;')) {
|
||||
const lastItemSeparator = lastItem.split(';;')
|
||||
items[items.length - 1] = lastItemSeparator[0] as string
|
||||
separator = lastItemSeparator[1] as string
|
||||
}
|
||||
return fishersYatesShuffle(items).join(separator)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const shufflePlaceholderRegex = /%%shuffle::([\w\W]*?)(;;[\w\W]*?)?%%/g
|
||||
|
||||
|
||||
Reference in New Issue
Block a user