Skip to content
iPlugin

节点

查询 CONST、TEXT、KETHER、JAVASCRIPT、调用参数与全局节点范围。

定义与调用

nodes 写在菜单顶层,别名为 node、scripts。例如定义一个动作节点:

nodes:
  greet:
    type: KETHER
    value: "mmsg '&a欢迎使用当前菜单'"

在图标中调用:

action: 'node greet'

node 节点名 [with 参数] 需要当前活动菜单会话,包括全局节点也是如此。未找到节点时返回带名称及可用节点提示的文字,不是自动执行同名任务。

节点字段

字段类型必填省略行为说明
type(handler)类型文字对象写法必填标量简写使用 CONSTCONST、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:

plugins/Invero/global-nodes/messages.yml
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