我想把同一个脚本用三种不同配置怎么办

HAMI_1265730863 · 6 小时前

回答

Hamibot AI
1
· 6 小时前

在 Hamibot 中,想要让同一个脚本代码使用三种不同的配置运行,最稳定且推荐的做法是创建三个独立的脚本实例。每个实例拥有相同的代码,但保存不同的配置参数。这样可以实现独立的调度、独立的日志记录以及互不干扰的运行状态。

以下是具体的实施方案:

方案一:复制脚本实例(推荐)

这是最适合长期自动化任务的方案。

  1. 创建脚本:在 Hamibot 控制台创建第一个脚本,上传代码和配置文件。
  2. 复制脚本:使用控制台的“复制”功能,将该脚本复制两份,总共得到三个脚本。
  3. 区分命名:将三个脚本分别命名为例如“任务 - 配置 A"、“任务 - 配置 B"、“任务 - 配置 C"。
  4. 设置配置:分别进入这三个脚本的配置页面,设置不同的参数(例如不同的账号、不同的循环次数、不同的延迟时间等)。
  5. 独立调度:你可以为这三个脚本分别设置不同的定时任务,或者通过 API 分别触发它们。

优点

  • 配置隔离,互不影响。
  • 每个脚本有独立的运行日志,便于排查问题。
  • 支持独立的定时计划。

方案二:使用配置文件定义参数

如果你需要动态管理配置,可以在脚本中定义 config.json 文件。Hamibot 支持通过配置文件定义脚本运行时的参数界面。

config.json 示例

[
    {
        "name": "account",
        "label": "账号",
        "type": "string",
        "default": "user1"
    },
    {
        "name": "interval",
        "label": "循环间隔 (毫秒)",
        "type": "number",
        "default": 5000
    }
]

在脚本代码中,你可以通过 hamibot.config 对象获取这些值:

// 文档地址 https://docs.hamibot.com/
var account = hamibot.config.account;
var interval = hamibot.config.interval;

log("当前使用账号:" + account);
log("当前循环间隔:" + interval);

// 业务逻辑
// ...

注意:即使使用了配置文件,若要同时维持三套不同的固定配置,仍然建议配合方案一(复制脚本),因为单个脚本 ID 通常只保存一套当前生效的配置值。

方案三:通过 engines 模块触发(高级)

如果你希望有一个主脚本同时启动这三个不同配置的任务,可以使用 engines 模块。你需要将三种配置对应的脚本上传为不同的文件路径或不同的脚本 ID。

// 文档地址 https://docs.hamibot.com/
// 假设你有三个不同的脚本文件代表三种配置
// 注意:engines.execScriptFile 适用于本地文件管理场景

var task1 = engines.execScriptFile("./task_config_1.js");
var task2 = engines.execScriptFile("./task_config_2.js");
var task3 = engines.execScriptFile("./task_config_3.js");

// 等待脚本启动
sleep(2000);

// 如果需要向脚本发送特定参数,可以使用 emit
// 前提是子脚本中监听了对应事件
task1.getEngine().emit("setAccount", "user1");
task2.getEngine().emit("setAccount", "user2");
task3.getEngine().emit("setAccount", "user3");

最佳实践建议

  1. 代码复用:将核心逻辑封装成函数或模块,三个脚本实例只引用相同的代码库,避免修改代码时需要更新三个地方。
  2. 配置命名:在配置文件中清晰标注参数用途,例如 delay(延迟)、loopTimes(循环次数)。
  3. 兼容性注意:编写脚本时请注意 JavaScript 引擎兼容性(Rhino 1.7.15)。
    • 不要使用箭头函数(=>)。
    • 不要使用函数默认参数值。
    • 使用 var 声明变量。

通过复制脚本实例的方式,你可以最简单地实现“同一代码,多种配置”的需求,同时保持任务管理的清晰度。

ℹ️ 本回答由 AI 生成,内容仅供参考