Merge branch 'kwaroran:main' into DebugHubProxy
This commit is contained in:
@@ -87,7 +87,16 @@ export async function downloadFile(name:string, dat:Uint8Array|ArrayBuffer|strin
|
|||||||
await writeFile(name, data, {baseDir: BaseDirectory.Download})
|
await writeFile(name, data, {baseDir: BaseDirectory.Download})
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
downloadURL(`data:png/image;base64,${Buffer.from(data).toString('base64')}`, name)
|
const blob = new Blob([data], { type: 'application/octet-stream' })
|
||||||
|
const url = URL.createObjectURL(blob)
|
||||||
|
|
||||||
|
downloadURL(url, name)
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
URL.revokeObjectURL(url)
|
||||||
|
}, 10000)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1239,6 +1239,11 @@ function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string
|
|||||||
case 'screen_height':{
|
case 'screen_height':{
|
||||||
return get(SizeStore).h.toString()
|
return get(SizeStore).h.toString()
|
||||||
}
|
}
|
||||||
|
case 'cbr':
|
||||||
|
case 'cnl':
|
||||||
|
case 'cnewline':{
|
||||||
|
return '\\n'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const arra = p1.split("::")
|
const arra = p1.split("::")
|
||||||
if(arra.length > 1){
|
if(arra.length > 1){
|
||||||
@@ -1677,6 +1682,32 @@ function basicMatcher (p1:string,matcherArg:matcherArg,vars:{[key:string]:string
|
|||||||
case 'hash':{
|
case 'hash':{
|
||||||
return ((pickHashRand(0, arra[1]) * 10000000) + 1).toFixed(0).padStart(7, '0')
|
return ((pickHashRand(0, arra[1]) * 10000000) + 1).toFixed(0).padStart(7, '0')
|
||||||
}
|
}
|
||||||
|
case 'randint':{
|
||||||
|
const min = Number(arra[1])
|
||||||
|
const max = Number(arra[2])
|
||||||
|
if(isNaN(min) || isNaN(max)){
|
||||||
|
return 'NaN'
|
||||||
|
}
|
||||||
|
return (Math.floor(Math.random() * (max - min + 1)) + min).toString()
|
||||||
|
}
|
||||||
|
case 'cbr':
|
||||||
|
case 'cnl':
|
||||||
|
case 'cnewline':{
|
||||||
|
return '\\n'.repeat(Number(arra[1]))
|
||||||
|
}
|
||||||
|
case 'dice':{
|
||||||
|
const notation = arra[1].split('d')
|
||||||
|
const num = Number(notation[0])
|
||||||
|
const sides = Number(notation[1])
|
||||||
|
if(isNaN(num) || isNaN(sides)){
|
||||||
|
return 'NaN'
|
||||||
|
}
|
||||||
|
let total = 0
|
||||||
|
for(let i = 0; i < num; i++){
|
||||||
|
total += Math.floor(Math.random() * sides) + 1
|
||||||
|
}
|
||||||
|
return total.toString()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(p1.startsWith('random')){
|
if(p1.startsWith('random')){
|
||||||
@@ -1877,7 +1908,7 @@ const legacyBlockMatcher = (p1:string,matcherArg:matcherArg) => {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
type blockMatch = 'ignore'|'parse'|'nothing'|'parse-pure'|'pure'|'each'|'function'|'pure-display'
|
type blockMatch = 'ignore'|'parse'|'nothing'|'parse-pure'|'pure'|'each'|'function'|'pure-display'|'normalize'
|
||||||
|
|
||||||
function parseArray(p1:string):string[]{
|
function parseArray(p1:string):string[]{
|
||||||
try {
|
try {
|
||||||
@@ -1923,6 +1954,10 @@ function blockStartMatcher(p1:string,matcherArg:matcherArg):{type:blockMatch,typ
|
|||||||
if(p1 === '#pure_display' || p1 === '#puredisplay'){
|
if(p1 === '#pure_display' || p1 === '#puredisplay'){
|
||||||
return {type:'pure-display'}
|
return {type:'pure-display'}
|
||||||
}
|
}
|
||||||
|
if(p1 === '#code'){
|
||||||
|
return {type:'normalize'}
|
||||||
|
|
||||||
|
}
|
||||||
if(p1.startsWith('#each')){
|
if(p1.startsWith('#each')){
|
||||||
let t2 = p1.substring(5).trim()
|
let t2 = p1.substring(5).trim()
|
||||||
if(t2.startsWith('as ')){
|
if(t2.startsWith('as ')){
|
||||||
@@ -1963,6 +1998,34 @@ function blockEndMatcher(p1:string,type:{type:blockMatch,type2?:string},matcherA
|
|||||||
case 'parse-pure':{
|
case 'parse-pure':{
|
||||||
return p1
|
return p1
|
||||||
}
|
}
|
||||||
|
case 'normalize':{
|
||||||
|
return p1Trimed.trim().replaceAll('\n','').replaceAll('\t','')
|
||||||
|
.replaceAll(/\\u([0-9A-Fa-f]{4})/g, (match, p1) => {
|
||||||
|
return String.fromCharCode(parseInt(p1, 16))
|
||||||
|
})
|
||||||
|
.replaceAll(/\\(.)/g, (match, p1) => {
|
||||||
|
switch(p1){
|
||||||
|
case 'n':
|
||||||
|
return '\n'
|
||||||
|
case 'r':
|
||||||
|
return '\r'
|
||||||
|
case 't':
|
||||||
|
return '\t'
|
||||||
|
case 'b':
|
||||||
|
return '\b'
|
||||||
|
case 'f':
|
||||||
|
return '\f'
|
||||||
|
case 'v':
|
||||||
|
return '\v'
|
||||||
|
case 'a':
|
||||||
|
return '\a'
|
||||||
|
case 'x':
|
||||||
|
return '\x00'
|
||||||
|
default:
|
||||||
|
return p1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
default:{
|
default:{
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
@@ -2124,7 +2187,7 @@ export function risuChatParser(da:string, arg:{
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(dat.startsWith('/')){
|
if(dat.startsWith('/') && !dat.startsWith('//')){
|
||||||
if(stackType[nested.length] === 5){
|
if(stackType[nested.length] === 5){
|
||||||
const blockType = blockNestType.get(nested.length)
|
const blockType = blockNestType.get(nested.length)
|
||||||
if( blockType.type === 'ignore' || blockType.type === 'pure' ||
|
if( blockType.type === 'ignore' || blockType.type === 'pure' ||
|
||||||
|
|||||||
@@ -74,9 +74,7 @@ function generateScriptCacheKey(scripts: customscript[], data: string, mode: Scr
|
|||||||
if(script.type !== mode){
|
if(script.type !== mode){
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
hash += `${script.flag?.includes('<cbs>') ?
|
hash += `${script.flag?.includes('<cbs>') ? risuChatParser(script.in, { chatID: chatID, cbsConditions }) : script.in}|||${script.out}${chatID}|||${script.flag ?? ''}|||${script.ableFlag ? 1 : 0}`;
|
||||||
risuChatParser(script.in, { chatID: chatID, cbsConditions }) :
|
|
||||||
script.in}|||${risuChatParser(script.out, { chatID: chatID, cbsConditions})}|||${script.flag ?? ''}|||${script.ableFlag ? 1 : 0}`;
|
|
||||||
}
|
}
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user