mirror of
https://gitlab.com/KenanZhu/AutoLibraryManuals.git
synced 2026-11-05 05:35:51 +08:00
docs: add v1.4.0 manual with macOS support, AutoScript, and global settings
- Add v1.4.0 version manual with full structure (开始/安装/配置/设置/功能/FAQ) - Add macOS platform installation instructions and troubleshooting - Add global settings chapter (open + appearance pages) - Add AutoScript manual (syntax, functions, variables, editor, orchestrator, integration) - Remove changelog (zh/changelog) as per v1.4.0 scope - Update docs.json navigation for v1.4.0 version and AutoScript tab Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
c13da9f2f5
commit
552f21ef8f
23 files changed
+2158
-38
No files matched your search
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: "代码编辑器"
|
||||
description: "AutoScript 代码编辑器使用指南 - 语法高亮、代码模板与调试运行"
|
||||
---
|
||||
|
||||
AutoScript 代码编辑器提供完整的 Lua 脚本编写体验,包括语法高亮、代码模板插入和模拟调试功能。
|
||||
|
||||
## 打开编辑器
|
||||
|
||||
在定时任务管理窗口中添加或编辑任务时,点击 [**AutoScript**] 区域的编辑按钮即可打开代码编辑器。
|
||||
|
||||
{/* TODO: 添加代码编辑器界面截图 */}
|
||||

