mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Message translate on edit
This commit is contained in:
@ -417,6 +417,7 @@ export const event_types = {
|
||||
MESSAGE_SWIPED: 'message_swiped',
|
||||
MESSAGE_SENT: 'message_sent',
|
||||
MESSAGE_RECEIVED: 'message_received',
|
||||
MESSAGE_EDITED: 'message_edited',
|
||||
IMPERSONATE_READY: 'impersonate_ready',
|
||||
}
|
||||
|
||||
@ -4042,39 +4043,8 @@ function setCharacterBlockHeight() {
|
||||
//should be set to an onload for rm_print_characters or windows?
|
||||
}
|
||||
|
||||
function messageEditAuto(div) {
|
||||
let mesBlock = div.closest(".mes_block");
|
||||
var text = mesBlock.find(".edit_textarea").val().trim();
|
||||
const bias = extractMessageBias(text);
|
||||
const mes = chat[this_edit_mes_id];
|
||||
mes["mes"] = text;
|
||||
if (mes["swipe_id"] !== undefined) {
|
||||
mes["swipes"][mes["swipe_id"]] = text;
|
||||
}
|
||||
|
||||
// editing old messages
|
||||
if (!mes["extra"]) {
|
||||
mes["extra"] = {};
|
||||
}
|
||||
|
||||
if (mes.is_system || mes.is_user || mes.extra.type === system_message_types.NARRATOR) {
|
||||
mes.extra.bias = bias ?? null;
|
||||
}
|
||||
else {
|
||||
mes.extra.bias = null;
|
||||
}
|
||||
|
||||
mesBlock.find(".mes_text").val('');
|
||||
mesBlock.find(".mes_text").val(messageFormatting(
|
||||
text,
|
||||
this_edit_mes_chname,
|
||||
mes.is_system,
|
||||
mes.is_user,
|
||||
));
|
||||
saveChatDebounced();
|
||||
}
|
||||
|
||||
function messageEditDone(div) {
|
||||
// Common code for message editor done and auto-save
|
||||
function updateMessage(div) {
|
||||
let mesBlock = div.closest(".mes_block");
|
||||
var text = mesBlock.find(".edit_textarea").val().trim();
|
||||
const bias = extractMessageBias(text);
|
||||
@ -4091,11 +4061,29 @@ function messageEditDone(div) {
|
||||
|
||||
if (mes.is_system || mes.is_user || mes.extra.type === system_message_types.NARRATOR) {
|
||||
mes.extra.bias = bias ?? null;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
mes.extra.bias = null;
|
||||
}
|
||||
|
||||
return { mesBlock, text, mes, bias };
|
||||
}
|
||||
|
||||
function messageEditAuto(div) {
|
||||
const { mesBlock, text, mes } = updateMessage(div);
|
||||
|
||||
mesBlock.find(".mes_text").val('');
|
||||
mesBlock.find(".mes_text").val(messageFormatting(
|
||||
text,
|
||||
this_edit_mes_chname,
|
||||
mes.is_system,
|
||||
mes.is_user,
|
||||
));
|
||||
saveChatDebounced();
|
||||
}
|
||||
|
||||
async function messageEditDone(div) {
|
||||
const { mesBlock, text, mes, bias } = updateMessage(div);
|
||||
|
||||
mesBlock.find(".mes_text").empty();
|
||||
mesBlock.find(".mes_edit_buttons").css("display", "none");
|
||||
mesBlock.find(".mes_buttons").css("display", "");
|
||||
@ -4111,6 +4099,8 @@ function messageEditDone(div) {
|
||||
mesBlock.find(".mes_bias").append(messageFormatting(bias));
|
||||
appendImageToMessage(mes, div.closest(".mes"));
|
||||
addCopyToCodeBlocks(div.closest(".mes"));
|
||||
await eventSource.emit(event_types.MESSAGE_EDITED, this_edit_mes_id);
|
||||
|
||||
this_edit_mes_id = undefined;
|
||||
saveChatConditional();
|
||||
}
|
||||
|
@ -17,6 +17,9 @@ const autoModeOptions = {
|
||||
BOTH: 'both',
|
||||
};
|
||||
|
||||
const incomingTypes = [autoModeOptions.RESPONSES, autoModeOptions.BOTH];
|
||||
const outgoingTypes = [autoModeOptions.INPUT, autoModeOptions.BOTH];
|
||||
|
||||
const defaultSettings = {
|
||||
target_language: 'en',
|
||||
internal_language: 'en',
|
||||
@ -274,6 +277,25 @@ async function onTranslationsClearClick() {
|
||||
await reloadCurrentChat();
|
||||
}
|
||||
|
||||
async function translateMessageEdit(messageId) {
|
||||
const context = getContext();
|
||||
const chat = context.chat;
|
||||
const message = chat[messageId];
|
||||
|
||||
if (message.is_system || extension_settings.translate.auto_mode == autoModeOptions.NONE) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((message.is_user && shouldTranslate(outgoingTypes)) || (!message.is_user && shouldTranslate(incomingTypes))) {
|
||||
await translateIncomingMessage(messageId);
|
||||
}
|
||||
}
|
||||
|
||||
const handleIncomingMessage = createEventHandler(translateIncomingMessage, () => shouldTranslate(incomingTypes));
|
||||
const handleOutgoingMessage = createEventHandler(translateOutgoingMessage, () => shouldTranslate(outgoingTypes));
|
||||
const handleImpersonateReady = createEventHandler(translateImpersonate, () => shouldTranslate(incomingTypes));
|
||||
const handleMessageEdit = createEventHandler(translateMessageEdit, () => true);
|
||||
|
||||
jQuery(() => {
|
||||
const html = `
|
||||
<div class="translation_settings">
|
||||
@ -339,17 +361,11 @@ jQuery(() => {
|
||||
|
||||
loadSettings();
|
||||
|
||||
const incomingTypes = [autoModeOptions.RESPONSES, autoModeOptions.BOTH];
|
||||
const outgoingTypes = [autoModeOptions.INPUT, autoModeOptions.BOTH];
|
||||
|
||||
const handleIncomingMessage = createEventHandler(translateIncomingMessage, () => shouldTranslate(incomingTypes));
|
||||
const handleOutgoingMessage = createEventHandler(translateOutgoingMessage, () => shouldTranslate(outgoingTypes));
|
||||
const handleImpersonateReady = createEventHandler(translateImpersonate, () => shouldTranslate(incomingTypes));
|
||||
|
||||
eventSource.on(event_types.MESSAGE_RECEIVED, handleIncomingMessage);
|
||||
eventSource.on(event_types.MESSAGE_SWIPED, handleIncomingMessage);
|
||||
eventSource.on(event_types.MESSAGE_SENT, handleOutgoingMessage);
|
||||
eventSource.on(event_types.IMPERSONATE_READY, handleImpersonateReady);
|
||||
eventSource.on(event_types.MESSAGE_EDITED, handleMessageEdit);
|
||||
|
||||
document.body.classList.add('translate');
|
||||
});
|
||||
|
20
server.js
20
server.js
@ -3034,7 +3034,6 @@ app.post('/horde_generateimage', jsonParser, async (request, response) => {
|
||||
|
||||
app.post('/google_translate', jsonParser, async (request, response) => {
|
||||
const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser');
|
||||
const https = require('https');
|
||||
|
||||
const text = request.body.text;
|
||||
const lang = request.body.lang;
|
||||
@ -3045,24 +3044,21 @@ app.post('/google_translate', jsonParser, async (request, response) => {
|
||||
|
||||
console.log('Input text: ' + text);
|
||||
|
||||
try {
|
||||
const url = generateRequestUrl(text, { to: lang });
|
||||
const resp = await fetch(url);
|
||||
|
||||
https.get(url, (resp) => {
|
||||
let data = '';
|
||||
if (!resp.ok) {
|
||||
throw new Error(resp.statusText);
|
||||
}
|
||||
|
||||
resp.on('data', (chunk) => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
resp.on('end', () => {
|
||||
const result = normaliseResponse(JSON.parse(data));
|
||||
const result = normaliseResponse(await resp.json());
|
||||
console.log('Translated text: ' + result.text);
|
||||
return response.send(result.text);
|
||||
});
|
||||
}).on("error", (err) => {
|
||||
} catch (err) {
|
||||
console.log("Translation error: " + err.message);
|
||||
return response.sendStatus(500);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function writeSecret(key, value) {
|
||||
|
Reference in New Issue
Block a user