[feat] time related syntaxes
This commit is contained in:
@@ -69,13 +69,15 @@
|
|||||||
|
|
||||||
cha.push({
|
cha.push({
|
||||||
role: 'user',
|
role: 'user',
|
||||||
data: processScript(char,messageInput,'editinput')
|
data: processScript(char,messageInput,'editinput'),
|
||||||
|
time: Date.now()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
cha.push({
|
cha.push({
|
||||||
role: 'user',
|
role: 'user',
|
||||||
data: messageInput
|
data: messageInput,
|
||||||
|
time: Date.now()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import DOMPurify from 'isomorphic-dompurify';
|
|||||||
import showdown from 'showdown';
|
import showdown from 'showdown';
|
||||||
import { Marked } from 'marked';
|
import { Marked } from 'marked';
|
||||||
|
|
||||||
import { DataBase, type Database, type character, type groupChat } from './storage/database';
|
import { DataBase, type Database, type Message, type character, type groupChat } from './storage/database';
|
||||||
import { getFileSrc } from './storage/globalApi';
|
import { getFileSrc } from './storage/globalApi';
|
||||||
import { processScript, processScriptFull } from './process/scripts';
|
import { processScript, processScriptFull } from './process/scripts';
|
||||||
import { get } from 'svelte/store';
|
import { get } from 'svelte/store';
|
||||||
@@ -442,6 +442,88 @@ const matcher = (p1:string,matcherArg:matcherArg) => {
|
|||||||
case 'none':{
|
case 'none':{
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
case 'time':{
|
||||||
|
if(chatID === -1){
|
||||||
|
return "[Cannot get time]"
|
||||||
|
}
|
||||||
|
|
||||||
|
const selchar = db.characters[get(selectedCharID)]
|
||||||
|
const chat = selchar.chats[selchar.chatPage]
|
||||||
|
const message = chat.message[chatID]
|
||||||
|
if(!message.time){
|
||||||
|
return "[Cannot get time, message was sent in older version]"
|
||||||
|
}
|
||||||
|
const date = new Date(message.time)
|
||||||
|
//output time in format like 10:30 AM
|
||||||
|
return date.toLocaleTimeString()
|
||||||
|
}
|
||||||
|
case 'date':{
|
||||||
|
if(chatID === -1){
|
||||||
|
return "[Cannot get time]"
|
||||||
|
}
|
||||||
|
const selchar = db.characters[get(selectedCharID)]
|
||||||
|
const chat = selchar.chats[selchar.chatPage]
|
||||||
|
const message = chat.message[chatID]
|
||||||
|
if(!message.time){
|
||||||
|
return "[Cannot get time, message was sent in older version]"
|
||||||
|
}
|
||||||
|
const date = new Date(message.time)
|
||||||
|
//output date in format like Aug 23, 2021
|
||||||
|
return date.toLocaleDateString()
|
||||||
|
}
|
||||||
|
case 'idle_duration':{
|
||||||
|
if(chatID === -1){
|
||||||
|
return "[Cannot get time]"
|
||||||
|
}
|
||||||
|
const selchar = db.characters[get(selectedCharID)]
|
||||||
|
const chat = selchar.chats[selchar.chatPage]
|
||||||
|
|
||||||
|
//get latest user message
|
||||||
|
let pointer = chatID
|
||||||
|
let pointerMode: 'findLast'|'findSecondLast' = 'findLast'
|
||||||
|
let message:Message
|
||||||
|
let previous_message:Message
|
||||||
|
while(pointer >= 0){
|
||||||
|
if(chat.message[pointer].role === 'user'){
|
||||||
|
if(pointerMode === 'findLast'){
|
||||||
|
message = chat.message[pointer]
|
||||||
|
pointerMode = 'findSecondLast'
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
previous_message = chat.message[pointer]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pointer--
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!message){
|
||||||
|
return '[No user message found]'
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!previous_message){
|
||||||
|
return '[No previous user message found]'
|
||||||
|
}
|
||||||
|
if(!message.time){
|
||||||
|
return "[Cannot get time, message was sent in older version]"
|
||||||
|
}
|
||||||
|
if(!previous_message.time){
|
||||||
|
return "[Cannot get time, previous message was sent in older version]"
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(message.time)
|
||||||
|
console.log(previous_message.time)
|
||||||
|
let duration = message.time - previous_message.time
|
||||||
|
//output time in format like 10:30:00
|
||||||
|
let seconds = Math.floor(duration / 1000)
|
||||||
|
let minutes = Math.floor(seconds / 60)
|
||||||
|
let hours = Math.floor(minutes / 60)
|
||||||
|
seconds = seconds % 60
|
||||||
|
minutes = minutes % 60
|
||||||
|
//output, like 1:30:00
|
||||||
|
return hours.toString() + ':' + minutes.toString().padStart(2,'0') + ':' + seconds.toString().padStart(2,'0')
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const arra = p1.split("::")
|
const arra = p1.split("::")
|
||||||
if(arra.length > 1){
|
if(arra.length > 1){
|
||||||
|
|||||||
@@ -614,7 +614,8 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
|
|||||||
db.characters[selectedChar].chats[selectedChat].message.push({
|
db.characters[selectedChar].chats[selectedChat].message.push({
|
||||||
role: 'char',
|
role: 'char',
|
||||||
data: "",
|
data: "",
|
||||||
saying: currentChar.chaId
|
saying: currentChar.chaId,
|
||||||
|
time: Date.now()
|
||||||
})
|
})
|
||||||
while(abortSignal.aborted === false){
|
while(abortSignal.aborted === false){
|
||||||
const readed = (await reader.read())
|
const readed = (await reader.read())
|
||||||
@@ -655,7 +656,8 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
|
|||||||
db.characters[selectedChar].chats[selectedChat].message.push({
|
db.characters[selectedChar].chats[selectedChat].message.push({
|
||||||
role: msg[0],
|
role: msg[0],
|
||||||
data: result,
|
data: result,
|
||||||
saying: currentChar.chaId
|
saying: currentChar.chaId,
|
||||||
|
time: Date.now()
|
||||||
})
|
})
|
||||||
db.characters[selectedChar].reloadKeys += 1
|
db.characters[selectedChar].reloadKeys += 1
|
||||||
await sayTTS(currentChar, result)
|
await sayTTS(currentChar, result)
|
||||||
|
|||||||
@@ -662,6 +662,7 @@ export interface Message{
|
|||||||
data: string
|
data: string
|
||||||
saying?: string
|
saying?: string
|
||||||
chatId?:string
|
chatId?:string
|
||||||
|
time?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
interface AINsettings{
|
interface AINsettings{
|
||||||
|
|||||||
Reference in New Issue
Block a user