diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 98ce50bd..24457681 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -8,7 +8,7 @@
},
"package": {
"productName": "RisuAI",
- "version": "1.22.4"
+ "version": "1.23.0"
},
"tauri": {
"allowlist": {
diff --git a/src/lang/en.ts b/src/lang/en.ts
index f3e9ace4..5e46dfa9 100644
--- a/src/lang/en.ts
+++ b/src/lang/en.ts
@@ -65,7 +65,7 @@ export const languageEnglish = {
+ "\n\n- $(name)\n\n - inserts the named group"
+ "\n\nIf OUT starts with **@@**, it doesn't replaces the string, but instead does a special effect if matching string founds."
+ "\n\n- @@emo (emotion name)\n\n - if character is Emotion Images mode, sets (emotion name) as emotion and prevents default.",
- experimental: "This is a experimental setting. it might be unstable.",
+ experimental: "This is a experimental feature. it might be unstable.",
oogaboogaURL: "If your WebUI supports older version of api, your url should look *like https:.../run/textgen*\n\n"
+ "If your WebUI supports newVersion of api, your url should look like *https://.../api/v1/generate* and use the api server as host, and add --api to arguments.",
exampleMessage: "Example conversations that effects output of the character. it dosen't uses tokens permanently."
@@ -297,5 +297,8 @@ export const languageEnglish = {
talkness: "Talkativeness",
active: "Active",
loreRandomActivation: "Use Probability Condition",
- activationProbability: "Probability"
+ activationProbability: "Probability",
+ shareCloud: "Share to RisuRealm",
+ hub: "RisuRealm",
+ tags: "Tags"
}
\ No newline at end of file
diff --git a/src/lib/ChatScreens/DefaultChatScreen.svelte b/src/lib/ChatScreens/DefaultChatScreen.svelte
index 551df72f..8b3da038 100644
--- a/src/lib/ChatScreens/DefaultChatScreen.svelte
+++ b/src/lib/ChatScreens/DefaultChatScreen.svelte
@@ -3,9 +3,9 @@
import { DatabaseIcon, DicesIcon, LanguagesIcon, MenuIcon, MicOffIcon, PowerIcon, RefreshCcwIcon, ReplyIcon, Send } from "lucide-svelte";
import { selectedCharID } from "../../ts/stores";
import Chat from "./Chat.svelte";
- import { DataBase, appVer, type Message, type character } from "../../ts/storage/database";
+ import { DataBase, type Message } from "../../ts/storage/database";
import { getCharImage } from "../../ts/characters";
- import { doingChat, sendChat, type OpenAIChat } from "../../ts/process/index";
+ import { doingChat, sendChat } from "../../ts/process/index";
import { findCharacterbyId, messageForm, sleep } from "../../ts/util";
import { language } from "../../lang";
import { translate } from "../../ts/translator/translator";
@@ -13,9 +13,9 @@
import sendSound from '../../etc/send.mp3'
import {cloneDeep} from 'lodash'
import { processScript } from "src/ts/process/scripts";
- import GithubStars from "../Others/GithubStars.svelte";
import CreatorQuote from "./CreatorQuote.svelte";
import { stopTTS } from "src/ts/process/tts";
+ import MainMenu from '../UI/MainMenu.svelte';
let messageInput = ''
let openMenu = false
@@ -186,11 +186,7 @@
openMenu = false
}}>
{#if $selectedCharID < 0}
-
+ {
+ const conf = await alertConfirm('Report this character?')
+ if(conf){
+ const report = await alertInput('Write a report text that would be sent to the admin')
+ const da = await fetch(hubURL + '/hub/report', {
+ method: "POST",
+ body: JSON.stringify({
+ id: openedData.id,
+ report: report
+ })
+ })
+ alertNormal(await da.text())
+ }
+ }}>
+
+
+ {
+ downloadRisuHub(openedData.id)
+ openedData = null
+ }}>
+
+
+
+
+
+
+{/if}
+
+{#if menuOpen}
+
+
{
+ menuOpen = false
+ }}>
+
+
+
+ Menu
+
+ {menuOpen = false}}>
+
+
+
+
+ {
+ menuOpen = false
+ const id = await alertInput('Import ID')
+ downloadRisuHub(id)
+
+ }}>Import Character from ID
+
+
+{/if}
\ No newline at end of file
diff --git a/src/lib/UI/HubUpload.svelte b/src/lib/UI/HubUpload.svelte
new file mode 100644
index 00000000..40ba89dd
--- /dev/null
+++ b/src/lib/UI/HubUpload.svelte
@@ -0,0 +1,65 @@
+
+
+
+
+
+ Share {char.name} to {language.hub}
+
+
+
+
+
+
+ {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 non-adult characters with NSFW would be banned.
+ {/if}
+ {#if privateMode}
+ Private characters can be removed from the server if there is only a few downloads.
+ {/if}
+ {
+ if(char.creatorNotes.length < 20){
+ alertError("Creator Notes must be longer than 20 characters")
+ }
+ else{
+ shareRisuHub(char, {
+ privateMode: privateMode,
+ nsfw: nsfwMode,
+ tag: tags
+ })
+ close()
+ }
+ }} class="text-neutral-200 mt-2 text-lg bg-transparent border-solid border-1 border-borderc p-4 hover:bg-green-800 transition-colors cursor-pointer">{language.shareCloud}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/lib/UI/MainMenu.svelte b/src/lib/UI/MainMenu.svelte
new file mode 100644
index 00000000..101051bd
--- /dev/null
+++ b/src/lib/UI/MainMenu.svelte
@@ -0,0 +1,59 @@
+
+
+ Official Wiki for RisuAI. anyone can see and anyone who has github account can edit.
+
+ {sideBarStore.set(true)}}>
+
Your Characters
+ Opens your character list. you can open with pressing arrow button in top left corner too.
+
+ {#if $DataBase.useExperimental}
+ (openHub = true)}>
+
{language.hub}
+ Characters made and shared by the community
+
+ {:else}
+
+