啊
This commit is contained in:
104
modules/script-assistant.js
Normal file
104
modules/script-assistant.js
Normal file
@@ -0,0 +1,104 @@
|
||||
import { extension_settings, getContext } from "../../../../extensions.js";
|
||||
import { saveSettingsDebounced, setExtensionPrompt, extension_prompt_types } from "../../../../../script.js";
|
||||
import { EXT_ID, extensionFolderPath } from "../core/constants.js";
|
||||
import { createModuleEvents, event_types } from "../core/event-manager.js";
|
||||
|
||||
const SCRIPT_MODULE_NAME = "xiaobaix-script";
|
||||
const events = createModuleEvents('scriptAssistant');
|
||||
|
||||
function initScriptAssistant() {
|
||||
if (!extension_settings[EXT_ID].scriptAssistant) {
|
||||
extension_settings[EXT_ID].scriptAssistant = { enabled: false };
|
||||
}
|
||||
|
||||
if (window['registerModuleCleanup']) {
|
||||
window['registerModuleCleanup']('scriptAssistant', cleanup);
|
||||
}
|
||||
|
||||
$('#xiaobaix_script_assistant').on('change', function() {
|
||||
let globalEnabled = true;
|
||||
try { if ('isXiaobaixEnabled' in window) globalEnabled = Boolean(window['isXiaobaixEnabled']); } catch {}
|
||||
if (!globalEnabled) return;
|
||||
|
||||
const enabled = $(this).prop('checked');
|
||||
extension_settings[EXT_ID].scriptAssistant.enabled = enabled;
|
||||
saveSettingsDebounced();
|
||||
|
||||
if (enabled) {
|
||||
if (typeof window['injectScriptDocs'] === 'function') window['injectScriptDocs']();
|
||||
} else {
|
||||
if (typeof window['removeScriptDocs'] === 'function') window['removeScriptDocs']();
|
||||
cleanup();
|
||||
}
|
||||
});
|
||||
|
||||
$('#xiaobaix_script_assistant').prop('checked', extension_settings[EXT_ID].scriptAssistant.enabled);
|
||||
|
||||
setupEventListeners();
|
||||
|
||||
if (extension_settings[EXT_ID].scriptAssistant.enabled) {
|
||||
setTimeout(() => { if (typeof window['injectScriptDocs'] === 'function') window['injectScriptDocs'](); }, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
function setupEventListeners() {
|
||||
events.on(event_types.CHAT_CHANGED, () => setTimeout(checkAndInjectDocs, 500));
|
||||
events.on(event_types.MESSAGE_RECEIVED, checkAndInjectDocs);
|
||||
events.on(event_types.USER_MESSAGE_RENDERED, checkAndInjectDocs);
|
||||
events.on(event_types.SETTINGS_LOADED_AFTER, () => setTimeout(checkAndInjectDocs, 1000));
|
||||
events.on(event_types.APP_READY, () => setTimeout(checkAndInjectDocs, 1500));
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
events.cleanup();
|
||||
if (typeof window['removeScriptDocs'] === 'function') window['removeScriptDocs']();
|
||||
}
|
||||
|
||||
function checkAndInjectDocs() {
|
||||
const globalEnabled = window.isXiaobaixEnabled !== undefined ? window.isXiaobaixEnabled : extension_settings[EXT_ID].enabled;
|
||||
if (globalEnabled && extension_settings[EXT_ID].scriptAssistant?.enabled) {
|
||||
injectScriptDocs();
|
||||
} else {
|
||||
removeScriptDocs();
|
||||
}
|
||||
}
|
||||
|
||||
async function injectScriptDocs() {
|
||||
try {
|
||||
let docsContent = '';
|
||||
|
||||
try {
|
||||
const response = await fetch(`${extensionFolderPath}/docs/script-docs.md`);
|
||||
if (response.ok) {
|
||||
docsContent = await response.text();
|
||||
}
|
||||
} catch (error) {
|
||||
docsContent = "无法加载script-docs.md文件";
|
||||
}
|
||||
|
||||
const formattedPrompt = `
|
||||
【小白X插件 - 写卡助手】
|
||||
你是小白X插件的内置助手,专门帮助用户创建STscript脚本和交互式界面的角色卡。
|
||||
以下是小白x功能和SillyTavern的官方STscript脚本文档,可结合小白X功能创作与SillyTavern深度交互的角色卡:
|
||||
${docsContent}
|
||||
`;
|
||||
|
||||
setExtensionPrompt(
|
||||
SCRIPT_MODULE_NAME,
|
||||
formattedPrompt,
|
||||
extension_prompt_types.IN_PROMPT,
|
||||
2,
|
||||
false,
|
||||
0
|
||||
);
|
||||
} catch (error) {}
|
||||
}
|
||||
|
||||
function removeScriptDocs() {
|
||||
setExtensionPrompt(SCRIPT_MODULE_NAME, '', extension_prompt_types.IN_PROMPT, 2, false, 0);
|
||||
}
|
||||
|
||||
window.injectScriptDocs = injectScriptDocs;
|
||||
window.removeScriptDocs = removeScriptDocs;
|
||||
|
||||
export { initScriptAssistant };
|
||||
Reference in New Issue
Block a user