[refactor] chat parser

This commit is contained in:
kwaroran
2023-07-25 05:15:50 +09:00
parent 0be072f35a
commit ebbaf28d77

View File

@@ -283,30 +283,11 @@ function wppParser(data:string){
const rgx = /(?:{{|<)(.+?)(?:}}|>)/gm const rgx = /(?:{{|<)(.+?)(?:}}|>)/gm
export function risuChatParser(da:string, arg:{ const matcher = (p1:string,matcherArg:{chatID:number,db:Database,chara:character|string,rmVar:boolean}) => {
chatID?:number
db?:Database
chara?:string|character|groupChat
rmVar?:boolean
} = {}):string{
const chatID = arg.chatID ?? -1
const db = arg.db ?? get(DataBase)
const aChara = arg.chara
let chara:character|string = null
if(aChara){
if(typeof(aChara) !== 'string' && aChara.type === 'group'){
const gc = findCharacterbyId(aChara.chats[aChara.chatPage].message.at(-1).saying ?? '')
if(gc.name !== 'Unknown Character'){
chara = gc
}
}
else{
chara = aChara
}
}
const matcher = (p1:string) => {
const lowerCased = p1.toLocaleLowerCase() const lowerCased = p1.toLocaleLowerCase()
const chatID = matcherArg.chatID
const db = matcherArg.db
const chara = matcherArg.chara
switch(lowerCased){ switch(lowerCased){
case 'previous_char_chat':{ case 'previous_char_chat':{
if(chatID !== -1){ if(chatID !== -1){
@@ -449,7 +430,7 @@ export function risuChatParser(da:string, arg:{
} }
case 'addvar': case 'addvar':
case 'setvar':{ case 'setvar':{
if(arg.rmVar){ if(matcherArg.rmVar){
return '' return ''
} }
break break
@@ -474,12 +455,70 @@ export function risuChatParser(da:string, arg:{
} }
} }
return null return null
}
const smMatcher = (p1:string,matcherArg:{db:Database,chara:character|string,rmVar:boolean}) => {
const lowerCased = p1.toLocaleLowerCase()
const db = matcherArg.db
const chara = matcherArg.chara
switch(lowerCased){
case 'char':
case 'bot':{
let selectedChar = get(selectedCharID)
let currentChar = db.characters[selectedChar]
if(currentChar.type !== 'group'){
return currentChar.name
} }
if(chara){
if(typeof(chara) === 'string'){
return chara
}
else{
return chara.name
}
}
return currentChar.name
}
case 'user':{
return db.username
}
}
}
export function risuChatParser(da:string, arg:{
chatID?:number
db?:Database
chara?:string|character|groupChat
rmVar?:boolean
} = {}):string{
const chatID = arg.chatID ?? -1
const db = arg.db ?? get(DataBase)
const aChara = arg.chara
let chara:character|string = null
if(aChara){
if(typeof(aChara) !== 'string' && aChara.type === 'group'){
const gc = findCharacterbyId(aChara.chats[aChara.chatPage].message.at(-1).saying ?? '')
if(gc.name !== 'Unknown Character'){
chara = gc
}
}
else{
chara = aChara
}
}
let pointer = 0; let pointer = 0;
let nested:string[] = [""] let nested:string[] = [""]
let pf = performance.now() let pf = performance.now()
let v = new Uint8Array(255) let v = new Uint8Array(255)
const matcherObj = {
chatID: chatID,
chara: chara,
rmVar: arg.rmVar ?? false,
db: db
}
while(pointer < da.length){ while(pointer < da.length){
switch(da[pointer]){ switch(da[pointer]){
case '{':{ case '{':{
@@ -504,7 +543,7 @@ export function risuChatParser(da:string, arg:{
} }
pointer++ pointer++
const dat = nested.shift() const dat = nested.shift()
const mc = matcher(dat) const mc = matcher(dat, matcherObj)
nested[0] += mc ?? `{{${dat}}}` nested[0] += mc ?? `{{${dat}}}`
break break
} }
@@ -513,7 +552,7 @@ export function risuChatParser(da:string, arg:{
break break
} }
const dat = nested.shift() const dat = nested.shift()
const mc = matcher(dat) const mc = smMatcher(dat, matcherObj)
nested[0] += mc ?? `<${dat}>` nested[0] += mc ?? `<${dat}>`
break break
} }