[feat] add automark

This commit is contained in:
kwaroran
2023-07-18 00:28:44 +09:00
parent 44c81e10f9
commit 1d84f0cae1
5 changed files with 69 additions and 85 deletions

View File

@@ -343,5 +343,6 @@ export const languageEnglish = {
creationSuccess: "Creation Success", creationSuccess: "Creation Success",
noweb: "This feature cannot be used on web version.", noweb: "This feature cannot be used on web version.",
createBotInternet: "Create Bot from Internet with AI", 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"
} }

View File

@@ -4,56 +4,58 @@
import { alertConfirm } from "src/ts/alert"; import { alertConfirm } from "src/ts/alert";
import { DataBase } from "src/ts/storage/database"; import { DataBase } from "src/ts/storage/database";
import { importPlugin } from "src/ts/plugins/plugins"; import { importPlugin } from "src/ts/plugins/plugins";
import Check from "src/lib/Others/Check.svelte";
</script> </script>
<h2 class="mb-2 text-2xl font-bold mt-2">{language.plugin}</h2> <h2 class="mb-2 text-2xl font-bold mt-2">{language.plugin}</h2>
<span class="text-draculared text-xs mb-4">{language.pluginWarn}</span> <span class="text-draculared text-xs mb-4">{language.pluginWarn}</span>
<div class="border-solid border-borderc p-2 flex flex-col border-1"> <div class="border-solid border-borderc p-2 flex flex-col border-1">
{#if $DataBase.plugins.length === 0} <div class="flex">
<span class="text-gray-500">No Plugins</span> <span class="font-bold flex-grow">AutoMark <span class="text-green-500 italic">(Official Plugin)</span></span>
{:else} </div>
{#each $DataBase.plugins as plugin, i} <div class="flex items-center mt-2">
{#if i !== 0} <Check bind:check={$DataBase.officialplugins.automark} name={language.able}/>
<div class="border-borderc mt-2 mb-2 w-full border-solid border-b-1 seperator"></div> </div>
{/if} {#each $DataBase.plugins as plugin, i}
<div class="flex"> <div class="border-borderc mt-2 mb-2 w-full border-solid border-b-1 seperator"></div>
<span class="font-bold flex-grow">{plugin.displayName ?? plugin.name}</span> <div class="flex">
<button class="gray-500 hover:gray-200 cursor-pointer" on:click={async () => { <span class="font-bold flex-grow">{plugin.displayName ?? plugin.name}</span>
const v = await alertConfirm(language.removeConfirm + (plugin.displayName ?? plugin.name)) <button class="gray-500 hover:gray-200 cursor-pointer" on:click={async () => {
if(v){ const v = await alertConfirm(language.removeConfirm + (plugin.displayName ?? plugin.name))
if($DataBase.currentPluginProvider === plugin.name){ if(v){
$DataBase.currentPluginProvider = '' if($DataBase.currentPluginProvider === plugin.name){
} $DataBase.currentPluginProvider = ''
let plugins = $DataBase.plugins }
plugins.splice(i, 1) let plugins = $DataBase.plugins
$DataBase.plugins = plugins plugins.splice(i, 1)
} $DataBase.plugins = plugins
}}> }
<TrashIcon /> }}>
</button> <TrashIcon />
</div> </button>
{#if Object.keys(plugin.arguments).length > 0} </div>
<div class="flex flex-col mt-2 bg-dark-900 bg-opacity-50 p-3"> {#if Object.keys(plugin.arguments).length > 0}
{#each Object.keys(plugin.arguments) as arg} <div class="flex flex-col mt-2 bg-dark-900 bg-opacity-50 p-3">
<span>{arg}</span> {#each Object.keys(plugin.arguments) as arg}
{#if Array.isArray(plugin.arguments[arg])} <span>{arg}</span>
<select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none" bind:value={$DataBase.plugins[i].realArg[arg]}> {#if Array.isArray(plugin.arguments[arg])}
{#each plugin.arguments[arg] as a} <select class="bg-transparent input-text mt-2 mb-4 text-gray-200 appearance-none" bind:value={$DataBase.plugins[i].realArg[arg]}>
<option value={a} class="bg-darkbg appearance-none">a</option> {#each plugin.arguments[arg] as a}
{/each} <option value={a} class="bg-darkbg appearance-none">a</option>
</select> {/each}
{:else if plugin.arguments[arg] === 'string'} </select>
<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] === 'string'}
{:else if plugin.arguments[arg] === 'int'} <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" bind:value={$DataBase.plugins[i].realArg[arg]}>
<input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="number" bind:value={$DataBase.plugins[i].realArg[arg]}> {:else if plugin.arguments[arg] === 'int'}
{/if} <input class="text-neutral-200 p-2 bg-transparent input-text focus:bg-selected" type="number" bind:value={$DataBase.plugins[i].realArg[arg]}>
{/each} {/if}
</div> {/each}
{/if} </div>
{/each} {/if}
{/if} {/each}
</div> </div>
<div class="text-gray-500 mt-2 flex"> <div class="text-gray-500 mt-2 flex">
<button on:click={() => { <button on:click={() => {

View File

@@ -4,49 +4,22 @@ const reg:[RegExp,string][] = []
export function autoMarkPlugin(data:string){ export function autoMarkPlugin(data:string){
if(reg.length === 0){ if(reg.length === 0){
const pluginRegex = [ const pluginRegex = [
{ {"comment":"──── ▼ Head 스크립트 ▼ ───────────────────────────────────────────────","in":"","out":"","type":"editinput","ableFlag":false,"flag":"g"},
"in": "“|”", {"comment":"[ 💱 ]ㅤ구조변환 #1=ㅤ대사 부호 수정","in":"“|”","out":"\"","type":"editdisplay","ableFlag":false},
"out": "\"", {"comment":"[ 💱 ]ㅤ구조변환 #2=ㅤ생각 부호 수정","in":"|","out":"'","type":"editdisplay","ableFlag":false},
"flag": "g" {"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"},
"in": "|", {"comment":"[ 🧷 ]ㅤ대사묶음 #1=ㅤ대사 앞 묶음 추가","in":"(?<=<em>.*|^\".*)( +\"[\\S])|(?<=<em>.*|\" +.*)( *\\[)","out":"</em>$1$2","type":"editdisplay","ableFlag":true,"flag":"gm"},
"out": "'", {"comment":"[ 🧷 ]ㅤ대사묶음 #2=ㅤ대사 뒤 묶음 추가","in":"(?<=^\".*|<\\/em>.*)([\\S]\" +|[\\S]\"(?=[,.…ㄱ-ㅎ가-힣]))|(?<=<\\/em>.*)( *\\] *)","out":"$1$2<em>","type":"editdisplay","ableFlag":true,"flag":"gm"},
"flag": "g" {"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},
"in": "^(?!\\d\\.)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])|(?<=^\\[.*\\] *|^\\(.*\\) *)([\\wㄱ-ㅎ가-힣'])(?!.*[{<>}])", {"comment":"[ 📝 ]ㅤ추가핫키 #1=ㅤ따옴표 추가 : (`)","in":"(?<!`)`(?!`)","out":"\"","type":"editinput","ableFlag":false},
"out": "<em>$1$2", {"comment":"[ 📝 ]ㅤ추가핫키 #2=OOC 추가 : (``)","in":"^``(?!`) *(.*)$","out":"(OOC: $1)","type":"editinput","ableFlag":true,"flag":"gm"}
"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"
}
] ]
for(const r of pluginRegex){ 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++){ for(let i=0;i<reg.length;i++){

View File

@@ -6,6 +6,7 @@ import { alertError, alertNormal } from "../alert";
import { language } from "src/lang"; import { language } from "src/lang";
import { selectSingleFile } from "../util"; import { selectSingleFile } from "../util";
import { risuChatParser as risuChatParserOrg } from "../parser"; import { risuChatParser as risuChatParserOrg } from "../parser";
import { autoMarkPlugin } from "../plugins/automark";
const dreg = /{{data}}/g const dreg = /{{data}}/g
const randomness = /\|\|\|/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} return {data, emoChanged}
} }

View File

@@ -281,6 +281,7 @@ export function setDatabase(data:Database){
data.openrouterKey ??= '' data.openrouterKey ??= ''
data.openrouterRequestModel ??= 'openai/gpt-3.5-turbo' data.openrouterRequestModel ??= 'openai/gpt-3.5-turbo'
data.toggleConfirmRecommendedPreset ??= true data.toggleConfirmRecommendedPreset ??= true
data.officialplugins ??= {}
changeLanguage(data.language) changeLanguage(data.language)
DataBase.set(data) DataBase.set(data)
} }
@@ -465,6 +466,9 @@ export interface Database{
language: string language: string
translator: string translator: string
plugins: RisuPlugin[] plugins: RisuPlugin[]
officialplugins: {
automark?: boolean
}
currentPluginProvider: string currentPluginProvider: string
zoomsize:number zoomsize:number
lastup:string lastup:string