feat: persona binding
This commit is contained in:
@@ -6,7 +6,10 @@ import { Capacitor } from "@capacitor/core"
|
||||
import { DataBase, type MessageGenerationInfo } from "./storage/database"
|
||||
|
||||
interface alertData{
|
||||
type: 'error'| 'normal'|'none'|'ask'|'wait'|'selectChar'|'input'|'toast'|'wait2'|'markdown'|'select'|'login'|'tos'|'cardexport'|'requestdata'|'addchar'|'hypaV2'|'selectModule',
|
||||
type: 'error'|'normal'|'none'|'ask'|'wait'|'selectChar'
|
||||
|'input'|'toast'|'wait2'|'markdown'|'select'|'login'
|
||||
|'tos'|'cardexport'|'requestdata'|'addchar'|'hypaV2'|'selectModule'
|
||||
|'chatOptions',
|
||||
msg: string,
|
||||
submsg?: string
|
||||
}
|
||||
@@ -94,6 +97,21 @@ export async function alertAddCharacter() {
|
||||
return get(alertStore).msg
|
||||
}
|
||||
|
||||
export async function alertChatOptions() {
|
||||
alertStore.set({
|
||||
'type': 'chatOptions',
|
||||
'msg': language.chatOptions
|
||||
})
|
||||
while(true){
|
||||
if (get(alertStore).type === 'none'){
|
||||
break
|
||||
}
|
||||
await sleep(10)
|
||||
}
|
||||
|
||||
return parseInt(get(alertStore).msg)
|
||||
}
|
||||
|
||||
export async function alertLogin(){
|
||||
alertStore.set({
|
||||
'type': 'login',
|
||||
|
||||
@@ -6,6 +6,7 @@ import { downloadFile, readImage } from "./storage/globalApi"
|
||||
import { language } from "src/lang"
|
||||
import { reencodeImage } from "./process/files/image"
|
||||
import { PngChunk } from "./pngChunk"
|
||||
import { v4 } from "uuid"
|
||||
|
||||
export async function selectUserImg() {
|
||||
const selected = await selectSingleFile(['png'])
|
||||
@@ -17,21 +18,20 @@ export async function selectUserImg() {
|
||||
const imgp = await saveImage(img)
|
||||
db.userIcon = imgp
|
||||
db.personas[db.selectedPersona] = {
|
||||
name: getUserName(),
|
||||
name: db.username,
|
||||
icon: db.userIcon,
|
||||
personaPrompt: db.personaPrompt
|
||||
personaPrompt: db.personaPrompt,
|
||||
id: v4()
|
||||
}
|
||||
setDatabase(db)
|
||||
}
|
||||
|
||||
export function saveUserPersona() {
|
||||
let db = get(DataBase)
|
||||
db.personas[db.selectedPersona] = {
|
||||
name: getUserName(),
|
||||
icon: db.userIcon,
|
||||
personaPrompt: db.personaPrompt,
|
||||
largePortrait: db.personas[db.selectedPersona]?.largePortrait,
|
||||
}
|
||||
db.personas[db.selectedPersona].name=db.username
|
||||
db.personas[db.selectedPersona].icon=db.userIcon,
|
||||
db.personas[db.selectedPersona].personaPrompt=db.personaPrompt,
|
||||
db.personas[db.selectedPersona].largePortrait=db.personas[db.selectedPersona]?.largePortrait,
|
||||
setDatabase(db)
|
||||
}
|
||||
|
||||
@@ -111,7 +111,8 @@ export async function importUserPersona(){
|
||||
db.personas.push({
|
||||
name: data.name,
|
||||
icon: await saveImage(await reencodeImage(v.data)),
|
||||
personaPrompt: data.personaPrompt
|
||||
personaPrompt: data.personaPrompt,
|
||||
id: v4()
|
||||
})
|
||||
setDatabase(db)
|
||||
alertNormal(language.successImport)
|
||||
|
||||
@@ -595,6 +595,7 @@ export interface Database{
|
||||
name:string
|
||||
icon:string
|
||||
largePortrait?:boolean
|
||||
id?:string
|
||||
}[]
|
||||
assetWidth:number
|
||||
animationSpeed:number
|
||||
@@ -1005,6 +1006,7 @@ export interface Chat{
|
||||
scriptstate?:{[key:string]:string|number|boolean}
|
||||
modules?:string[]
|
||||
id?:string
|
||||
bindedPersona?:string
|
||||
}
|
||||
|
||||
export interface Message{
|
||||
|
||||
@@ -923,6 +923,11 @@ async function checkNewFormat() {
|
||||
return v
|
||||
})
|
||||
|
||||
db.personas = (db.personas ?? []).map((v) => {
|
||||
v.id ??= uuidv4()
|
||||
return v
|
||||
})
|
||||
|
||||
if(!db.formatversion){
|
||||
function checkParge(data:string){
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { get, writable, type Writable } from "svelte/store";
|
||||
import { DataBase, type Chat, type character, type groupChat } from "./storage/database";
|
||||
import { isEqual } from "lodash";
|
||||
import type { simpleCharacterArgument } from "./parser";
|
||||
import { getUserIcon, getUserName, sleep } from "./util";
|
||||
import { getUserIcon, getUserIconProtrait, getUserName, sleep } from "./util";
|
||||
import { getModules } from "./process/modules";
|
||||
|
||||
function updateSize(){
|
||||
@@ -43,6 +43,7 @@ export const OpenRealmStore = writable(false)
|
||||
export const ShowRealmFrameStore = writable('')
|
||||
export const PlaygroundStore = writable(0)
|
||||
export const HideIconStore = writable(false)
|
||||
export const UserIconProtrait = writable(false)
|
||||
let lastGlobalEnabledModules: string[] = []
|
||||
let lastChatEnabledModules: string[] = []
|
||||
let moduleHideIcon = false
|
||||
@@ -136,7 +137,10 @@ async function preInit(){
|
||||
CurrentUsername.set(getUserName())
|
||||
}
|
||||
if(getUserIcon() !== get(CurrentUserIcon)){
|
||||
CurrentUserIcon.set(data.userIcon)
|
||||
CurrentUserIcon.set(getUserIcon())
|
||||
}
|
||||
if(getUserIconProtrait() !== get(UserIconProtrait)){
|
||||
UserIconProtrait.set(getUserIconProtrait())
|
||||
}
|
||||
if(data.showMemoryLimit !== get(CurrentShowMemoryLimit)){
|
||||
CurrentShowMemoryLimit.set(data.showMemoryLimit)
|
||||
@@ -161,7 +165,15 @@ async function preInit(){
|
||||
characterHideIcon = char?.hideChatIcon
|
||||
HideIconStore.set(characterHideIcon || moduleHideIcon)
|
||||
}
|
||||
|
||||
if(getUserName() !== get(CurrentUsername)){
|
||||
CurrentUsername.set(getUserName())
|
||||
}
|
||||
if(getUserIcon() !== get(CurrentUserIcon)){
|
||||
CurrentUserIcon.set(getUserIcon())
|
||||
}
|
||||
if(getUserIconProtrait() !== get(UserIconProtrait)){
|
||||
UserIconProtrait.set(getUserIconProtrait())
|
||||
}
|
||||
if(charId === -1 || charId > db.characters.length){
|
||||
return
|
||||
}
|
||||
|
||||
@@ -107,21 +107,65 @@ export const replacePlaceholders = (msg:string, name:string) => {
|
||||
.replace(/(\{\{((set)|(get))var::.+?\}\})/gu,'')
|
||||
}
|
||||
|
||||
function checkPersonaBinded(){
|
||||
try {
|
||||
let db = get(DataBase)
|
||||
const selectedChar = get(selectedCharID)
|
||||
const character = db.characters[selectedChar]
|
||||
const chat = character.chats[character.chatPage]
|
||||
console.log(chat.bindedPersona)
|
||||
if(!chat.bindedPersona){
|
||||
return null
|
||||
}
|
||||
const persona = db.personas.find(v => v.id === chat.bindedPersona)
|
||||
console.log(db.personas, persona)
|
||||
return persona
|
||||
} catch (error) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export function getUserName(){
|
||||
const bindedPersona = checkPersonaBinded()
|
||||
if(bindedPersona){
|
||||
return bindedPersona.name
|
||||
}
|
||||
const db = get(DataBase)
|
||||
return db.username ?? 'User'
|
||||
}
|
||||
|
||||
export function getUserIcon(){
|
||||
const bindedPersona = checkPersonaBinded()
|
||||
console.log(`Icon: ${bindedPersona?.icon}`)
|
||||
if(bindedPersona){
|
||||
return bindedPersona.icon
|
||||
}
|
||||
const db = get(DataBase)
|
||||
return db.userIcon ?? ''
|
||||
}
|
||||
|
||||
export function getPersonaPrompt(){
|
||||
const bindedPersona = checkPersonaBinded()
|
||||
if(bindedPersona){
|
||||
return bindedPersona.personaPrompt
|
||||
}
|
||||
const db = get(DataBase)
|
||||
return db.personaPrompt ?? ''
|
||||
}
|
||||
|
||||
export function getUserIconProtrait(){
|
||||
try {
|
||||
const bindedPersona = checkPersonaBinded()
|
||||
if(bindedPersona){
|
||||
return bindedPersona.largePortrait
|
||||
}
|
||||
const db = get(DataBase)
|
||||
return db.personas[db.selectedPersona].largePortrait
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
export function checkIsIos(){
|
||||
return /(iPad|iPhone|iPod)/g.test(navigator.userAgent)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user