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:
KenanZhuandClaude committed 2026-06-14 21:22:58 +08:00
1 parent c13da9f2f5
commit 552f21ef8f
23 files changed
+2158 -38

No files matched your search

+104
View File
@@ -0,0 +1,104 @@
---
title: "代码编辑器"
description: "AutoScript 代码编辑器使用指南 - 语法高亮、代码模板与调试运行"
---
AutoScript 代码编辑器提供完整的 Lua 脚本编写体验,包括语法高亮、代码模板插入和模拟调试功能。
## 打开编辑器
在定时任务管理窗口中添加或编辑任务时,点击 [**AutoScript**] 区域的编辑按钮即可打开代码编辑器。
{/* TODO: 添加代码编辑器界面截图 */}
![AutoScript 代码编辑器](/images/v1.4.0/autoscript-editor.png)
## 语法高亮
编辑器使用配色方案区分不同类型的代码元素,帮助你快速识别脚本结构:
| 颜色 | 元素类型 | 示例 |
| --- | --- | --- |
| 蓝色加粗 | 关键字 | `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: 添加调试运行结果截图
![AutoScript 调试运行结果](/images/v1.4.0/autoscript-debug-result.png)
*/}
</Step>
</Steps>
<Tip>
在将脚本配置到定时任务之前,建议先使用调试运行功能验证脚本逻辑是否正确,
特别是验证变量的最终值是否符合预期。
</Tip>
## 从编排器导入
如果你通过可视化编排器构建了脚本逻辑,可以点击 [**编排**] 按钮打开编排器,
编排器生成的代码将插入到编辑器光标所在位置。
<Note>
你可以在编排器中构建基本逻辑框架,然后在编辑器中手动调整细节,
两种方式可以灵活结合使用。
</Note>
+235
View File
@@ -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 |
+83
View File
@@ -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>
+137
View File
@@ -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 配置截图 */}
![定时任务 AutoScript 配置](/images/v1.4.0/timer-autoscript-config.png)
## 典型示例
### 示例 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
```
+105
View File
@@ -0,0 +1,105 @@
---
title: "可视化编排器"
description: "AutoScript 可视化编排器 - 通过图形界面构建条件判断与变量操作,无需手写代码"
---
可视化编排器让你通过图形界面构建 AutoScript 脚本,无需了解 Lua 语法。编排器会根据你的配置自动生成代码。
{/* TODO: 添加可视化编排器界面截图 */}
![AutoScript 可视化编排器](/images/v1.4.0/autoscript-orchestrator.png)
## 编排器结构
编排器由多个判断块(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
```
+149
View File
@@ -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>
+120
View File
@@ -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>