修改正则
提示
请务必先阅读如何正确使用酒馆助手
replaceTavernRegexes
完全替换酒馆正则。
警告
- 这是一个很慢的操作! 尽量对正则做完所有事后再一次性 replaceTavernRegexes
- 为了重新应用正则,它会重新载入整个聊天消息,将会触发
tavern_events.CHAT_CHANGED进而重新加载全局脚本和楼层消息。这意味着如果你在全局脚本中运行本函数,则该函数之后的内容将不会被执行
ts
function replaceTavernRegexes(
regexes: TavernRegex[],
option: TavernRegexOption
): Promise<void>;ts
type TavernRegexOption = TavernRegexOptionGlobal | TavernRegexOptionCharacter | TavernRegexOptionPreset;ts
type TavernRegexOptionGlobal = {
type: 'global';
};ts
type TavernRegexOptionCharacter = {
type: 'character';
name?: string | 'current';
};ts
type TavernRegexOptionPreset = {
type: 'preset';
name?: string | 'in_use';
};ts
type TavernRegex = {
id: string;
script_name: string;
enabled: boolean;
run_on_edit: boolean;
scope?: "global" | "character";
find_regex: string;
trim_strings: string;
replace_string: string;
source: {
user_input: boolean;
ai_output: boolean;
slash_command: boolean;
world_info: boolean;
};
destination: {
display: boolean;
prompt: boolean;
};
min_depth: number | null;
max_depth: number | null;
};参数
regexes
- 类型:
TavernRegex[] - 描述: 要用于替换的酒馆正则数组
option.type
- 类型:
'global' | 'character' | 'preset' - 描述: 要操作的酒馆正则类型
'global'- 全局正则'character'- 角色卡局部正则'preset'- 预设正则
option.name (仅 character 和 preset 类型)
- 类型:
string | 'current' | 'in_use' - 描述:
- 对于
character类型:角色卡名称,'current'表示当前角色卡(默认值) - 对于
preset类型:预设名称,'in_use'表示当前使用的预设(默认值)
- 对于
示例
ts
// 获取全局正则并修改
const regexes = getTavernRegexes({ type: 'global' });
regexes.forEach(regex => {
if (regex.script_name.includes('关键词')) {
regex.enabled = true;
}
});
await replaceTavernRegexes(regexes, { type: 'global' });ts
// 获取当前角色卡正则并修改
const regexes = getTavernRegexes({ type: 'character' });
regexes.forEach(regex => {
regex.enabled = false; // 禁用所有正则
});
await replaceTavernRegexes(regexes, { type: 'character' });ts
// 获取指定角色卡正则并修改
const regexes = getTavernRegexes({ type: 'character', name: '角色卡名称' });
regexes.forEach(regex => {
if (regex.find_regex.includes('pattern')) {
regex.replace_string = '新的替换文本';
}
});
await replaceTavernRegexes(regexes, { type: 'character', name: '角色卡名称' });ts
// 传入空数组可以清空正则列表
await replaceTavernRegexes([], { type: 'preset' });updateTavernRegexesWith
使用更新函数更新酒馆正则,支持同步和异步更新。
性能提示
- 这是一个很慢的操作! 尽量对正则做完所有事后再一次性更新
- 为了重新应用正则,它会重新载入整个聊天消息,将会触发
tavern_events.CHAT_CHANGED进而重新加载全局脚本和楼层消息
ts
function updateTavernRegexesWith(
updater: (regexes: TavernRegex[]) => TavernRegex[],
option: TavernRegexOption
): Promise<TavernRegex[]>;
function updateTavernRegexesWith(
updater: (regexes: TavernRegex[]) => Promise<TavernRegex[]>,
option: TavernRegexOption
): Promise<TavernRegex[]>;参数
updater
- 类型:
(regexes: TavernRegex[]) => TavernRegex[]或(regexes: TavernRegex[]) => Promise<TavernRegex[]> - 描述: 用于更新酒馆正则的函数。它应该接收酒馆正则作为参数,并返回更新后的酒馆正则
option.type
- 类型:
'global' | 'character' | 'preset' - 描述: 要操作的酒馆正则类型
option.name (仅 character 和 preset 类型)
- 类型:
string | 'current' | 'in_use' - 描述:
- 对于
character类型:角色卡名称,'current'表示当前角色卡(默认值) - 对于
preset类型:预设名称,'in_use'表示当前使用的预设(默认值)
- 对于
返回值
- 更新后的酒馆正则:
Promise<TavernRegex[]>
示例
ts
await updateTavernRegexesWith((regexes) => {
regexes.forEach(regex => {
if (regex.script_name.includes('舞台少女')) {
regex.enabled = true;
}
});
return regexes;
}, { type: 'global' });ts
await updateTavernRegexesWith((regexes) => {
regexes.forEach(regex => {
regex.enabled = false;
});
return regexes;
}, { type: 'character' });ts
await updateTavernRegexesWith((regexes) => {
regexes.forEach(regex => {
if (regex.script_name === '特定正则') {
regex.find_regex = '新的查找模式';
regex.replace_string = '新的替换文本';
}
});
return regexes;
}, { type: 'global' });ts
await updateTavernRegexesWith((regexes) => {
return [
...regexes,
{
id: crypto.randomUUID(),
script_name: '新正则',
enabled: true,
run_on_edit: false,
scope: 'global',
find_regex: '查找模式',
trim_strings: '',
replace_string: '替换文本',
source: {
user_input: true,
ai_output: true,
slash_command: false,
world_info: false
},
destination: {
display: true,
prompt: true
},
min_depth: null,
max_depth: null
}
];
}, { type: 'global' });ts
await updateTavernRegexesWith(async (regexes) => {
// 执行异步操作,例如从服务器获取配置
const config = await fetch('/api/regex-config').then(r => r.json());
// 根据配置更新正则
regexes.forEach(regex => {
if (config.enabledRegexes.includes(regex.script_name)) {
regex.enabled = true;
}
});
return regexes;
}, { type: 'preset' });ts
await updateTavernRegexesWith((regexes) => {
return regexes.filter(regex => regex.script_name !== '要删除的正则');
}, { type: 'global' });ts
await updateTavernRegexesWith((regexes) => {
regexes.forEach(regex => {
if (regex.script_name.includes('AI输出')) {
// 只对 AI 输出生效
regex.source.user_input = false;
regex.source.ai_output = true;
regex.source.slash_command = false;
regex.source.world_info = false;
}
});
return regexes;
}, { type: 'character' });