节点
查询 CONST、TEXT、KETHER、JAVASCRIPT、调用参数与全局节点范围。
定义与调用
nodes 写在菜单顶层,别名为 node、scripts。例如定义一个动作节点:
nodes:
greet:
type: KETHER
value: "mmsg '&a欢迎使用当前菜单'"在图标中调用:
action: 'node greet'node 节点名 [with 参数] 需要当前活动菜单会话,包括全局节点也是如此。未找到节点时返回带名称及可用节点提示的文字,不是自动执行同名任务。
节点字段
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
type(handler) | 类型文字 | 对象写法必填 | 标量简写使用 CONST | CONST、TEXT、KETHER、JAVASCRIPT;不区分大小写,空格和短横线按下划线处理 |
value(runnable、run、script) | 文字、数字或布尔值 | 对象写法必填 | 无法读取节点 | 不接受 YAML 列表或映射;多行脚本使用 ` |
throwable(throwError) | 布尔值 | 否 | 打印执行错误 | false 只关闭本节点的错误打印,不会让执行成功 |
未知 type 会回退为 CONST,例如 type: JS 不是 JAVASCRIPT 的缩写。调用结果最终都会转成文字;不要把返回物品对象的节点当作物品本身传给库存语句。
四种类型
| 类型 | 处理方式 | 可见范围 |
|---|---|---|
CONST | 原样返回固定文字,不解析变量或执行语句 | 仅 value 自身 |
TEXT | 解析菜单变量、颜色和内联脚本,返回文字 | 当前会话,不自动加入本次 with 参数 |
KETHER | 执行一段 Kether,返回当下可取得的结果文字 | 会话变量与 invokeArgs;不是调用者脚本变量的完整继承 |
JAVASCRIPT | 执行 JavaScript,返回结果文字 | session、player、invokeArgs 等,详见 JavaScript |
简写实际是 CONST
nodes:
help_title: '&a帮助'
not_an_action: 'menu close'这两个都是固定文字;调用 node not_an_action 不会关闭菜单。要执行 Kether,明确写 type: KETHER。任务 run 使用相同规则,不能直接把一行脚本当作可执行节点。
复用显示文字
nodes:
status_text:
type: TEXT
value: '&a当前状态:{{&status}}'先用 ctx 设置 status,图标名称可写:
name: '{{node status_text}}'不要让 TEXT 节点的内联脚本递归调用自己。
节点参数
nodes:
welcome:
type: KETHER
value: "mmsg '&a{{&invokeArgs[0]}},{{&invokeArgs[1]}}'"node welcome with [ 'Steve' '欢迎回来' ]上例发送“Steve,欢迎回来”。with 传入集合时逐项转换为文字;单值变成一个元素,省略时为空列表。索引从 0 开始。Kether 列表属于脚本文本,不是 YAML 流式集合。
只有 KETHER、JAVASCRIPT 会直接收到 invokeArgs。TEXT 不自动收到本次调用参数;要复用带参数的文字,使用能立即返回的 KETHER 节点。
节点不自动携带调用图标、当前生成器元素或当前脚本里临时选定的面板。需要的业务值应提前 ctx set 到会话,或明确通过 with 传入;不能假定节点里的无目标 icon update 就指调用按钮。
完成、等待与错误
节点取当前可得到的结果,不等待延迟脚本结束。KETHER 含 wait 等未完成操作时可能立即返回 <TIMEOUT: KETHER>;脚本后续仍可能继续执行。JavaScript 未完成时有 <TIMEOUT: JAVASCRIPT>,执行异常可能返回 <ERROR: ...>。这些标记是结果文字,不等于自动向外抛出异常或自动返回 false。
需要严格等待一系列动作时,直接使用动作列表或一段脚本,不要用多个节点调用伪装成等待链。任务中的节点同样不保证等待后一个节点之前完成所有异步工作。
全局节点
保存下面文件,再执行 /invero gnode reload:
nodes:
common_greet:
type: KETHER
value: "mmsg '&a这条消息可以跨菜单复用'"菜单中仍用 node common_greet 调用。全局文件需要顶层 nodes,各节点使用完整对象;文字、数字或布尔值简写在此加载方式下会被略过。全局节点对象只填写列出的节点字段及别名;未识别的额外字段会使该节点加载失败,而不是像菜单配置中的未知字段一样被忽略。执行 /invero gnode reload 后查看后台给出的节点错误。配置的全局节点目录直接读取目录中的文件,不递归读取子目录。
主配置中的 GlobalNodes 控制开关、目录、文件过滤与同名优先级:
menu-first:先本菜单,再全局。global-first:先全局,再本菜单。- 关闭全局节点或填写其他优先级值:只查本菜单。
“全局”指节点定义能跨菜单复用,不表示变量自动共享或个人答案自动持久化。
函数与节点的分工
通用 Kether 的函数定义、调用语法只在 TabooLib Kether 列表查询。函数定义属于当前那段脚本,不会因为在某个点击动作中执行过,就在其他动作、另一次点击、另一条节点脚本中注册为全局函数。动作列表的各文本项也是独立脚本。
Invero 没有菜单顶层 functions 字段或自动加载独立 .js 函数文件的配置。跨动作复用使用命名 nodes;跨菜单复用使用全局节点。JavaScript 绑定的可见范围另见JavaScript。
Last updated on