工作流语法.md 6.5 KB

工作流语法

基本结构

{
  "variables": {},
  "execute": []
}

语法分层

  • 基础语法scheduleifwhile
  • 基础 actionadb(通过 method 区分)
  • 扩展标签(Func)src/pages/processing/func/ 目录下的脚本文件名即为标签名

定时执行(schedule)

{
  "type": "schedule",
  "condition": {
    "interval": "1s",
    "repeat": -1
  },
  "interval": []
}
  • interval: 执行间隔("1s", "2m", "3h")
  • repeat: 重复次数(-1 表示无限循环)

ADB操作(adb)

统一格式:

{
  "type": "adb",
  "method": "input|click|locate|swipe|scroll|press|string-press",
  "inVars": [],
  "outVars": []
}
method 说明 inVars
input 输入文本 [0]: 文本内容
click 点击 [0]: 位置坐标(字符串格式:"{\"x\":123,\"y\":456}""123,456"
locate 定位 [0]: 图片/文字,outVars[0]: 保存位置
swipe 滑动 [0]: 方向(up-down/down-up/left-right/right-left)
scroll 滚动 [0]: 方向(up/down)
press 图像匹配并点击 [0]: 图片路径
string-press 文字识别并点击 [0]: 文字内容

条件判断(if)

{
  "type": "if",
  "condition": "{变量} == '值'",
  "ture": [],
  "false": []
}

支持操作符:== != > < >= <=

条件判断示例

数值比较:

{
  "type": "if",
  "condition": "{count} > 5",
  "ture": [{"type": "echo", "value": "count大于5"}],
  "false": []
}

字符串比较:

{
  "type": "if",
  "condition": "{message} == \"hello\"",
  "ture": [{"type": "echo", "value": "消息是hello"}],
  "false": []
}

布尔值判断:

{
  "type": "if",
  "condition": "{isReady} == true",
  "ture": [{"type": "echo", "value": "已准备好"}],
  "false": [{"type": "echo", "value": "未准备好"}]
}

或直接使用布尔变量:

{
  "type": "if",
  "condition": "{isReady}",
  "ture": [{"type": "echo", "value": "已准备好"}],
  "false": []
}

循环(while)

{
  "type": "while",
  "condition": "{变量} > 0",
  "ture": []
}

注意:turebody 的别名。

内置操作

延迟(delay)

{ "type": "delay", "value": "2s" }

设置变量(set)

{ "type": "set", "variable": "{name}", "value": "value" }

打印信息(echo)

{ "type": "echo", "value": "当前消息: {{lastMessage}}" }

或使用 inVars

{ "type": "echo", "inVars": ["{lastMessage}", "{lastRole}"] }
  • value: 直接文本,支持 {{variable}} 格式的变量替换(双花括号用于字符串拼接)
  • inVars: 变量名数组,输出所有变量的值

注意:log 标签已废弃,请使用 echo 标签。

随机数(random)

{
  "type": "random",
  "inVars": ["1", "100"],
  "outVars": ["{randomNum}"]
}
  • inVars[0]: 最小值(字符串格式的数字或变量引用)
  • inVars[1]: 最大值(字符串格式的数字或变量引用)
  • outVars[0]: 输出变量(number 类型,可以是整数或小数)

传统格式(已过时,建议使用上述格式):

{ 
  "type": "random", 
  "variable": "num", 
  "min": 1, 
  "max": 100, 
  "integer": true 
}

变量

  • 定义:"variables": {"name": "value"}
  • 使用:"{name}" 在字段中引用
  • 保存:"outVars": ["{name}"]"variable": "{name}"
  • 类型:支持三种数据类型:
    • number:数值类型(整数或小数),例如:13.14-5.2
    • string:字符串类型,例如:"hello"""
    • bool:布尔类型,只能是 truefalse(不是字符串)

变量类型说明

  • 变量的类型由其初始值自动推断:
    • 如果初始值是数字(如 13.14),类型为 number
    • 如果初始值是字符串(如 "text"""),类型为 string
    • 如果初始值是布尔值(如 truefalse),类型为 bool
  • 示例:

    {
    "variables": {
      "count": 0,           // number 类型
      "message": "",        // string 类型
      "isReady": false      // bool 类型
    }
    }
    

时间格式

  • 间隔:"1s", "2m", "3h"
  • 日期:"2026/1/14 01:21"
  • 时间:"09:00"

扩展标签

扩展标签由 src/pages/processing/func/ 目录下的脚本文件决定,每个脚本文件名即为标签名。

常用标签:

  • ocr-chat: OCR识别对话内容
    • inVars: [好友RGB颜色, 我的RGB颜色, 区域坐标](RGB格式:"(r,g,b)",区域坐标:JSON字符串)
    • outVars: [聊天记录变量](输出 chat-history.txt 格式的JSON字符串)
  • read-last-message: 读取最后一条消息(输出文本和发送者角色)
  • smart-chat-append: 智能合并历史聊天记录和当前聊天记录,自动检测并去除连续重合部分后返回新的聊天记录字符串
    • inVars: [历史记录, 当前记录]
    • outVars: [合并后的记录]
  • read-txt: 读取文本文件内容
    • inVars: [文件路径](相对于工作流目录,如 "history/chat-history.txt"
    • outVars: [文件内容变量]
  • save-txt: 保存字符串为文本文件
    • inVars: [内容, 文件路径](路径相对于工作流目录)
    • outVars: []
  • image-center-location: 图像中心点定位
    • inVars: [模板图片路径](相对于工作流目录的 resources 文件夹)
    • outVars: [位置坐标变量](输出JSON字符串格式:{"x":123,"y":456}
  • image-region-location: 图像区域定位(在完整截图中查找区域图片的位置)
    • inVars: [截图路径, 区域图片路径](都相对于工作流目录的 resources 文件夹,如 "ScreenShot.jpg""ChatArea.png"
    • outVars: [区域坐标变量](返回四个顶点坐标:{topLeft: {x, y}, topRight: {x, y}, bottomLeft: {x, y}, bottomRight: {x, y}}
    • 注意:此标签不主动截图,使用 resources/ 文件夹下已有的截图文件进行匹配
  • image-area-cropping: 图像区域裁剪(从当前屏幕截图裁剪指定区域)
    • inVars: [区域坐标, 保存路径](区域坐标:JSON字符串格式,保存路径相对于工作流目录的 history 文件夹)
    • outVars: []
    • 功能:从主进程缓存获取最新截图,保存到 history/ScreenShot.jpg,然后根据区域坐标裁剪并保存到指定路径