|
||||
|
||||
## 语法高亮
|
||||
|
||||
编辑器使用配色方案区分不同类型的代码元素,帮助你快速识别脚本结构:
|
||||
|
||||
| 颜色 | 元素类型 | 示例 |
|
||||
| --- | --- | --- |
|
||||
| 蓝色加粗 | 关键字 | `if` `elseif` `else` `then` `end` `and` `or` `not` |
|
||||
| 青色 | 布尔字面量 | `true` `false` |
|
||||
| 紫色 | 运算符 | `==` `~=` `>` `<` `>=` `<=` `+` `-` |
|
||||
| 黄色 | 工具函数 | `time()` `date()` `datenow()` `timenow()` `dateadd()` `timeadd()` |
|
||||
| 浅蓝 | 目标变量 | `USERNAME` `USER_ENABLE` `RESERVE_DATE` `RESERVE_BEGIN_TIME` `RESERVE_END_TIME` |
|
||||
| 橙色 | 字符串 | `"2025-10-30"` `"alice"` |
|
||||
| 绿色 | 数字 | `1` `60` `2025` |
|
||||
| 绿色斜体 | 注释 | `-- 这是一条注释` |
|
||||
|
||||
## 代码模板
|
||||
|
||||
编辑器底部工具栏按类别提供了代码模板按钮,点击即可在光标位置插入相应代码:
|
||||
|
||||
### 基本语法
|
||||
|
||||
| 按钮 | 插入内容 |
|
||||
| --- | --- |
|
||||
| `if` | `if then` + `end` 代码块 |
|
||||
| `elseif` | `elseif then` 语句 |
|
||||
| `else` | `else` 语句 |
|
||||
| `end` | `end` 关键字 |
|
||||
| `pass` | 空操作占位符 |
|
||||
|
||||
### 运算符
|
||||
|
||||
提供算术运算符(`+` `-`)、比较运算符(`==` `~=` `>` `<` `>=` `<=`)和逻辑运算符(`and` `or`)的快速插入。
|
||||
|
||||
### 字面量
|
||||
|
||||
提供 `true` / `false` 和日期/时间/字符串/数字/注释的模板代码。
|
||||
|
||||
### 变量
|
||||
|
||||
自动列出所有可操作的目标变量。点击按钮即可插入变量名,无需手动输入。
|
||||
|
||||
### 工具函数
|
||||
|
||||
提供 `datenow()`、`timenow()`、`dateadd()`、`timeadd()` 等函数的模板插入,并附带参数提示。
|
||||
|
||||
## 编辑功能
|
||||
|
||||
- **Tab 转空格**:按下 Tab 键自动插入 4 个空格
|
||||
- **字体缩放**:通过工具栏按钮放大或缩小编辑器字体
|
||||
- **复制到剪贴板**:将当前脚本内容复制到系统剪贴板
|
||||
|
||||
## 调试运行
|
||||
|
||||
编辑器的右侧面板提供模拟数据调试功能:
|
||||
|
||||
<Steps>
|
||||
<Step title="设置模拟数据">
|
||||
在右侧面板中为每个变量设置测试值。各类型变量使用对应的输入控件:
|
||||
- 字符串:文本输入框
|
||||
- 布尔值:下拉选择框
|
||||
- 日期:日期选择器
|
||||
- 时间:时间选择器
|
||||
</Step>
|
||||
<Step title="运行调试">
|
||||
点击 [**调试运行**] 按钮,脚本将在模拟数据上执行。
|
||||
</Step>
|
||||
<Step title="查看结果">
|
||||
执行完成后,弹出结果对话框,对比显示每个变量的修改前值和修改后值。
|
||||
|
||||
{/*
|
||||
TODO: 添加调试运行结果截图
|
||||

|
||||
*/}
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Tip>
|
||||
在将脚本配置到定时任务之前,建议先使用调试运行功能验证脚本逻辑是否正确,
|
||||
特别是验证变量的最终值是否符合预期。
|
||||
</Tip>
|
||||
|
||||
## 从编排器导入
|
||||
|
||||
如果你通过可视化编排器构建了脚本逻辑,可以点击 [**编排**] 按钮打开编排器,
|
||||
编排器生成的代码将插入到编辑器光标所在位置。
|
||||
|
||||
<Note>
|
||||
你可以在编排器中构建基本逻辑框架,然后在编辑器中手动调整细节,
|
||||
两种方式可以灵活结合使用。
|
||||
</Note>
|
||||
@@ -0,0 +1,235 @@
|
||||
---
|
||||
title: "函数参考"
|
||||
description: "AutoScript 内置工具函数完整参考 - 日期与时间处理"
|
||||
---
|
||||
|
||||
AutoScript 提供了一组内置的日期和时间工具函数,用于在脚本中处理动态时间计算。
|
||||
|
||||
## 日期函数
|
||||
|
||||
### `date(y, m, d)`
|
||||
|
||||
创建一个指定日历日期的值。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `y` | integer | 年份,如 `2025` |
|
||||
| `m` | integer | 月份,如 `10` |
|
||||
| `d` | integer | 日期,如 `30` |
|
||||
|
||||
**返回值:** 日期值(可赋值给日期类型变量)
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
-- 设置为 2025 年 10 月 30 日
|
||||
RESERVE_DATE = date(2025, 10, 30)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `datenow()`
|
||||
|
||||
获取当前日期(当天的 00:00:00)。
|
||||
|
||||
**返回值:** 当前日期值
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
-- 将预约日期设为今天
|
||||
RESERVE_DATE = datenow()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `dateadd(date_val, n)`
|
||||
|
||||
在指定日期上增加或减少天数。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `date_val` | date | 基准日期值 |
|
||||
| `n` | integer | 增加的天数(负数表示减少) |
|
||||
|
||||
**返回值:** 计算后的日期值
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
-- 预约明天
|
||||
RESERVE_DATE = dateadd(datenow(), 1)
|
||||
|
||||
-- 预约三天前
|
||||
RESERVE_DATE = dateadd(datenow(), -3)
|
||||
|
||||
-- 在已有日期基础上计算
|
||||
RESERVE_DATE = dateadd(RESERVE_DATE, 7) -- 延后一周
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `strtodate(iso_str)`
|
||||
|
||||
将 ISO 格式日期字符串转换为日期值。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `iso_str` | string | 日期字符串,格式 `"YYYY-MM-DD"` |
|
||||
|
||||
**返回值:** 日期值
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
RESERVE_DATE = strtodate("2025-12-31")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `datetostr(ts)`
|
||||
|
||||
将日期值转换为 ISO 格式字符串。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `ts` | date | 日期值 |
|
||||
|
||||
**返回值:** 格式为 `"YYYY-MM-DD"` 的字符串
|
||||
|
||||
<Note>
|
||||
`datetostr()` 通常用于调试或日志输出。在实际操作中直接使用日期值即可。
|
||||
</Note>
|
||||
|
||||
---
|
||||
|
||||
## 时间函数
|
||||
|
||||
### `time(h, m)`
|
||||
|
||||
创建一个指定时间值。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `h` | integer | 小时(0-23) |
|
||||
| `m` | integer | 分钟(0-59) |
|
||||
|
||||
**返回值:** 时间值(可赋值给时间类型变量)
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
-- 设置开始时间为 09:30
|
||||
RESERVE_BEGIN_TIME = time(9, 30)
|
||||
|
||||
-- 设置结束时间为 21:00
|
||||
RESERVE_END_TIME = time(21, 0)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `timenow()`
|
||||
|
||||
获取当前时间(以分钟表示的当天已过时间)。
|
||||
|
||||
**返回值:** 当前时间值(分钟数)
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
-- 将开始时间设为当前时间后 30 分钟
|
||||
RESERVE_BEGIN_TIME = timeadd(timenow(), 30)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `timeadd(time_val, n)`
|
||||
|
||||
在指定时间上增加或减少分钟数。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `time_val` | time | 基准时间值 |
|
||||
| `n` | integer | 增加的分钟数(负数表示减少) |
|
||||
|
||||
**返回值:** 计算后的时间值(自动处理跨天回绕)
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
-- 开始时间推迟 30 分钟
|
||||
RESERVE_BEGIN_TIME = timeadd(RESERVE_BEGIN_TIME, 30)
|
||||
|
||||
-- 结束时间提前 1 小时
|
||||
RESERVE_END_TIME = timeadd(RESERVE_END_TIME, -60)
|
||||
|
||||
-- 在现有时间基础上叠加
|
||||
RESERVE_BEGIN_TIME = timeadd(timenow(), 120) -- 当前时间 + 2 小时
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `strtotime(hm_str)`
|
||||
|
||||
将时间字符串转换为时间值。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `hm_str` | string | 时间字符串,格式 `"HH:MM"` |
|
||||
|
||||
**返回值:** 时间值
|
||||
|
||||
**示例:**
|
||||
|
||||
```lua
|
||||
RESERVE_BEGIN_TIME = strtotime("08:00")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `timetostr(m)`
|
||||
|
||||
将时间值转换为字符串。
|
||||
|
||||
**参数:**
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `m` | time | 时间值(分钟数) |
|
||||
|
||||
**返回值:** 格式为 `"HH:MM"` 的字符串
|
||||
|
||||
<Note>
|
||||
`timetostr()` 通常用于调试或日志输出。在实际操作中直接使用时间值即可。
|
||||
</Note>
|
||||
|
||||
---
|
||||
|
||||
## 函数速查表
|
||||
|
||||
| 函数 | 说明 | 输入 | 输出 |
|
||||
| --- | --- | --- | --- |
|
||||
| `date(y, m, d)` | 创建日期 | `(int, int, int)` | date |
|
||||
| `datenow()` | 当前日期 | 无 | date |
|
||||
| `dateadd(d, n)` | 日期偏移 | `(date, int)` | date |
|
||||
| `strtodate(s)` | 字符串转日期 | `(string)` | date |
|
||||
| `datetostr(d)` | 日期转字符串 | `(date)` | string |
|
||||
| `time(h, m)` | 创建时间 | `(int, int)` | time |
|
||||
| `timenow()` | 当前时间 | 无 | time |
|
||||
| `timeadd(t, n)` | 时间偏移 | `(time, int)` | time |
|
||||
| `strtotime(s)` | 字符串转时间 | `(string)` | time |
|
||||
| `timetostr(t)` | 时间转字符串 | `(time)` | string |
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: "AutoScript 概述"
|
||||
description: "AutoScript 自动化脚本引擎 - 在定时任务执行前动态调整预约参数"
|
||||
---
|
||||
|
||||
AutoScript 是基于 Lua 语言的自动化脚本引擎,用于在定时任务执行前对预约参数进行动态调整。
|
||||
|
||||
## 什么是 AutoScript
|
||||
|
||||
在之前的版本中,定时任务只能按照固定的预约参数执行。如果需要在不同日期预约不同座位,或根据时间动态调整预约时长,只能手动修改配置。
|
||||
|
||||
AutoScript 解决了这一问题。它允许你编写简单的脚本,在定时任务执行前自动修改用户变量(如预约日期、开始时间、结束时间等),实现灵活的自动化预约策略。
|
||||
|
||||
## 核心概念
|
||||
|
||||
AutoScript 的核心工作流程如下:
|
||||
|
||||
1. **输入数据**:定时任务触发时,从用户配置中读取当前用户的预约参数
|
||||
2. **执行脚本**:运行你编写的 AutoScript 脚本,动态修改变量值
|
||||
3. **输出数据**:将脚本修改后的参数传递给自动化引擎执行
|
||||
|
||||
<Note>
|
||||
AutoScript 脚本修改的参数仅影响当次执行,不会回写到用户配置文件。下次任务运行时将重新从配置文件读取原始值。
|
||||
</Note>
|
||||
|
||||
## 典型应用场景
|
||||
|
||||
- **每日动态日期**:始终预约"明天"的座位,无需每天手动修改日期
|
||||
- **条件切换**:根据是否启用标志决定不同的预约策略
|
||||
- **时间偏移**:在特定时间段自动调整预约开始时间
|
||||
- **批量处理**:配合用户分组,为不同用户设置不同的预约参数
|
||||
|
||||
## 快速示例
|
||||
|
||||
以下脚本将预约日期设为明天,开始时间设为上午 9:00:
|
||||
|
||||
```lua
|
||||
-- 设置预约日期为明天
|
||||
RESERVE_DATE = dateadd(datenow(), 1)
|
||||
|
||||
-- 设置开始时间为 09:00
|
||||
RESERVE_BEGIN_TIME = time(9, 0)
|
||||
```
|
||||
|
||||
## 两种使用方式
|
||||
|
||||
AutoLibrary 提供两种方式编写 AutoScript:
|
||||
|
||||
| 方式 | 说明 | 适合人群 |
|
||||
| --- | --- | --- |
|
||||
| [**代码编辑器**](/zh/autoscript/editor) | 直接编写 Lua 脚本,提供语法高亮和调试功能 | 熟悉脚本编写的用户 |
|
||||
| [**可视化编排器**](/zh/autoscript/orchestrator) | 通过图形界面拖拽组合条件和操作,自动生成脚本 | 不熟悉编程的用户 |
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card
|
||||
title="语法指引"
|
||||
icon="code"
|
||||
href="/zh/autoscript/syntax"
|
||||
>
|
||||
了解 AutoScript 的 Lua 语法基础、运算符和流程控制。
|
||||
</Card>
|
||||
<Card
|
||||
title="函数参考"
|
||||
icon="function-square"
|
||||
href="/zh/autoscript/functions"
|
||||
>
|
||||
查看所有可用的日期、时间工具函数及其用法。
|
||||
</Card>
|
||||
<Card
|
||||
title="变量参考"
|
||||
icon="database"
|
||||
href="/zh/autoscript/variables"
|
||||
>
|
||||
了解可操作的目标变量、数据类型与约束规则。
|
||||
</Card>
|
||||
<Card
|
||||
title="集成指南"
|
||||
icon="link"
|
||||
href="/zh/autoscript/integration"
|
||||
>
|
||||
了解如何将 AutoScript 集成到定时任务中。
|
||||
</Card>
|
||||
</CardGroup>
|
||||
@@ -0,0 +1,137 @@
|
||||
---
|
||||
title: "集成指南"
|
||||
description: "AutoScript 与定时任务集成 - 执行流程、作用域与最佳实践"
|
||||
---
|
||||
|
||||
了解如何将 AutoScript 脚本集成到定时任务中,以及脚本的执行时机、作用范围和注意事项。
|
||||
|
||||
## 执行流程
|
||||
|
||||
当定时任务触发时,AutoLibrary 按以下顺序执行:
|
||||
|
||||
1. **读取配置**:从用户配置文件中读取所有用户分组的预约参数
|
||||
2. **遍历用户组**:对每个启用的用户组,遍历其中的每个启用用户
|
||||
3. **执行 AutoScript**:对每个用户运行 AutoScript 脚本,动态调整变量值
|
||||
4. **执行定时任务**:使用调整后的参数运行预约/签到/续约操作
|
||||
|
||||
```text
|
||||
定时任务触发
|
||||
│
|
||||
├─ 用户组 A
|
||||
│ ├─ 用户 1 → 执行 AutoScript → 预约/签到/续约
|
||||
│ └─ 用户 2 → 执行 AutoScript → 预约/签到/续约
|
||||
│
|
||||
└─ 用户组 B
|
||||
├─ 用户 3 → 执行 AutoScript → 预约/签到/续约
|
||||
└─ 用户 4 → 执行 AutoScript → 预约/签到/续约
|
||||
```
|
||||
|
||||
## 作用域
|
||||
|
||||
AutoScript 脚本的作用域限定为单个用户的单次执行:
|
||||
|
||||
- **每次执行独立**:脚本对每个用户独立运行,不同用户之间互不影响
|
||||
- **不修改配置文件**:脚本对变量的修改仅存在于内存中,不会回写到 `user.json`
|
||||
- **下次执行重置**:下次定时任务触发时,从配置文件重新读取原始值
|
||||
|
||||
## 配置方式
|
||||
|
||||
### 在定时任务中指定脚本
|
||||
|
||||
<Steps>
|
||||
<Step title="打开定时任务管理">
|
||||
点击主界面底部的 [<Icon icon="clock" />] 按钮。
|
||||
</Step>
|
||||
<Step title="添加或编辑任务">
|
||||
点击 [**添加任务**] 创建新任务,或右键现有任务选择 [**编辑**]。
|
||||
</Step>
|
||||
<Step title="配置 AutoScript">
|
||||
在编辑对话框中找到 [**AutoScript**] 区域,点击 [**编辑**] 按钮打开内置代码编辑器编写脚本。
|
||||
脚本编写完成后直接内嵌保存至定时任务配置,无需管理外部文件。
|
||||
</Step>
|
||||
<Step title="保存配置">
|
||||
点击 [**确认**] 保存任务配置。
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
{/* TODO: 添加定时任务 AutoScript 配置截图 */}
|
||||

|
||||
|
||||
## 典型示例
|
||||
|
||||
### 示例 1:始终预约明天的座位
|
||||
|
||||
```lua
|
||||
-- 将预约日期设为明天
|
||||
RESERVE_DATE = dateadd(datenow(), 1)
|
||||
|
||||
-- 设置固定时间段
|
||||
RESERVE_BEGIN_TIME = time(9, 0)
|
||||
RESERVE_END_TIME = time(21, 0)
|
||||
```
|
||||
|
||||
### 示例 2:根据星期调整预约策略
|
||||
|
||||
配合定时任务的重复执行功能,可以为不同日子设置不同的预约参数。如果你需要基于实际星期进行判断,可以在脚本中根据日期特性调整:
|
||||
|
||||
```lua
|
||||
-- 始终预约明天
|
||||
RESERVE_DATE = dateadd(datenow(), 1)
|
||||
|
||||
-- 默认时间段
|
||||
RESERVE_BEGIN_TIME = time(9, 0)
|
||||
RESERVE_END_TIME = time(21, 0)
|
||||
```
|
||||
|
||||
### 示例 3:条件性跳过用户
|
||||
|
||||
```lua
|
||||
-- 如果当前时间已经超过上午 10 点,跳过该用户
|
||||
if timenow() > time(10, 0) then
|
||||
USER_ENABLE = false
|
||||
end
|
||||
```
|
||||
|
||||
### 示例 4:根据用户名差异化配置
|
||||
|
||||
```lua
|
||||
if USERNAME == "20250101001" then
|
||||
-- 用户 A 的预约策略
|
||||
RESERVE_BEGIN_TIME = time(8, 0)
|
||||
RESERVE_END_TIME = time(20, 0)
|
||||
end
|
||||
```
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 先调试,后配置
|
||||
|
||||
在将脚本关联到定时任务之前,使用编辑器的调试运行功能在模拟数据上验证脚本逻辑。
|
||||
|
||||
### 保持脚本简洁
|
||||
|
||||
每个脚本只关注一个明确的目标,避免在一个脚本中处理过多复杂逻辑。如果需要针对不同用户组执行不同逻辑,建议为每个用户组创建独立的定时任务。
|
||||
|
||||
### 注意沙箱限制
|
||||
|
||||
AutoScript 运行在受限的沙箱环境中,不能访问文件系统或执行系统命令。如果脚本需要外部数据(如个人日程表),请使用条件判断和工具函数实现。
|
||||
|
||||
### 验证类型兼容性
|
||||
|
||||
确保所有赋值操作的类型与目标变量声明的类型一致。类型错误会导致脚本执行失败并跳过该用户。
|
||||
|
||||
### 处理边缘情况
|
||||
|
||||
编写脚本时考虑边缘情况:
|
||||
|
||||
```lua
|
||||
-- 确保开始时间不早于 7:30
|
||||
if RESERVE_BEGIN_TIME < time(7, 30) then
|
||||
RESERVE_BEGIN_TIME = time(7, 30)
|
||||
end
|
||||
|
||||
-- 确保结束时间不晚于 22:30
|
||||
if RESERVE_END_TIME > time(22, 30) then
|
||||
RESERVE_END_TIME = time(22, 30)
|
||||
end
|
||||
```
|
||||
@@ -0,0 +1,105 @@
|
||||
---
|
||||
title: "可视化编排器"
|
||||
description: "AutoScript 可视化编排器 - 通过图形界面构建条件判断与变量操作,无需手写代码"
|
||||
---
|
||||
|
||||
可视化编排器让你通过图形界面构建 AutoScript 脚本,无需了解 Lua 语法。编排器会根据你的配置自动生成代码。
|
||||
|
||||
{/* TODO: 添加可视化编排器界面截图 */}
|
||||

|
||||
|
||||
## 编排器结构
|
||||
|
||||
编排器由多个判断块(Conditional Block)堆叠组成,从上到下依次执行。每个判断块包含条件判断和操作步骤两部分。
|
||||
|
||||
### 判断块类型
|
||||
|
||||
每个判断块可以设置为以下三种类型之一:
|
||||
|
||||
| 类型 | 触发条件 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| **IF** | 第一个判断块 | 始终为 IF,不可更改 |
|
||||
| **ELSE IF** | 上方条件均不满足 | 添加额外的条件分支 |
|
||||
| **ELSE** | 上方所有条件均不满足 | 默认分支,不需要设置条件 |
|
||||
|
||||
<Info>
|
||||
在一个 IF 后可以添加多个 ELSE IF,但只能有一个 ELSE 块。
|
||||
添加 ELSE 块后,不能再添加 ELSE IF 或 ELSE 块。
|
||||
</Info>
|
||||
|
||||
## 添加判断块
|
||||
|
||||
点击 [**+ 添加判断块**] 按钮添加新的判断块。新块的类型默认为 ELSE IF。
|
||||
|
||||
## 配置条件
|
||||
|
||||
每个判断块可包含一个或多个条件行,多个条件之间用 `and` 或 `or` 连接。
|
||||
|
||||
### 条件行配置项
|
||||
|
||||
| 配置项 | 说明 |
|
||||
| --- | --- |
|
||||
| 逻辑运算符 | 与上一条件行的关系:`and`(且)或 `or`(或)。第一行不显示此选项 |
|
||||
| 左变量 | 选择要比较的目标变量,或直接使用 `true`/`false` 布尔值 |
|
||||
| 比较运算符 | `==` `~=` `>` `<` `>=` `<=` |
|
||||
| 比较方式 | 与固定值比较 / 与另一个变量比较 |
|
||||
| 右值 | 根据变量类型提供对应的输入控件 |
|
||||
|
||||
### 特殊规则
|
||||
|
||||
- **布尔变量**:当左侧选择布尔类型变量(如 `USER_ENABLE`)时,比较运算符和右值自动隐藏,
|
||||
条件直接判断该布尔值是否为真
|
||||
- 可以点击 [**+**] 按钮添加更多条件行,或点击 [**x**] 按钮删除某个条件行
|
||||
|
||||
## 配置操作步骤
|
||||
|
||||
每个判断块内可包含一个或多个操作步骤(Action Step),当该块的条件满足时,所有操作步骤按顺序执行。
|
||||
|
||||
### 操作类型
|
||||
|
||||
| 操作 | 说明 | 示例 |
|
||||
| --- | --- | --- |
|
||||
| **set** | 将变量设置为指定值 | `RESERVE_DATE = dateadd(datenow(), 1)` |
|
||||
| **add** | 在变量当前值上增加 | `RESERVE_BEGIN_TIME = RESERVE_BEGIN_TIME + 30` |
|
||||
| **sub** | 在变量当前值上减去 | `RESERVE_END_TIME = RESERVE_END_TIME - 60` |
|
||||
|
||||
### 值来源
|
||||
|
||||
| 来源 | 说明 |
|
||||
| --- | --- |
|
||||
| 固定值 | 手动输入或选择具体值 |
|
||||
| 变量 | 从其他目标变量读取值 |
|
||||
|
||||
### 日期和时间特殊处理
|
||||
|
||||
对于日期和时间类型变量,输入控件提供以下便捷选项:
|
||||
|
||||
| 变量类型 | 便捷选项 |
|
||||
| --- | --- |
|
||||
| Date | 今天、明天、后天、指定日期(日历选择器) |
|
||||
| Time | 当前时间、指定时间(时间选择器) |
|
||||
|
||||
<Note>
|
||||
当选择相对日期选项(如"明天")时,编排器会生成相应的工具函数调用(如 `dateadd(datenow(), 1)`),
|
||||
确保脚本在运行时动态计算正确的日期。
|
||||
</Note>
|
||||
|
||||
## 生成代码
|
||||
|
||||
配置完成后,点击 [**确认**] 按钮,编排器将把所有判断块转换为 Lua 代码并插入到代码编辑器中。
|
||||
|
||||
例如,以下编排配置:
|
||||
|
||||
- IF `USER_ENABLE` → set `RESERVE_DATE` 为明天,set `RESERVE_BEGIN_TIME` 为 09:00
|
||||
- ELSE → set `USER_ENABLE` 为 false
|
||||
|
||||
将生成:
|
||||
|
||||
```lua
|
||||
if USER_ENABLE then
|
||||
RESERVE_DATE = dateadd(datenow(), 1)
|
||||
RESERVE_BEGIN_TIME = time(9, 0)
|
||||
else
|
||||
USER_ENABLE = false
|
||||
end
|
||||
```
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
title: "语法指引"
|
||||
description: "AutoScript Lua 语法指南 - 变量、运算符、条件判断与注释"
|
||||
---
|
||||
|
||||
AutoScript 使用 Lua 5.4 作为脚本语言。本页介绍编写 AutoScript 所需的 Lua 基础语法。
|
||||
|
||||
## 注释
|
||||
|
||||
使用 `--` 开头编写单行注释:
|
||||
|
||||
```lua
|
||||
-- 这是一条注释
|
||||
RESERVE_DATE = dateadd(datenow(), 1) -- 这也是一条行内注释
|
||||
```
|
||||
|
||||
<Info>
|
||||
AutoScript 仅支持单行注释(`--`),不支持 Lua 的多行注释(`--[[ ]]`)。
|
||||
</Info>
|
||||
|
||||
## 变量赋值
|
||||
|
||||
使用 `=` 进行变量赋值。可操作的目标变量请参见[变量参考](/zh/autoscript/variables)。
|
||||
|
||||
```lua
|
||||
USERNAME = "alice"
|
||||
USER_ENABLE = true
|
||||
RESERVE_DATE = date(2025, 10, 30)
|
||||
RESERVE_BEGIN_TIME = time(9, 0)
|
||||
RESERVE_END_TIME = time(21, 30)
|
||||
```
|
||||
|
||||
<Warning>
|
||||
赋值必须保持变量原有的类型。例如,不能将字符串赋值给日期类型的变量,也不能将布尔值赋值给整数类型。类型错误会在脚本执行时报错。
|
||||
</Warning>
|
||||
|
||||
## 算术运算
|
||||
|
||||
支持基本的算术运算,可用于数值和日期/时间变量的计算:
|
||||
|
||||
```lua
|
||||
-- 数值运算
|
||||
RESERVE_BEGIN_TIME = RESERVE_BEGIN_TIME + 60 -- 开始时间推迟 60 分钟
|
||||
RESERVE_END_TIME = RESERVE_END_TIME - 30 -- 结束时间提前 30 分钟
|
||||
|
||||
-- 日期运算(使用工具函数)
|
||||
RESERVE_DATE = dateadd(RESERVE_DATE, 1) -- 日期延后 1 天
|
||||
RESERVE_DATE = dateadd(RESERVE_DATE, -3) -- 日期提前 3 天
|
||||
```
|
||||
|
||||
<Note>
|
||||
对于日期和时间的加减,推荐使用 `dateadd()` 和 `timeadd()` 函数。直接使用 `+` `-` 进行日期运算可能导致结果含义不明确。
|
||||
</Note>
|
||||
|
||||
## 条件判断
|
||||
|
||||
使用 `if` / `elseif` / `else` 结构进行条件判断。每个 `if` 块必须以 `end` 结尾:
|
||||
|
||||
```lua
|
||||
if USER_ENABLE then
|
||||
-- 用户启用时执行
|
||||
RESERVE_DATE = dateadd(datenow(), 1)
|
||||
end
|
||||
```
|
||||
|
||||
```lua
|
||||
if RESERVE_BEGIN_TIME < time(8, 0) then
|
||||
RESERVE_BEGIN_TIME = time(8, 0)
|
||||
else
|
||||
RESERVE_BEGIN_TIME = time(9, 0)
|
||||
end
|
||||
```
|
||||
|
||||
多条件判断:
|
||||
|
||||
```lua
|
||||
if RESERVE_BEGIN_TIME < time(8, 0) then
|
||||
RESERVE_BEGIN_TIME = time(8, 0)
|
||||
elseif RESERVE_BEGIN_TIME > time(22, 0) then
|
||||
RESERVE_BEGIN_TIME = time(22, 0)
|
||||
else
|
||||
RESERVE_BEGIN_TIME = RESERVE_BEGIN_TIME
|
||||
end
|
||||
```
|
||||
|
||||
## 比较运算符
|
||||
|
||||
| 运算符 | 说明 | 示例 |
|
||||
| --- | --- | --- |
|
||||
| `==` | 等于 | `USERNAME == "alice"` |
|
||||
| `~=` | 不等于 | `USER_ENABLE ~= false` |
|
||||
| `>` | 大于 | `RESERVE_BEGIN_TIME > time(9, 0)` |
|
||||
| `<` | 小于 | `RESERVE_END_TIME < time(22, 0)` |
|
||||
| `>=` | 大于等于 | `RESERVE_BEGIN_TIME >= time(7, 30)` |
|
||||
| `<=` | 小于等于 | `RESERVE_END_TIME <= time(23, 0)` |
|
||||
|
||||
## 逻辑运算符
|
||||
|
||||
| 运算符 | 说明 | 示例 |
|
||||
| --- | --- | --- |
|
||||
| `and` | 逻辑与 | `USER_ENABLE and RESERVE_BEGIN_TIME < time(12, 0)` |
|
||||
| `or` | 逻辑或 | `USERNAME == "alice" or USERNAME == "bob"` |
|
||||
| `not` | 逻辑非 | `not USER_ENABLE` |
|
||||
|
||||
## 布尔变量判断
|
||||
|
||||
对于布尔类型的变量(如 `USER_ENABLE`),可以直接作为条件使用,无需显式比较:
|
||||
|
||||
```lua
|
||||
-- 推荐写法
|
||||
if USER_ENABLE then
|
||||
...
|
||||
end
|
||||
|
||||
-- 等价但不推荐
|
||||
if USER_ENABLE == true then
|
||||
...
|
||||
end
|
||||
```
|
||||
|
||||
## 字符串
|
||||
|
||||
字符串使用双引号包裹:
|
||||
|
||||
```lua
|
||||
USERNAME = "20250101001"
|
||||
```
|
||||
|
||||
<Note>
|
||||
AutoScript 不支持字符串拼接(`..` 运算符)。字符串变量只能通过直接赋值修改。
|
||||
</Note>
|
||||
|
||||
## 关键字
|
||||
|
||||
以下是 AutoScript 中可用的 Lua 关键字:
|
||||
|
||||
`if` `elseif` `else` `then` `end` `and` `or` `not` `true` `false`
|
||||
|
||||
以下 Lua 标准功能出于安全考虑**不可用**:
|
||||
|
||||
- 文件 I/O(`io` 模块)
|
||||
- 模块加载(`require`、`dofile`、`loadfile`)
|
||||
- 系统命令执行(`os.execute`、`os.exit`)
|
||||
- 调试功能(`debug` 模块)
|
||||
- 循环语句(`for`、`while`)
|
||||
|
||||
<Info>
|
||||
出于安全沙箱限制,AutoScript 不支持循环语句。如果你需要为多个用户设置不同参数,建议使用用户分组功能,配合条件判断实现差异化配置。
|
||||
</Info>
|
||||
@@ -0,0 +1,120 @@
|
||||
---
|
||||
title: "变量参考"
|
||||
description: "AutoScript 可操作的目标变量完整参考 - 数据类型与映射关系"
|
||||
---
|
||||
|
||||
AutoScript 通过操作一组预定义的变量来调整预约参数。每个变量有固定的数据类型,赋值时必须保持类型一致。
|
||||
|
||||
## 变量列表
|
||||
|
||||
| 显示名称 | Lua 变量名 | 类型 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| 用户名 | `USERNAME` | String | 用户的学号 |
|
||||
| 用户启用 | `USER_ENABLE` | Boolean | 是否启用该用户 |
|
||||
| 预约日期 | `RESERVE_DATE` | Date | 座位预约日期 |
|
||||
| 预约开始时间 | `RESERVE_BEGIN_TIME` | Time | 预约开始时间 |
|
||||
| 预约结束时间 | `RESERVE_END_TIME` | Time | 预约结束时间 |
|
||||
|
||||
<Note>
|
||||
变量名区分大小写。`USERNAME`、`username` 和 `UserName` 是三个不同的标识符。
|
||||
请始终使用全大写变量名。
|
||||
</Note>
|
||||
|
||||
## 数据类型
|
||||
|
||||
### String(字符串)
|
||||
|
||||
文本类型,用于表示学号。
|
||||
|
||||
```lua
|
||||
USERNAME = "20250101001"
|
||||
```
|
||||
|
||||
限制:
|
||||
- 只能通过直接赋值修改
|
||||
- 不支持字符串拼接
|
||||
|
||||
### Boolean(布尔)
|
||||
|
||||
真/假值,用于控制用户是否被处理。
|
||||
|
||||
```lua
|
||||
USER_ENABLE = true -- 启用用户
|
||||
USER_ENABLE = false -- 跳过用户
|
||||
|
||||
-- 可直接作为条件判断
|
||||
if USER_ENABLE then
|
||||
-- 用户启用时执行
|
||||
end
|
||||
```
|
||||
|
||||
### Date(日期)
|
||||
|
||||
日期值,在 Lua 内部以数值形式存储(Unix 时间戳),在配置文件中以 `"YYYY-MM-DD"` 字符串形式存储。
|
||||
|
||||
```lua
|
||||
-- 使用工具函数创建日期
|
||||
RESERVE_DATE = date(2025, 10, 30) -- 绝对日期
|
||||
RESERVE_DATE = datenow() -- 今天
|
||||
RESERVE_DATE = dateadd(datenow(), 1) -- 明天
|
||||
RESERVE_DATE = strtodate("2025-12-31") -- 从字符串解析
|
||||
```
|
||||
|
||||
<Warning>
|
||||
不要直接对日期变量使用算术运算(如 `RESERVE_DATE + 86400`)。
|
||||
请使用 `dateadd()` 函数。
|
||||
</Warning>
|
||||
|
||||
### Time(时间)
|
||||
|
||||
时间值,在 Lua 内部以分钟数形式存储(0-1439),在配置文件中以 `"HH:MM"` 字符串形式存储。
|
||||
|
||||
```lua
|
||||
-- 使用工具函数创建时间
|
||||
RESERVE_BEGIN_TIME = time(9, 0) -- 09:00
|
||||
RESERVE_END_TIME = time(21, 30) -- 21:30
|
||||
RESERVE_BEGIN_TIME = timeadd(timenow(), 60) -- 当前时间 + 1 小时
|
||||
RESERVE_END_TIME = strtotime("22:00") -- 从字符串解析
|
||||
```
|
||||
|
||||
<Info>
|
||||
时间值在内部是以分钟为单位的整数值。`time(9, 30)` 等价于 `570`(9*60 + 30)。
|
||||
虽然可以直接使用数值,但建议始终使用工具函数以确保可读性和正确性。
|
||||
</Info>
|
||||
|
||||
## 虚拟变量
|
||||
|
||||
以下两个变量存在于可视化编排器中,但在实际 Lua 脚本中不可用。编排器会在生成代码时将它们转换为对应的函数调用:
|
||||
|
||||
| 虚拟变量 | 编排器中的含义 | 生成的 Lua 代码 |
|
||||
| --- | --- | --- |
|
||||
| `CURRENT_DATE` | 当前日期 | `datenow()` |
|
||||
| `CURRENT_TIME` | 当前时间 | `timenow()` |
|
||||
|
||||
<Note>
|
||||
在代码编辑器中编写脚本时,请直接使用 `datenow()` 和 `timenow()` 函数,
|
||||
不要使用 `CURRENT_DATE` 或 `CURRENT_TIME`。
|
||||
</Note>
|
||||
|
||||
## 类型安全
|
||||
|
||||
AutoScript 引擎会在脚本执行前后验证变量类型。以下情况会导致错误:
|
||||
|
||||
- 将字符串赋给日期变量
|
||||
- 将布尔值赋给整数变量
|
||||
- 将浮点数赋给需要整数的变量
|
||||
- 变量值变为 `nil`
|
||||
|
||||
```lua
|
||||
-- 正确:类型匹配
|
||||
RESERVE_DATE = dateadd(datenow(), 1) -- Date = Date
|
||||
USER_ENABLE = true -- Boolean = Boolean
|
||||
|
||||
-- 错误:类型不匹配
|
||||
RESERVE_DATE = "2025-10-30" -- Error: Date ≠ String
|
||||
USER_ENABLE = 1 -- Error: Boolean ≠ Int
|
||||
```
|
||||
|
||||
<Tip>
|
||||
如果脚本执行后某个变量值未改变,脚本中对该变量的赋值被跳过了,请检查赋值表达式的结果类型是否与变量声明的类型匹配。
|
||||
</Tip>
|
||||
Reference in new issue
Block a user