storage.put('a', a);
storage.put('b', b);
storage.put('c', c);
能否将他整合写成一段?

090909 · 3 小时前
第 1 条补充
·
2 小时前

var storage = storages.create('pll@pll.asia:counterStorage');
var setdata = storage.get('counters', {PDmodebut: "a", soft: "a", hidMode: "none", paymodebut: "a", cldelay: 400, paydelay: 100, tqtime: 200, popupInterval: 50, ticketTime: "00:01", paymodebutton: "a"});
setdata.PDmodebut = PDmodebut;
setdata.soft = soft;
setdata.hidMode = hidMode;
setdata.paymodebut = paymodebut;
setdata.cldelay = cldelay;
setdata.paydelay = paydelay;
setdata.tqtime = tqtime;
setdata.popupInterval = popupInterval;
setdata.ticketTime = ticketTime;
setdata.paymodebutton = paymodebutton;
storage.put('counters', setdata);
log(保存成功:HID:${hidMode},支付${paydelay}ms,清扫${popupInterval}ms,破盾${cldelay}ms,提前${tqtime}ms,开冲时间${ticketTime},购票模式${paymodebut});

这样会显示PDmodebut 未定义,要怎么更改?

回答

Hamibot AI
1
· 2 小时前

在 Hamibot 中,Storage 对象没有内置的批量写入方法,但你可以通过以下两种方式将代码整合为一段。推荐根据你的实际使用场景选择:

方式一:打包为单个对象存储(推荐)
storages 模块原生支持 ObjectArray 的存取(底层自动使用 JSON.stringify 序列化)。将关联数据合并为一个对象一次性写入,代码更简洁且能减少多次 I/O 操作:

// 文档地址 https://docs.hamibot.com/
storage.put('groupData', { a: a, b: b, c: c });

// 读取示例
var data = storage.get('groupData');
log(data.a, data.b, data.c);

方式二:使用循环批量写入独立键值
如果你必须保持 abc 作为独立的存储键,可以通过遍历对象整合写入逻辑:

// 文档地址 https://docs.hamibot.com/
var dataMap = { a: a, b: b, c: c };
for (var key in dataMap) {
  if (dataMap.hasOwnProperty(key)) {
    storage.put(key, dataMap[key]);
  }
}

最佳实践建议:

  • 优先使用方式一。将同组配置或状态数据聚合存储,不仅便于管理,还能显著提升脚本读写效率。
  • 上述代码已针对 Hamibot 的 Rhino 1.7.15 引擎进行兼容处理,未使用箭头函数、默认参数等现代语法,可直接运行。
  • 存储名称建议加入唯一标识(如 yourEmail:config),避免与其他脚本的本地存储发生键名冲突。

你可以根据数据是否需要独立读取来选择对应方案。有其他脚本优化或 Hamibot 使用问题,随时告诉我。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 2 小时前

报错 PDmodebut 未定义 的根本原因是:在赋值语句 setdata.PDmodebut = PDmodebut; 中,右侧的变量 PDmodebut 在当前作用域内没有被声明或赋值。JavaScript 引擎无法读取不存在的变量,直接抛出 ReferenceError

此外,你的代码中使用了 ES6 模板字符串 `...`,Hamibot 的 Rhino 1.7.15 引擎不支持该语法,修复变量问题后会立即触发语法报错。

以下是兼容 Rhino 引擎且能稳定运行的修正方案:

// 文档地址 https://docs.hamibot.com/
var storage = storages.create('pll@pll.asia:counterStorage');
var setdata = storage.get('counters', {
  PDmodebut: "a", soft: "a", hidMode: "none", paymodebut: "a",
  cldelay: 400, paydelay: 100, tqtime: 200, popupInterval: 50,
  ticketTime: "00:01", paymodebutton: "a"
});

// 安全赋值:若外部变量已定义则使用新值,否则保留 storage 中的旧值
setdata.PDmodebut = (typeof PDmodebut !== 'undefined') ? PDmodebut : setdata.PDmodebut;
setdata.soft = (typeof soft !== 'undefined') ? soft : setdata.soft;
setdata.hidMode = (typeof hidMode !== 'undefined') ? hidMode : setdata.hidMode;
setdata.paymodebut = (typeof paymodebut !== 'undefined') ? paymodebut : setdata.paymodebut;
setdata.cldelay = (typeof cldelay !== 'undefined') ? cldelay : setdata.cldelay;
setdata.paydelay = (typeof paydelay !== 'undefined') ? paydelay : setdata.paydelay;
setdata.tqtime = (typeof tqtime !== 'undefined') ? tqtime : setdata.tqtime;
setdata.popupInterval = (typeof popupInterval !== 'undefined') ? popupInterval : setdata.popupInterval;
setdata.ticketTime = (typeof ticketTime !== 'undefined') ? ticketTime : setdata.ticketTime;
setdata.paymodebutton = (typeof paymodebutton !== 'undefined') ? paymodebutton : setdata.paymodebutton;

storage.put('counters', setdata);

// 注意:Rhino 1.7.15 不支持模板字符串,必须使用 + 拼接。日志直接读取 setdata 避免再次引用未定义变量。
log('保存成功:HID:' + setdata.hidMode + ',支付' + setdata.paydelay + 'ms,清扫' + setdata.popupInterval + 'ms,破盾' + setdata.cldelay + 'ms,提前' + setdata.tqtime + 'ms,开冲时间' + setdata.ticketTime + ',购票模式' + setdata.paymodebut);

关键修改说明

  1. 解决未定义报错:使用 typeof 变量 !== 'undefined' 进行安全检测。如果这些变量在脚本其他位置已正确赋值,则更新数据;如果未定义或漏传,则自动沿用 storage 中的历史值,防止脚本中断。
  2. 修复引擎兼容性:移除了 `...${}...` 模板字符串语法,替换为传统的 + 字符串拼接。Rhino 1.7.15 仅支持 ES5 标准,使用模板字符串会直接导致 SyntaxError
  3. 日志输出优化log 中直接读取 setdata 对象的属性,避免再次依赖外部变量,确保日志打印绝对稳定。

最佳实践建议

  • 如果这些值来自 Hamibot 的脚本配置面板,请统一通过 hamibot.env.PDmodebut 等方式获取,并在脚本开头集中声明:
    var PDmodebut = hamibot.env.PDmodebut || 'a';
    
  • 避免在全局作用域随意隐式创建变量。所有参与逻辑的变量都应使用 var 提前声明,便于排查作用域问题。
  • 配置类数据建议统一打包为单个对象存储(如当前写法),减少 storage.put 的调用次数,可显著提升脚本 I/O 性能。

按上述代码替换后,未定义报错和语法兼容问题将同时解决。有其他脚本逻辑或 Hamibot 使用问题,随时告诉我。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实