diff --git a/src/lang/en.ts b/src/lang/en.ts index 25da1fca..b7fb3267 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -683,4 +683,5 @@ export const languageEnglish = { sizeAndSpeed: "Size and Speed", useLegacyGUI: "Use Legacy GUI", claudeCachingExperimental: "Claude Caching", + openClose: "Open/Close", } \ No newline at end of file diff --git a/src/lib/Setting/Pages/Module/ModuleMenu.svelte b/src/lib/Setting/Pages/Module/ModuleMenu.svelte index c8641df3..6cfab131 100644 --- a/src/lib/Setting/Pages/Module/ModuleMenu.svelte +++ b/src/lib/Setting/Pages/Module/ModuleMenu.svelte @@ -3,7 +3,7 @@ import TextInput from "src/lib/UI/GUI/TextInput.svelte"; import LoreBookData from "src/lib/SideBars/LoreBook/LoreBookData.svelte"; import type { RisuModule } from "src/ts/process/modules"; - import { PlusIcon } from "lucide-svelte"; + import { DownloadIcon, FolderUpIcon, PlusIcon } from "lucide-svelte"; import { alertConfirm } from "src/ts/alert"; import RegexList from "src/lib/SideBars/Scripts/RegexList.svelte"; import TriggerList from "src/lib/SideBars/Scripts/TriggerList.svelte"; @@ -13,6 +13,7 @@ import Button from "src/lib/UI/GUI/Button.svelte"; import { openURL } from "src/ts/storage/globalApi"; import { hubURL } from "src/ts/characterCards"; + import { exportRegex, importRegex } from "src/ts/process/scripts"; export let currentModule:RisuModule @@ -153,9 +154,17 @@ {#if (Array.isArray(currentModule.regex))} {language.regexScript} - +
+ + + +
{/if} {#if typeof(currentModule.backgroundEmbedding) === 'string'} diff --git a/src/lib/SideBars/CharConfig.svelte b/src/lib/SideBars/CharConfig.svelte index 554beb21..5227ef04 100644 --- a/src/lib/SideBars/CharConfig.svelte +++ b/src/lib/SideBars/CharConfig.svelte @@ -3,7 +3,7 @@ import { tokenizeAccurate } from "../../ts/tokenizer"; import { DataBase, saveImage as saveAsset, type Database, type character, type groupChat } from "../../ts/storage/database"; import { ShowRealmFrameStore, selectedCharID } from "../../ts/stores"; - import { PlusIcon, SmileIcon, TrashIcon, UserIcon, ActivityIcon, BookIcon, User, CurlyBraces, Volume2Icon } from 'lucide-svelte' + import { PlusIcon, SmileIcon, TrashIcon, UserIcon, ActivityIcon, BookIcon, User, CurlyBraces, Volume2Icon, DownloadIcon, FolderUpIcon } from 'lucide-svelte' import Check from "../UI/GUI/CheckInput.svelte"; import { addCharEmotion, addingEmotion, getCharImage, rmCharEmotion, selectCharImg, makeGroupImage, removeChar, changeCharImage } from "../../ts/characters"; import LoreBook from "./LoreBook/LoreBookSetting.svelte"; @@ -30,6 +30,8 @@ import { registerOnnxModel } from "src/ts/process/transformers"; import MultiLangInput from "../UI/GUI/MultiLangInput.svelte"; import { applyModule } from "src/ts/process/modules"; + import { exportRegex, importRegex } from "src/ts/process/scripts"; + import Arcodion from "../UI/Arcodion.svelte"; let subMenu = 0 @@ -564,18 +566,26 @@ {language.regexScript} - +
+ + + +
{language.triggerScript}
@@ -893,71 +903,72 @@
- {language.additionalAssets} -
- - - - - - {#if (!currentChar.data.additionalAssets) || currentChar.data.additionalAssets.length === 0} + +
+
{language.value} - -
-
No Assets
- - {:else} - {#each currentChar.data.additionalAssets as assets, i} - - - - + + for(const f of da){ + const img = f.data + const name = f.name + const extension = name.split('.').pop().toLowerCase() + const imgp = await saveAsset(img,'', extension) + currentChar.data.additionalAssets.push([name, imgp, extension]) + currentChar.data.additionalAssets = currentChar.data.additionalAssets + } + } + }}> + + + + + {#if (!currentChar.data.additionalAssets) || currentChar.data.additionalAssets.length === 0} + +
No Assets
- {/each} - {/if} -
- {#if assetFilePath[i] && database.useAdditionalAssetsPreview} - {#if assetFileExtensions[i] === 'mp4'} - - - {:else if assetFileExtensions[i] === 'mp3'} - - {:else} - {assets[0]}/ - {/if} - {/if} - - - {language.value} + -
-
+ {:else} + {#each currentChar.data.additionalAssets as assets, i} + + + {#if assetFilePath[i] && database.useAdditionalAssetsPreview} + {#if assetFileExtensions[i] === 'mp4'} + + + {:else if assetFileExtensions[i] === 'mp3'} + + {:else} + {assets[0]}/ + {/if} + {/if} + + + + + + + + {/each} + {/if} + + +
diff --git a/src/lib/UI/Arcodion.svelte b/src/lib/UI/Arcodion.svelte index 03d4418b..f2325716 100644 --- a/src/lib/UI/Arcodion.svelte +++ b/src/lib/UI/Arcodion.svelte @@ -18,7 +18,9 @@ on:click={() => { open = !open }} - >{name}{#if help} + > + {name} + {#if help} {/if} {#if open} diff --git a/src/ts/process/scripts.ts b/src/ts/process/scripts.ts index 488329a9..e3fe865b 100644 --- a/src/ts/process/scripts.ts +++ b/src/ts/process/scripts.ts @@ -20,9 +20,9 @@ export async function processScript(char:character|groupChat, data:string, mode: return (await processScriptFull(char, data, mode)).data } -export function exportRegex(){ +export function exportRegex(s?:customscript[]){ let db = get(DataBase) - const script = db.globalscript + const script = s ?? db.globalscript const data = Buffer.from(JSON.stringify({ type: 'regex', data: script @@ -31,22 +31,22 @@ export function exportRegex(){ alertNormal(language.successExport) } -export async function importRegex(){ +export async function importRegex(o?:customscript[]):Promise{ + o = o ?? [] const filedata = (await selectSingleFile(['json'])).data if(!filedata){ - return + return o } let db = get(DataBase) try { const imported= JSON.parse(Buffer.from(filedata).toString('utf-8')) if(imported.type === 'regex' && imported.data){ const datas:customscript[] = imported.data - const script = db.globalscript + const script = o for(const data of datas){ script.push(data) } - db.globalscript = script - setDatabase(db) + return o } else{ alertError("File invaid or corrupted") @@ -55,6 +55,7 @@ export async function importRegex(){ } catch (error) { alertError(`${error}`) } + return o } let bestMatchCache = new Map()