mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Fix character renaming. Workaround for Node 20 bug. Adjust spec v2 fields
This commit is contained in:
		| @@ -818,7 +818,7 @@ async function printCharacters() { | |||||||
|         template.find('.avatar').attr('title', item.avatar); |         template.find('.avatar').attr('title', item.avatar); | ||||||
|         template.find('.ch_name').text(item.name); |         template.find('.ch_name').text(item.name); | ||||||
|         template.find('.ch_fav_icon').css("display", 'none'); |         template.find('.ch_fav_icon').css("display", 'none'); | ||||||
|         template.addClass(item.fav == "true" ? 'is_fav' : ''); |         template.toggleClass('is_fav', item.fav || item.fav == 'true'); | ||||||
|         template.find('.ch_fav').val(item.fav); |         template.find('.ch_fav').val(item.fav); | ||||||
|  |  | ||||||
|         // Display inline tags |         // Display inline tags | ||||||
| @@ -4348,7 +4348,7 @@ export function select_selected_character(chid) { | |||||||
|         this_avatar = getThumbnailUrl('avatar', characters[chid].avatar); |         this_avatar = getThumbnailUrl('avatar', characters[chid].avatar); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     updateFavButtonState(characters[chid].fav == "true"); |     updateFavButtonState(characters[chid].fav || characters[chid].fav == "true"); | ||||||
|  |  | ||||||
|     $("#avatar_load_preview").attr("src", this_avatar); |     $("#avatar_load_preview").attr("src", this_avatar); | ||||||
|     $("#name_div").removeClass('displayBlock'); |     $("#name_div").removeClass('displayBlock'); | ||||||
|   | |||||||
| @@ -201,7 +201,7 @@ async function convertSoloToGroupChat() { | |||||||
|     const members = [character.avatar]; |     const members = [character.avatar]; | ||||||
|     const activationStrategy = group_activation_strategy.NATURAL; |     const activationStrategy = group_activation_strategy.NATURAL; | ||||||
|     const allowSelfResponses = false; |     const allowSelfResponses = false; | ||||||
|     const favChecked = character.fav == 'true'; |     const favChecked = character.fav || character.fav == 'true'; | ||||||
|     const metadata = Object.assign({}, chat_metadata); |     const metadata = Object.assign({}, chat_metadata); | ||||||
|     delete metadata.main_chat; |     delete metadata.main_chat; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -954,7 +954,7 @@ function select_group_chats(groupId, skipAnimation) { | |||||||
|         template.find(".avatar img").attr("title", character.avatar); |         template.find(".avatar img").attr("title", character.avatar); | ||||||
|         template.find(".ch_name").text(character.name); |         template.find(".ch_name").text(character.name); | ||||||
|         template.attr("chid", characters.indexOf(character)); |         template.attr("chid", characters.indexOf(character)); | ||||||
|         template.addClass(character.fav == 'true' ? 'is_fav' : ''); |         template.toggleClass('is_fav', character.fav || character.fav == 'true'); | ||||||
|  |  | ||||||
|         if (!group) { |         if (!group) { | ||||||
|             template.find('[data-action="speak"]').hide(); |             template.find('[data-action="speak"]').hide(); | ||||||
|   | |||||||
							
								
								
									
										39
									
								
								server.js
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								server.js
									
									
									
									
									
								
							| @@ -3,6 +3,11 @@ | |||||||
| const process = require('process') | const process = require('process') | ||||||
| const yargs = require('yargs/yargs'); | const yargs = require('yargs/yargs'); | ||||||
| const { hideBin } = require('yargs/helpers'); | const { hideBin } = require('yargs/helpers'); | ||||||
|  | const net = require("net"); | ||||||
|  | // work around a node v20 bug: https://github.com/nodejs/node/issues/47822#issuecomment-1564708870 | ||||||
|  | if (net.setDefaultAutoSelectFamily) { | ||||||
|  |   net.setDefaultAutoSelectFamily(false); | ||||||
|  | } | ||||||
|  |  | ||||||
| const cliArguments = yargs(hideBin(process.argv)) | const cliArguments = yargs(hideBin(process.argv)) | ||||||
|     .option('ssl', { |     .option('ssl', { | ||||||
| @@ -716,7 +721,7 @@ function readFromV2(char) { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (!_.isUndefined(char[charField]) && !_.isUndefined(v2Value) && char[charField] !== v2Value) { |         if (!_.isUndefined(char[charField]) && !_.isUndefined(v2Value) && char[charField] !== v2Value) { | ||||||
|             console.debug(`Spec v2 data mismatch with Spec v1 for field: ${charField}`); |             console.debug(`Spec v2 data mismatch with Spec v1 for field: ${charField}`, char[charField], v2Value); | ||||||
|         } |         } | ||||||
|         char[charField] = v2Value; |         char[charField] = v2Value; | ||||||
|     }); |     }); | ||||||
| @@ -743,7 +748,7 @@ function charaFormatData(data) { | |||||||
|     _.set(char, 'avatar', 'none'); |     _.set(char, 'avatar', 'none'); | ||||||
|     _.set(char, 'chat', data.ch_name + ' - ' + humanizedISO8601DateTime()); |     _.set(char, 'chat', data.ch_name + ' - ' + humanizedISO8601DateTime()); | ||||||
|     _.set(char, 'talkativeness', data.talkativeness); |     _.set(char, 'talkativeness', data.talkativeness); | ||||||
|     _.set(char, 'fav', data.fav); |     _.set(char, 'fav', data.fav == 'true'); | ||||||
|     _.set(char, 'create_date', humanizedISO8601DateTime()); |     _.set(char, 'create_date', humanizedISO8601DateTime()); | ||||||
|  |  | ||||||
|     // Spec V2 fields |     // Spec V2 fields | ||||||
| @@ -767,13 +772,13 @@ function charaFormatData(data) { | |||||||
|  |  | ||||||
|     // ST extension fields to V2 object |     // ST extension fields to V2 object | ||||||
|     _.set(char, 'data.extensions.talkativeness', data.talkativeness); |     _.set(char, 'data.extensions.talkativeness', data.talkativeness); | ||||||
|     _.set(char, 'data.extensions.fav', data.fav); |     _.set(char, 'data.extensions.fav', data.fav == 'true'); | ||||||
|     //_.set(char, 'data.extensions.create_date', humanizedISO8601DateTime()); |     //_.set(char, 'data.extensions.create_date', humanizedISO8601DateTime()); | ||||||
|     //_.set(char, 'data.extensions.avatar', 'none'); |     //_.set(char, 'data.extensions.avatar', 'none'); | ||||||
|     //_.set(char, 'data.extensions.chat', data.ch_name + ' - ' + humanizedISO8601DateTime()); |     //_.set(char, 'data.extensions.chat', data.ch_name + ' - ' + humanizedISO8601DateTime()); | ||||||
|  |  | ||||||
|     // TODO: Character book |     // TODO: Character book | ||||||
|     _.set(char, 'data.character_book', undefined); |     _//.set(char, 'data.character_book', undefined); | ||||||
|  |  | ||||||
|     return char; |     return char; | ||||||
| } | } | ||||||
| @@ -840,10 +845,12 @@ app.post("/renamecharacter", jsonParser, async function (request, response) { | |||||||
|     const newChatsPath = path.join(chatsPath, newInternalName); |     const newChatsPath = path.join(chatsPath, newInternalName); | ||||||
|  |  | ||||||
|     try { |     try { | ||||||
|  |         const _ = require('lodash'); | ||||||
|         // Read old file, replace name int it |         // Read old file, replace name int it | ||||||
|         const rawOldData = await charaRead(oldAvatarPath); |         const rawOldData = await charaRead(oldAvatarPath); | ||||||
|         const oldData = json5.parse(rawOldData); |         const oldData = getCharaCardV2(json5.parse(rawOldData)); | ||||||
|         oldData['name'] = newName; |         _.set(oldData, 'data.name', newName); | ||||||
|  |         _.set(oldData, 'name', newName); | ||||||
|         const newData = JSON.stringify(oldData); |         const newData = JSON.stringify(oldData); | ||||||
|  |  | ||||||
|         // Write data to new location |         // Write data to new location | ||||||
| @@ -1002,14 +1009,7 @@ app.post("/getcharacters", jsonParser, function (request, response) { | |||||||
|         for (const item of pngFiles) { |         for (const item of pngFiles) { | ||||||
|             try { |             try { | ||||||
|                 var img_data = await charaRead(charactersPath + item); |                 var img_data = await charaRead(charactersPath + item); | ||||||
|                 let jsonObject = json5.parse(img_data); |                 let jsonObject = getCharaCardV2(json5.parse(img_data)); | ||||||
|  |  | ||||||
|                 if (jsonObject.spec === undefined) { |  | ||||||
|                     jsonObject = convertToV2(jsonObject); |  | ||||||
|                 } else { |  | ||||||
|                     jsonObject = readFromV2(jsonObject); |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 jsonObject.avatar = item; |                 jsonObject.avatar = item; | ||||||
|                 characters[i] = {}; |                 characters[i] = {}; | ||||||
|                 characters[i] = jsonObject; |                 characters[i] = jsonObject; | ||||||
| @@ -1183,6 +1183,15 @@ app.post("/savesettings", jsonParser, function (request, response) { | |||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | function getCharaCardV2(jsonObject) { | ||||||
|  |     if (jsonObject.spec === undefined) { | ||||||
|  |         jsonObject = convertToV2(jsonObject); | ||||||
|  |     } else { | ||||||
|  |         jsonObject = readFromV2(jsonObject); | ||||||
|  |     } | ||||||
|  |     return jsonObject; | ||||||
|  | } | ||||||
|  |  | ||||||
| function readAndParseFromDirectory(directoryPath, fileExtension = '.json') { | function readAndParseFromDirectory(directoryPath, fileExtension = '.json') { | ||||||
|     const files = fs |     const files = fs | ||||||
|         .readdirSync(directoryPath) |         .readdirSync(directoryPath) | ||||||
| @@ -1759,7 +1768,7 @@ app.post("/exportcharacter", jsonParser, async function (request, response) { | |||||||
|         case 'json': { |         case 'json': { | ||||||
|             try { |             try { | ||||||
|                 let json = await charaRead(filename); |                 let json = await charaRead(filename); | ||||||
|                 let jsonObject = json5.parse(json); |                 let jsonObject = getCharaCardV2(json5.parse(json)); | ||||||
|                 return response.type('json').send(jsonObject) |                 return response.type('json').send(jsonObject) | ||||||
|             } |             } | ||||||
|             catch { |             catch { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user