修改变量
replaceVariables
完全替换变量表。
之所以提供这么直接的函数, 是因为酒馆助手内置了 lodash 库: insertOrAssignVariables
等函数其实就是先 getVariables
获取变量表,用 lodash 库处理,再 replaceVariables
替换变量表。
typescript
async function replaceVariables(variables: Record<string, any>, { type, message_id }?: VariableOption): Promise<void>
参数
variables
要用于替换的变量表
option?
一个可选的配置对象,包含以下属性:
type?
:string
- 指定操作的变量类型,默认为
'chat'
。 - 可选值:
'message'
: 针对特定消息楼层的变量。'chat'
: 整个聊天会话的变量(默认)。'character'
: 当前角色卡的变量。'global'
: 全局变量。
- 指定操作的变量类型,默认为
message_id?
:number | 'latest'
- 当
type
为'message'
时,此参数指定目标消息的楼层号。 - 如果是数字,表示具体的楼层 ID。
- 如果是负数,表示相对于最新消息的深度索引 (例如,
-1
表示最新的消息,-2
表示倒数第二条)。 'latest'
(默认值): 表示最新的消息楼层。- 此参数仅在
type
为'message'
时有效。
- 当
示例
typescript
// 执行前的聊天变量: `{爱城华恋: {好感度: 5}}`
await replaceVariables({神乐光: {好感度: 5, 认知度: 0}});
// 执行后的聊天变量: `{神乐光: {好感度: 5, 认知度: 0}}`
typescript
// 执行前的聊天变量: `{神乐光: {好感度: 5}}`
let variables = getVariables();
_.unset(variables, "神乐光.好感度");
await replaceVariables(variables);
// 执行后的聊天变量: `{神乐光: {}}`
updateVariablesWith
用函数更新变量表。
typescript
type VariablesUpdater =
| ((variables: Record<string, any>) => Record<string, any>)
| ((variables: Record<string, any>) => Promise<Record<string, any>>);
async function updateVariablesWith(updater: VariablesUpdater, { type, message_id }?: VariableOption): Promise<Record<string, any>>
参数
updater
用于更新变量表的函数,接收变量表作为参数,返回更新后的变量表。
option?
一个可选的配置对象,包含以下属性:
type?
:string
- 指定操作的变量类型,默认为
'chat'
。 - 可选值:
'message'
: 针对特定消息楼层的变量。'chat'
: 整个聊天会话的变量(默认)。'character'
: 当前角色卡的变量。'global'
: 全局变量。
- 指定操作的变量类型,默认为
message_id?
:number | 'latest'
- 当
type
为'message'
时,此参数指定目标消息的楼层号。 - 如果是数字,表示具体的楼层 ID。
- 如果是负数,表示相对于最新消息的深度索引 (例如,
-1
表示最新的消息,-2
表示倒数第二条)。 'latest'
(默认值): 表示最新的消息楼层。- 此参数仅在
type
为'message'
时有效。
- 当
返回值
- 更新后的变量表:
Promise<Record<string, any>>
示例
typescript
// 执行前的聊天变量: `{神乐光: {好感度: 5}}`
await updateVariablesWith(variables => {_.unset(variables, "神乐光.好感度"); return variables;});
// 执行后的聊天变量: `{神乐光: {}}`
typescript
// 更新 "爱城华恋.好感度" 为原来的 2 倍, 如果该变量不存在则设置为 0
await updateVariablesWith(variables => _.update(variables, "爱城华恋.好感度", value => value ? value * 2 : 0));
insertOrAssignVariables
插入或修改变量值,取决于变量是否存在。
typescript
async function insertOrAssignVariables(variables: Record<string, any>, { type, message_id }?: VariableOption): Promise<void> {
await updateVariablesWith(old_variables => _.merge(old_variables, variables), { type, message_id });
}
参数
variables
要更新的变量:
- 如果变量不存在,则新增该变量
- 如果变量已经存在,则修改该变量的值
option?
一个可选的配置对象,包含以下属性:
type?
:string
- 指定操作的变量类型,默认为
'chat'
。 - 可选值:
'message'
: 针对特定消息楼层的变量。'chat'
: 整个聊天会话的变量(默认)。'character'
: 当前角色卡的变量。'global'
: 全局变量。
- 指定操作的变量类型,默认为
message_id?
:number | 'latest'
- 当
type
为'message'
时,此参数指定目标消息的楼层号。 - 如果是数字,表示具体的楼层 ID。
- 如果是负数,表示相对于最新消息的深度索引 (例如,
-1
表示最新的消息,-2
表示倒数第二条)。 'latest'
(默认值): 表示最新的消息楼层。- 此参数仅在
type
为'message'
时有效。
- 当
示例
typescript
// 执行前变量: `{爱城华恋: {好感度: 5}}`
await insertOrAssignVariables({爱城华恋: {好感度: 10}, 神乐光: {好感度: 5, 认知度: 0}});
// 执行后变量: `{爱城华恋: {好感度: 10}, 神乐光: {好感度: 5, 认知度: 0}}`
insertVariables
插入新变量, 如果变量已经存在则什么也不做。
typescript
async function insertVariables(variables: Record<string, any>, { type, message_id }?: VariableOption): Promise<void> {
await updateVariablesWith(old_variables => _.defaultsDeep(old_variables, variables), { type, message_id });
}
参数
variables
要插入的变量:
- 如果变量不存在,则新增该变量
- 如果变量已经存在,则什么也不做
option?
一个可选的配置对象,包含以下属性:
type?
:string
- 指定操作的变量类型,默认为
'chat'
。 - 可选值:
'message'
: 针对特定消息楼层的变量。'chat'
: 整个聊天会话的变量(默认)。'character'
: 当前角色卡的变量。'global'
: 全局变量。
- 指定操作的变量类型,默认为
message_id?
:number | 'latest'
- 当
type
为'message'
时,此参数指定目标消息的楼层号。 - 如果是数字,表示具体的楼层 ID。
- 如果是负数,表示相对于最新消息的深度索引 (例如,
-1
表示最新的消息,-2
表示倒数第二条)。 'latest'
(默认值): 表示最新的消息楼层。- 此参数仅在
type
为'message'
时有效。
- 当
示例
typescript
// 执行前变量: `{爱城华恋: {好感度: 5}}`
await insertVariables({爱城华恋: {好感度: 10}, 神乐光: {好感度: 5, 认知度: 0}});
// 执行后变量: `{爱城华恋: {好感度: 5}, 神乐光: {好感度: 5, 认知度: 0}}`