mirror of
https://github.com/SilenceLurker/ST-Amily2-Chat-Optimisation.git
synced 2026-06-07 08:15:50 +00:00
Add files via upload
This commit is contained in:
@@ -31,7 +31,9 @@ import {
|
|||||||
name2,
|
name2,
|
||||||
addOneMessage,
|
addOneMessage,
|
||||||
messageFormatting,
|
messageFormatting,
|
||||||
substituteParamsExtended
|
substituteParamsExtended,
|
||||||
|
saveCharacterDebounced,
|
||||||
|
this_chid
|
||||||
} from "/script.js";
|
} from "/script.js";
|
||||||
import { getContext } from "/scripts/extensions.js";
|
import { getContext } from "/scripts/extensions.js";
|
||||||
import { executeSlashCommandsWithOptions } from '/scripts/slash-commands.js';
|
import { executeSlashCommandsWithOptions } from '/scripts/slash-commands.js';
|
||||||
@@ -489,6 +491,34 @@ class AmilyHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async deleteLorebookEntries(bookName, uids) {
|
||||||
|
try {
|
||||||
|
const bookData = await loadWorldInfo(bookName);
|
||||||
|
if (!bookData || !bookData.entries) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let deletedCount = 0;
|
||||||
|
for (const uid of uids) {
|
||||||
|
if (bookData.entries[uid]) {
|
||||||
|
delete bookData.entries[uid];
|
||||||
|
deletedCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deletedCount > 0) {
|
||||||
|
await saveWorldInfo(bookName, bookData, true);
|
||||||
|
reloadEditor(bookName);
|
||||||
|
console.log(`[Amily助手] 已从世界书《${bookName}》删除 ${deletedCount} 个条目`);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`[Amily助手] 删除世界书《${bookName}》条目时出错:`, error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async createLorebook(bookName) {
|
async createLorebook(bookName) {
|
||||||
try {
|
try {
|
||||||
if (world_names.includes(bookName)) {
|
if (world_names.includes(bookName)) {
|
||||||
@@ -537,6 +567,42 @@ class AmilyHelper {
|
|||||||
getLastMessageId() {
|
getLastMessageId() {
|
||||||
return chat.length - 1;
|
return chat.length - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将指定世界书绑定到当前角色
|
||||||
|
* @param {string} bookName 世界书名称
|
||||||
|
*/
|
||||||
|
async bindLorebookToCharacter(bookName) {
|
||||||
|
if (this_chid === undefined || !characters[this_chid]) {
|
||||||
|
console.warn('[Amily助手] 无法绑定世界书:未选中角色');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char = characters[this_chid];
|
||||||
|
if (!char.data) char.data = {};
|
||||||
|
if (!char.data.extensions) char.data.extensions = {};
|
||||||
|
|
||||||
|
// 确保 world 字段是数组
|
||||||
|
let worlds = char.data.extensions.world;
|
||||||
|
if (!Array.isArray(worlds)) {
|
||||||
|
worlds = worlds ? [worlds] : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!worlds.includes(bookName)) {
|
||||||
|
worlds.push(bookName);
|
||||||
|
char.data.extensions.world = worlds;
|
||||||
|
console.log(`[Amily助手] 已将世界书《${bookName}》绑定到角色 ${char.name}`);
|
||||||
|
|
||||||
|
if (typeof saveCharacterDebounced === 'function') {
|
||||||
|
saveCharacterDebounced();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
console.warn('[Amily助手] 无法保存角色数据:saveCharacterDebounced 不可用');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true; // 已经绑定
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const amilyHelper = new AmilyHelper();
|
export const amilyHelper = new AmilyHelper();
|
||||||
|
|||||||
Reference in New Issue
Block a user