[feat] add automark
This commit is contained in:
@@ -343,5 +343,6 @@ export const languageEnglish = {
|
||||
creationSuccess: "Creation Success",
|
||||
noweb: "This feature cannot be used on web version.",
|
||||
createBotInternet: "Create Bot from Internet with AI",
|
||||
createBotInternetAlert: "Please provide the character's name and the corresponding series/game."
|
||||
createBotInternetAlert: "Please provide the character's name and the corresponding series/game.",
|
||||
able:"Able"
|
||||
}
|
||||
@@ -4,56 +4,58 @@
|
||||
import { alertConfirm } from "src/ts/alert";
|
||||
import { DataBase } from "src/ts/storage/database";
|
||||
import { importPlugin } from "src/ts/plugins/plugins";
|
||||
import Check from "src/lib/Others/Check.svelte";
|
||||
|
||||
</script>
|
||||
<h2 class="mb-2 text-2xl font-bold mt-2">{language.plugin}</h2>
|
||||
|
||||
<span class="text-draculared text-xs mb-4">{language.pluginWarn}</span>
|
||||
|
||||
|
||||
<div class="border-solid border-borderc p-2 flex flex-col border-1">
|
||||
{#if $DataBase.plugins.length === 0}
|
||||
<span class="text-gray-500">No Plugins</span>
|
||||
{:else}
|
||||
{#each $DataBase.plugins as plugin, i}
|
||||
{#if i !== 0}
|
||||
<div class="border-borderc mt-2 mb-2 w-full border-solid border-b-1 seperator"></div>
|
||||
{/if}
|
||||
<div class="flex">
|
||||
<span class="font-bold flex-grow">{plugin.displayName ?? plugin.name}</span>
|
||||
<button class="gray-500 hover:gray-200 cursor-pointer" on:click={async () => {
|
||||
const v = await alertConfirm(language.removeConfirm + (plugin.displayName ?? plugin.name))
|
||||
if(v){
|
||||
if($DataBase.currentPluginProvider === plugin.name){
|
||||
$DataBase.currentPluginProvider = ''
|
||||
}
|
||||
let plugins = $DataBase.plugins
|
||||
plugins.splice(i, 1)
|
||||
$DataBase.plugins = plugins
|
||||
}
|
||||
}}>
|
||||
<TrashIcon />
|
||||
</button>
|
||||
</div>
|
||||
{#if Object.keys(plugin.arguments).length > 0}
|
||||
<div class="flex flex-col mt-2 bg-dark-900 bg-opacity-50 p-3">
|
||||
{#each Object.keys(plugin.arguments) as arg}
|
||||
<span>{arg}</span>
|
||||
{#if Array.isArray(plugin.arguments[arg])}
|
||||
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none" bind:value={$DataBase.plugins[i].realArg[arg]}>
|
||||
{#each plugin.arguments[arg] as a}
|
||||
<option value={a} class="bg-darkbg appearance-none">a</option>
|
||||
{/each}
|
||||
</select>
|
||||
{:else if plugin.arguments[arg] === 'string'}
|
||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" bind:value={$DataBase.plugins[i].realArg[arg]}>
|
||||
{:else if plugin.arguments[arg] === 'int'}
|
||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="number" bind:value={$DataBase.plugins[i].realArg[arg]}>
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
{/each}
|
||||
{/if}
|
||||
<div class="flex">
|
||||
<span class="font-bold flex-grow">AutoMark <span class="text-green-500 italic">(Official Plugin)</span></span>
|
||||
</div>
|
||||
<div class="flex items-center mt-2">
|
||||
<Check bind:check={$DataBase.officialplugins.automark} name={language.able}/>
|
||||
</div>
|
||||
{#each $DataBase.plugins as plugin, i}
|
||||
<div class="border-borderc mt-2 mb-2 w-full border-solid border-b-1 seperator"></div>
|
||||
<div class="flex">
|
||||
<span class="font-bold flex-grow">{plugin.displayName ?? plugin.name}</span>
|
||||
<button class="gray-500 hover:gray-200 cursor-pointer" on:click={async () => {
|
||||
const v = await alertConfirm(language.removeConfirm + (plugin.displayName ?? plugin.name))
|
||||
if(v){
|
||||
if($DataBase.currentPluginProvider === plugin.name){
|
||||
$DataBase.currentPluginProvider = ''
|
||||
}
|
||||
let plugins = $DataBase.plugins
|
||||
plugins.splice(i, 1)
|
||||
$DataBase.plugins = plugins
|
||||
}
|
||||
}}>
|
||||
<TrashIcon />
|
||||
</button>
|
||||
</div>
|
||||
{#if Object.keys(plugin.arguments).length > 0}
|
||||
<div class="flex flex-col mt-2 bg-dark-900 bg-opacity-50 p-3">
|
||||
{#each Object.keys(plugin.arguments) as arg}
|
||||
<span>{arg}</span>
|
||||
{#if Array.isArray(plugin.arguments[arg])}
|
||||
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none" bind:value={$DataBase.plugins[i].realArg[arg]}>
|
||||
{#each plugin.arguments[arg] as a}
|
||||
<option value={a} class="bg-darkbg appearance-none">a</option>
|
||||
{/each}
|
||||
</select>
|
||||
{:else if plugin.arguments[arg] === 'string'}
|
||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" bind:value={$DataBase.plugins[i].realArg[arg]}>
|
||||
{:else if plugin.arguments[arg] === 'int'}
|
||||
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="number" bind:value={$DataBase.plugins[i].realArg[arg]}>
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
<div class="text-gray-500 mt-2 flex">
|
||||
<button on:click={() => {
|
||||
|
||||
@@ -4,49 +4,22 @@ const reg:[RegExp,string][] = []
|
||||
export function autoMarkPlugin(data:string){
|
||||
if(reg.length === 0){
|
||||
const pluginRegex = [
|
||||
{
|
||||
"in": "“|”",
|
||||
"out": "\"",
|
||||
"flag": "g"
|
||||
},
|
||||
{
|
||||
"in": "‘|’",
|
||||
"out": "'",
|
||||
"flag": "g"
|
||||
},
|
||||
{
|
||||
"in": "^(?!\\d\\.)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])|(?<=^\\[.*\\] *|^\\(.*\\) *)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])",
|
||||
"out": "<em>$1$2",
|
||||
"flag": "gm"
|
||||
},
|
||||
{
|
||||
"in": "(?<!^ +.*)(\".*|<em>.*)(?<!\")$",
|
||||
"out": "$1</em>",
|
||||
"flag": "gm"
|
||||
},
|
||||
{
|
||||
"in": "(?<=<em>.*|^\".*)( +\"[\\S])|(?<=<em>.*|\" +.*)( *\\[)",
|
||||
"out": "</em>$1$2",
|
||||
"flag": "gm"
|
||||
},
|
||||
{
|
||||
"in": "(?<=^\".*|<\\/em>.*)([\\S]\" +|[\\S]\"(?=[,.…ㄱ-ㅎ가-힣]))|(?<=<\\/em>.*)( *\\] *)",
|
||||
"out": "$1$2<em>",
|
||||
"flag": "gm"
|
||||
},
|
||||
{
|
||||
"in": "(?<=<em>.*? +|\\[|\\[.* +|\\(|\\(.* +|\"|\".*? +)(?<!style=.*)(')|(?<=<em>)('[\\wㄱ-ㅎ가-힣])",
|
||||
"out": "<strong><em>$1$2",
|
||||
"flag": "gm"
|
||||
},
|
||||
{
|
||||
"in": "(?<=<strong><em>')(.*?')(?= +.+?|[ㄱ-ㅎ가-힣?!:;,.…—-])|(?<=<strong><em>'.*)(')(?=<\\/em>|\")|(?<=\\(<strong><em>')(?=\\))",
|
||||
"out": "$1$2</em></strong>",
|
||||
"flag": "gm"
|
||||
}
|
||||
{"comment":"──── ▼ Head 스크립트 ▼ ───────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false,"flag":"g"},
|
||||
{"comment":"[ 💱 ]ㅤ구조변환 #1ㅤ=ㅤ대사 부호 수정","in":"“|”","out":"\"","type":"editdisplay","ableFlag":false},
|
||||
{"comment":"[ 💱 ]ㅤ구조변환 #2ㅤ=ㅤ생각 부호 수정","in":"‘|’","out":"'","type":"editdisplay","ableFlag":false},
|
||||
{"comment":"──── ▼ Auto 스크립트 ▼ ───────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false,"flag":"g"},
|
||||
{"comment":"[ 🧷 ]ㅤ이탈릭체 #1ㅤ=ㅤ문장 앞 묶음 추가","in":"^(?!\\d\\.)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])|(?<=^\\[.*\\] *|^\\(.*\\) *)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])","out":"<em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
|
||||
{"comment":"[ 🧷 ]ㅤ이탈릭체 #2ㅤ=ㅤ문장 뒤 묶음 추가","in":"(?<!^ +.*)(\".*|<em>.*)(?<!\")$","out":"$1</em>","type":"editdisplay","ableFlag":true,"flag":"gm"},
|
||||
{"comment":"[ 🧷 ]ㅤ대사묶음 #1ㅤ=ㅤ대사 앞 묶음 추가","in":"(?<=<em>.*|^\".*)( +\"[\\S])|(?<=<em>.*|\" +.*)( *\\[)","out":"</em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
|
||||
{"comment":"[ 🧷 ]ㅤ대사묶음 #2ㅤ=ㅤ대사 뒤 묶음 추가","in":"(?<=^\".*|<\\/em>.*)([\\S]\" +|[\\S]\"(?=[,.…ㄱ-ㅎ가-힣]))|(?<=<\\/em>.*)( *\\] *)","out":"$1$2<em>","type":"editdisplay","ableFlag":true,"flag":"gm"},
|
||||
{"comment":"[ 🧷 ]ㅤ생각묶음 #1ㅤ=ㅤ생각 앞 묶음 추가","in":"(?<=<em>.*? +|\\[|\\[.* +|\\(|\\(.* +|\"|\".*? +)(?<!style=.*)(')|(?<=<em>)('[\\wㄱ-ㅎ가-힣])","out":"<strong><em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
|
||||
{"comment":"[ 🧷 ]ㅤ생각묶음 #2ㅤ=ㅤ생각 뒤 묶음 추가","in":"(?<=<strong><em>')(.*?')(?= +.+?|[ㄱ-ㅎ가-힣?!:;,.…—-])|(?<=<strong><em>'.*)(')(?=<\\/em>|\")|(?<=\\(<strong><em>')(?=\\))","out":"$1$2</em></strong>","type":"editdisplay","ableFlag":true,"flag":"gm"},
|
||||
{"comment":"──── ▼ Key 스크립트 ▼ ────────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false},
|
||||
{"comment":"[ 📝 ]ㅤ추가핫키 #1ㅤ=ㅤ따옴표 추가 : (`)","in":"(?<!`)`(?!`)","out":"\"","type":"editinput","ableFlag":false},
|
||||
{"comment":"[ 📝 ]ㅤ추가핫키 #2ㅤ=ㅤOOC 추가 : (``)","in":"^``(?!`) *(.*)$","out":"(OOC: $1)","type":"editinput","ableFlag":true,"flag":"gm"}
|
||||
]
|
||||
for(const r of pluginRegex){
|
||||
reg.push([new RegExp(r.in, r.flag),r.out])
|
||||
reg.push([new RegExp(r.in, r.ableFlag ? r.flag : 'g'),r.out])
|
||||
}
|
||||
}
|
||||
for(let i=0;i<reg.length;i++){
|
||||
|
||||
@@ -6,6 +6,7 @@ import { alertError, alertNormal } from "../alert";
|
||||
import { language } from "src/lang";
|
||||
import { selectSingleFile } from "../util";
|
||||
import { risuChatParser as risuChatParserOrg } from "../parser";
|
||||
import { autoMarkPlugin } from "../plugins/automark";
|
||||
|
||||
const dreg = /{{data}}/g
|
||||
const randomness = /\|\|\|/g
|
||||
@@ -139,6 +140,9 @@ export function processScriptFull(char:character|groupChat, data:string, mode:Sc
|
||||
}
|
||||
}
|
||||
}
|
||||
if(db.officialplugins.automark){
|
||||
data = autoMarkPlugin(data)
|
||||
}
|
||||
return {data, emoChanged}
|
||||
}
|
||||
|
||||
|
||||
@@ -281,6 +281,7 @@ export function setDatabase(data:Database){
|
||||
data.openrouterKey ??= ''
|
||||
data.openrouterRequestModel ??= 'openai/gpt-3.5-turbo'
|
||||
data.toggleConfirmRecommendedPreset ??= true
|
||||
data.officialplugins ??= {}
|
||||
changeLanguage(data.language)
|
||||
DataBase.set(data)
|
||||
}
|
||||
@@ -465,6 +466,9 @@ export interface Database{
|
||||
language: string
|
||||
translator: string
|
||||
plugins: RisuPlugin[]
|
||||
officialplugins: {
|
||||
automark?: boolean
|
||||
}
|
||||
currentPluginProvider: string
|
||||
zoomsize:number
|
||||
lastup:string
|
||||
|
||||
Reference in New Issue
Block a user