Skip to content
iPlugin

条件动作

完整查询 if、if_not、all、any、none、case 的字段与分支规则。

条件对象放在接受动作的位置,例如图标 action、菜单事件或另一个条件的分支中。它与图标 sub.if 的显示条件不是同一个字段:这里决定执行什么,子图标条件决定显示什么。

单个条件

action:
  if: 'perm invero.vip'
  then: "mmsg '&a你有权限'"
  else: "mmsg '&c你没有权限'"

perm 属于通用 Kether,语法见 TabooLib Kether 列表。本页的 YAML 条件结构由 Invero 提供。

字段类型必填省略行为说明
if条件文本/固定值或其列表与其他入口择一不构成此结构只取第一条条件;要检查多条应使用 all / any / none
if_not条件文本/固定值或其列表与其他入口择一不构成此结构第一条条件不满足时选择 then
all条件文本/固定值或其列表与其他入口择一不构成此结构全部满足时选择 then
any条件文本/固定值或其列表与其他入口择一不构成此结构任意一个满足时选择 then
none条件文本/固定值或其列表与其他入口择一不构成此结构全部不满足时选择 then
then动作、动作列表或布尔值与 else 至少填写一项该分支不执行动作条件满足时选择,可继续嵌套条件或输入
else动作、动作列表或布尔值与 then 至少填写一项该分支不执行动作条件不满足时选择
atLeast(amount、at_least)整数否,仅 any1有数量判断问题,不能可靠表示至少 N 条满足,见下文

if_not 应使用下划线写法。带空格的 if not 虽然会被识别为条件入口,但目前不能完整读取条件字段,不作为可用别名。

条件项也接受布尔值、数字等单个值;直接填写的固定 true / yes / 1 判为真,false / no / 0 判为假,不区分这些固定写法的大小写。

其他脚本返回布尔值时按该值判断;返回非布尔值时,结构化动作只把小写文字 false、no 判为假,其他结果(包括空结果、数字 0)并不自动表示假。判断存在与否使用 ctx has / ctx without,需要确定分支时返回布尔值。图标子状态另有自己的判断偏好,不用文字或数字代替明确条件。

if、if_not 至少要有一条条件;空列表不能执行。空的 all / none 成立,空的 any 不成立。通常直接填写有意义的条件列表。

多个条件

action:
  all:
    - 'perm invero.vip'
    - 'ctx has selected'
  then: "mmsg '&a两个条件都满足'"
  else: "mmsg '&c条件尚未满足'"

all、any、none 逐项作即时判断并短路:达到结果后不再检查剩余项。它们不等待含延迟的条件,尚未完成的条件按 false 判断。if / if_not 会等待第一条条件的结果。显示条件、过滤条件和动作条件也不宜包含等待或副作用。

数量阈值限制

any.atLeast(amount、at_least)目前不能实现“至少 N 条满足”:即使大于 1,第一条为真的条件也会使整个 any 成立;非正数还可能让非空列表在条件都不满足时通过。任意一条满足用 any,全部满足用 all,不要用此字段进行可靠的数量阈值判断。

分支结果

  • 实际执行了 then 或 else:返回该分支的动作结果。
  • if / if_not 选中的分支没有配置:返回 true。
  • all / any / none 选中的分支没有配置:返回 false。
  • 结果为 false 会停止外层动作列表,不会自动关闭窗口。

需要确定结果时显式配置两个分支,尤其是用于 pre_open 或输入验证时。

按值选择分支

action:
  case: 'ctx get category'
  when:
    vip: "mmsg '&aVIP 分类'"
    normal: "mmsg '&f普通分类'"
  else: "mmsg '&7请选择分类'"

先用 ctx set category to vip 设置分类,上例就会发送 VIP 分类消息。case 同样识别上方的固定真假值:直接写 case: 0 得到的是假值,而不是数字 0 的文字;匹配数字时可用 case: 'ctx get count' 读取实际数值。

字段类型必填省略行为说明
case一段 Kether 文本或单个固定值是无法选择分支求值后转换为文字,与 when 的键比较;不接受条件列表
when匹配规则到动作的映射是无法读取此结构按书写顺序,执行首个匹配项;值可为动作列表或嵌套结构
default(else)动作、动作列表或布尔值否没有匹配时返回 true所有规则都不匹配时执行

when 匹配规则

规则写在 when 的键中;带符号的键用引号包围。

规则比较方式
vip 或 '= vip'求值结果与 vip 完全相等,区分大小写
'~= vip'相等,不区分大小写
'> 10'、'>= 10'(≥)求值结果大于、大于等于指定数字
'< 10'、'<= 10'(≤)求值结果小于、小于等于指定数字
'has abc'、'contains abc'、'~ abc'规则右侧文字包含求值结果,并非“结果包含 abc”
'~~ abc'同上,但不区分大小写

== 与 ~== 会被识别成相等类规则,但目前会留下多余的 =,不能按通常的双等号语义使用;写 = 或 ~=。包含规则的比较方向也与常见直觉相反,不用它代替通用 Kether 的字符串包含判断。

控制菜单打开

events:
  pre_open:
    if: 'perm invero.use'
    then: true
    else:
      - "mmsg '&c无法打开'"
      - false

权限不足时提示并返回 false,取消打开。可操作的权限状态按钮见权限按钮教程;完整事件时机见菜单事件。

Last updated on