From de1c338f9a632cfcc3accaa12c636297ab623188 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Sun, 4 Jun 2023 05:58:58 +0900 Subject: [PATCH] [feat] realm upload and search --- src/lang/en.ts | 3 +- src/lib/SideBars/CharConfig.svelte | 19 +++---- src/lib/UI/Hub.svelte | 84 ++++++++++++++++++++++++------ src/lib/UI/HubUpload.svelte | 62 ++++++++++++++++++++++ src/ts/characterCards.ts | 58 +++++++++++++++------ src/ts/characters.ts | 6 +-- 6 files changed, 186 insertions(+), 46 deletions(-) create mode 100644 src/lib/UI/HubUpload.svelte diff --git a/src/lang/en.ts b/src/lang/en.ts index 0f9e8f13..5e46dfa9 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -299,5 +299,6 @@ export const languageEnglish = { loreRandomActivation: "Use Probability Condition", activationProbability: "Probability", shareCloud: "Share to RisuRealm", - hub: "RisuRealm" + hub: "RisuRealm", + tags: "Tags" } \ No newline at end of file diff --git a/src/lib/SideBars/CharConfig.svelte b/src/lib/SideBars/CharConfig.svelte index b1bc94a6..14ae070e 100644 --- a/src/lib/SideBars/CharConfig.svelte +++ b/src/lib/SideBars/CharConfig.svelte @@ -17,10 +17,11 @@ import { exportChar, shareRisuHub } from "src/ts/characterCards"; import { getElevenTTSVoices, getWebSpeechTTSVoices, getVOICEVOXVoices } from "src/ts/process/tts"; import { checkCharOrder } from "src/ts/storage/globalApi"; - import { addGroupChar, rmCharFromGroup } from "src/ts/process/group"; + import { addGroupChar, rmCharFromGroup } from "src/ts/process/group"; + import HubUpload from "../UI/HubUpload.svelte"; let subMenu = 0 - let subberMenu = 0 + let openHubUpload = false let emos:[string, string][] = [] let tokens = { desc: 0, @@ -118,7 +119,7 @@ - {#if currentChar.type === 'character'} @@ -665,12 +666,12 @@ }} class="text-neutral-200 mt-6 text-lg bg-transparent border-solid border-1 border-borderc p-4 hover:bg-green-500 transition-colors cursor-pointer">{language.exportCharacter} {#if $DataBase.useExperimental} - + + {/if} + {#if openHubUpload} + {openHubUpload=false}}/> {/if} {:else} {#if currentChar.data.chats[currentChar.data.chatPage].supaMemoryData && currentChar.data.chats[currentChar.data.chatPage].supaMemoryData.length > 4} diff --git a/src/lib/UI/Hub.svelte b/src/lib/UI/Hub.svelte index 89f20d45..3debb308 100644 --- a/src/lib/UI/Hub.svelte +++ b/src/lib/UI/Hub.svelte @@ -1,7 +1,7 @@ -
- {#await getRisuHub() then charas} - {#each charas as chara} - +
+ +
+ {#each charas as chara} + - {/each} - {/await} +
+ + {/each} @@ -37,13 +74,26 @@
- {openedData.name} + {openedData.name}

{openedData.name}

{openedData.desc}
- + +
+ {language.creatorNotes} + A description that displays when you search and when you first open a bot. + More than 20 characters. + + {language.tags} + Tags to search your character easily. latin alphabets only. seperate by comma. + { + tags = tags.replace(/[^a-zA-Z,]/g, '').toLocaleLowerCase() + }}> +
+ + +
+
+ + +
+ {#if nsfwMode} + Grotesque Contents and Child poronography would be banned. + {/if} + +
+
+ + + \ No newline at end of file diff --git a/src/ts/characterCards.ts b/src/ts/characterCards.ts index 0fc7fce0..db79bac7 100644 --- a/src/ts/characterCards.ts +++ b/src/ts/characterCards.ts @@ -431,7 +431,7 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array, mode?:'hub'|' loreSettings: loresettings, loreExt: loreExt, additionalData: { - tag: data.tags, + tag: data.tags ?? [], creator: data.creator, character_version: data.character_version }, @@ -482,15 +482,15 @@ async function createBaseV2(char:character) { spec_version: "2.0", data: { name: char.name, - description: char.desc, - personality: char.personality, - scenario: char.scenario, - first_mes: char.firstMessage, - mes_example: char.exampleMessage, - creator_notes: char.creatorNotes, - system_prompt: char.systemPrompt, - post_history_instructions: char.replaceGlobalNote, - alternate_greetings: char.alternateGreetings, + description: char.desc ?? '', + personality: char.personality ?? '', + scenario: char.scenario ?? '', + first_mes: char.firstMessage ?? '', + mes_example: char.exampleMessage ?? '', + creator_notes: char.creatorNotes ?? '', + system_prompt: char.systemPrompt ?? '', + post_history_instructions: char.replaceGlobalNote ?? '', + alternate_greetings: char.alternateGreetings ?? [], character_book: { scan_depth: char.loreSettings?.scanDepth, token_budget: char.loreSettings?.tokenBudget, @@ -498,7 +498,7 @@ async function createBaseV2(char:character) { extensions: char.loreExt ?? {}, entries: charBook }, - tags: char.additionalData?.tag ?? [], + tags: char.tags ?? [], creator: char.additionalData?.creator ?? '', character_version: `${char.additionalData?.character_version}` ?? '', extensions: { @@ -575,7 +575,29 @@ export async function exportSpecV2(char:character) { } } -export async function shareRisuHub(char:character) { +export async function shareRisuHub(char:character, arg:{ + nsfw: boolean, + privateMode:boolean + tag:string +}) { + char = cloneDeep(char) + + let tagList = arg.tag.split(',') + + if(arg.nsfw){ + tagList.push("NSFW") + } + if(arg.privateMode){ + tagList.push("private") + } + + + let tags = tagList.filter((v, i) => { + return (!!v) && (tagList.indexOf(v) === i) + }) + char.tags = tags + + let img = await readImage(char.image) try{ @@ -594,6 +616,8 @@ export async function shareRisuHub(char:character) { } + + if(card.data.extensions.risuai.additionalAssets && card.data.extensions.risuai.additionalAssets.length > 0){ for(let i=0;i { const da = await fetch(hubURL + '/hub/list', { method: "POST", - body: JSON.stringify({ - - }) + body: JSON.stringify(arg ?? {}) }) if(da.status !== 200){ return [] } + console.log(da) return da.json() } diff --git a/src/ts/characters.ts b/src/ts/characters.ts index 5380f15f..63a309d5 100644 --- a/src/ts/characters.ts +++ b/src/ts/characters.ts @@ -280,14 +280,14 @@ export function characterFormatUpdate(index:number|character){ cha.systemPrompt = cha.systemPrompt ?? '' cha.tags = cha.tags ?? [] cha.creator = cha.creator ?? '' - cha.characterVersion = cha.characterVersion ?? 0 + cha.characterVersion = cha.characterVersion ?? '' cha.personality = cha.personality ?? '' cha.scenario = cha.scenario ?? '' cha.firstMsgIndex = cha.firstMsgIndex ?? -1 cha.additionalData = cha.additionalData ?? { tag: [], creator: '', - character_version: 0 + character_version: '' } cha.voicevoxConfig = cha.voicevoxConfig ?? { SPEED_SCALE: 1, @@ -356,7 +356,7 @@ export function createBlankChar():character{ alternateGreetings:[], tags:[], creator:"", - characterVersion: 0, + characterVersion: '', personality:"", scenario:"", firstMsgIndex: -1,