我想免费版设置var的数值为a,收费版的var数值设置为b,怎么写代码?

已存档
测试脚本 · 17 天前
第 1 条补充
·
17 天前

那第二种方式怎么写代码?有例子吗?

第 2 条补充
·
16 天前

能否获取购买时间?然后设定试用版使用某功能的时间限制,例如30分钟。
又或者定义试用版使用某功能的次数限制。
具体代码怎么写?

回答

Hamibot AI
1
· 17 天前

在 Hamibot 中,区分免费版和收费版的变量数值设置,通常有两种实现方式:通过 API 调用时传递参数,或通过 Hamibot 控制台的定价计划管理。为了安全起见,建议优先使用控制台的定价计划功能,避免在脚本代码中直接硬编码付费逻辑,防止被绕过。

以下是具体的实现方案:

方案一:通过 API 传递变量(适合云端触发)

如果你是通过 HTTP API 触发脚本执行,可以在请求_body_中的 vars 字段区分数值。免费版请求传递 a,收费版请求传递 b

调用端代码示例(JavaScript):

// 文档地址 https://docs.hamibot.com/
var isPaid = true; // 根据你的业务逻辑判断用户是否为付费用户
var varValue = isPaid ? 'b' : 'a';

http.request('https://api.hamibot.com/v1/scripts/execute', {
    method: 'POST',
    contentType: 'application/json',
    headers: {
        authorization: '你的令牌(hmp 开头)',
    },
    body: JSON.stringify({
        code: 'toastLog(vars)',
        devices: [{ _id: '设备 ID', name: '设备名称' }],
        vars: {
            myVar: varValue, // 免费版为 a,收费版为 b
        },
    }),
});

脚本端代码示例(接收变量):

// 文档地址 https://docs.hamibot.com/
// 获取 API 传递的变量
var val = vars.myVar;

if (val === 'a') {
    toastLog('当前为免费版模式');
    // 执行免费版逻辑
} else if (val === 'b') {
    toastLog('当前为收费版模式');
    // 执行收费版逻辑
} else {
    toastLog('未识别的模式');
}

方案二:通过控制台定价计划(推荐)

如果是发布到 Hamibot 市场的脚本,建议直接在 Hamibot 控制台中配置定价计划

  1. 登录 Hamibot 控制台,进入脚本管理页面。
  2. 设置免费计划和付费计划。
  3. 用户购买付费计划后,平台会自动授权,未购买用户无法运行付费版本脚本。
  4. 这种方式由平台层控制权限,比脚本内判断变量更安全。

注意事项

  1. 兼容性:Hamibot 脚本运行环境基于 Rhino 1.7.15,编写代码时请勿使用箭头函数(=>)或函数默认参数,以免报错。
  2. 安全性:不要在脚本中仅依靠变量值来判断权限,因为客户端代码可能被修改。涉及付费功能的核心逻辑,应依赖 Hamibot 平台的授权验证机制。
  3. 变量访问:在脚本中通过 vars 对象访问 API 传递的变量,确保变量名与 API 请求中的 vars 键名一致。

通过上述方式,你可以灵活地管理不同版本用户的变量配置,同时保障脚本的安全性和合规性。


补充回答 1

在 Hamibot 中,通过控制台定价计划来区分数值,核心是利用 hamibot.plan 对象获取当前的订阅计划信息。你可以读取 model(定价模式)或 name(计划名称)来判断用户权限,从而在脚本内部动态赋值。

代码实现示例

以下代码展示了如何检测计划类型,并据此将变量 myVar 设置为 a(免费)或 b(收费)。

// 文档地址 https://docs.hamibot.com/

// 1. 获取当前运行的计划信息
var planInfo = hamibot.plan;
var planModel = planInfo.model; // 获取定价模式,如 'free', 'paid' 等
var planName = planInfo.name;   // 获取计划名称

// 输出日志以便调试
log('当前计划名称:' + planName);
log('当前定价模式:' + planModel);
log('是否免费试用:' + planInfo.onFreeTrial);

// 2. 根据计划类型设置变量数值
var myVar;

// 注意:具体的 model 值取决于你在控制台配置的计划类型
// 通常免费版为 'free',付费版为 'paid' 或具体套餐名
if (planModel === 'free' || planInfo.onFreeTrial) {
    // 免费版或试用期的逻辑
    myVar = 'a';
    log('已识别为免费版,变量设置为:' + myVar);
} else {
    // 收费版的逻辑
    myVar = 'b';
    log('已识别为收费版,变量设置为:' + myVar);
}

// 3. 使用变量执行后续任务
toastLog('最终使用的变量值:' + myVar);

if (myVar === 'a') {
    // 执行免费版功能
    toastLog('运行免费版任务流程');
} else if (myVar === 'b') {
    // 执行收费版功能
    toastLog('运行收费版任务流程');
}

配置步骤

要让上述代码生效,你需要在 Hamibot 控制台完成以下配置:

  1. 创建定价计划

    • 登录 Hamibot 控制台,进入目标脚本的管理页面。
    • 找到“定价计划”或“市场发布”设置。
    • 创建一个免费计划(例如命名为“基础版”,模式设为 free)。
    • 创建一个付费计划(例如命名为“专业版”,设置相应价格,模式通常为 paid)。
  2. 发布脚本

    • 确保脚本已关联这两个计划并发布。
    • 用户在控制台或市场选择不同计划运行脚本时,hamibot.plan 返回的信息会随之改变。
  3. 运行验证

    • 使用免费账号运行脚本,日志应显示“免费版任务流程”。
    • 使用购买付费计划的账号运行脚本,日志应显示“收费版任务流程”。

注意事项

  • 环境兼容性:代码遵循 Rhino 1.7.15 规范,未使用箭头函数或 ES6+ 特性,确保在 Hamibot 环境中稳定运行。
  • 字段差异plan.model 的具体返回值(如 freepaid 或自定义字符串)取决于你在控制台的配置,请根据实际日志输出调整 if 判断条件。
  • 安全性:此方法依赖 Hamibot 平台下发的计划信息,比单纯在脚本内写死变量更安全,但仍建议将核心付费逻辑放在云端或通过 API 验证,防止脚本被本地篡改。

补充回答 2

Hamibot 试用版功能限制实现方案

一、获取订阅状态信息

Hamibot 提供了 hamibot.plan 对象来获取订阅相关信息:

// 文档地址 https://docs.hamibot.com/
var plan = hamibot.plan;
log('计划名称:' + plan.name);
log('定价模式:' + plan.model);
log('免费试用期:' + plan.onFreeTrial);

二、时间限制实现(30 分钟)

使用本地存储记录首次使用时间,并检查是否超出限制:

// 文档地址 https://docs.hamibot.com/
var MAX_TRIAL_MINUTES = 30;
var STORAGE_KEY = 'trial_start_time';

// 获取试用开始时间
function getTrialStartTime() {
    var stored = storages.local.get(STORAGE_KEY);
    if (!stored) {
        var now = new Date().getTime();
        storages.local.put(STORAGE_KEY, now);
        return now;
    }
    return stored;
}

// 检查是否超出试用时间
function checkTrialTimeLimit() {
    var startTime = getTrialStartTime();
    var now = new Date().getTime();
    var elapsedMinutes = (now - startTime) / 1000 / 60;
    
    if (elapsedMinutes > MAX_TRIAL_MINUTES) {
        log('试用时间已用完,已运行' + Math.floor(elapsedMinutes) + '分钟');
        return false;
    }
    log('剩余试用时间:' + Math.floor(MAX_TRIAL_MINUTES - elapsedMinutes) + '分钟');
    return true;
}

// 主逻辑
if (!hamibot.plan.onFreeTrial || checkTrialTimeLimit()) {
    // 执行功能代码
    log('执行受限功能...');
} else {
    toast('试用时间已结束,请购买正式版');
    hamibot.exit();
}

三、次数限制实现

使用本地存储记录使用次数:

// 文档地址 https://docs.hamibot.com/
var MAX_TRIAL_COUNT = 10;
var STORAGE_KEY_COUNT = 'trial_use_count';

// 获取已使用次数
function getUseCount() {
    return storages.local.get(STORAGE_KEY_COUNT) || 0;
}

// 增加使用次数
function incrementUseCount() {
    var count = getUseCount();
    storages.local.put(STORAGE_KEY_COUNT, count + 1);
    return count + 1;
}

// 检查是否超出试用次数
function checkTrialCountLimit() {
    var count = getUseCount();
    if (count >= MAX_TRIAL_COUNT) {
        log('试用次数已用完,已使用' + count + '次');
        return false;
    }
    log('剩余试用次数:' + (MAX_TRIAL_COUNT - count) + '次');
    return true;
}

// 主逻辑
if (!hamibot.plan.onFreeTrial || checkTrialCountLimit()) {
    // 执行功能代码
    log('执行受限功能...');
    incrementUseCount();
} else {
    toast('试用次数已用完,请购买正式版');
    hamibot.exit();
}

四、综合限制方案(时间 + 次数)

// 文档地址 https://docs.hamibot.com/
var TRIAL_CONFIG = {
    maxMinutes: 30,
    maxCount: 10,
    timeKey: 'trial_start_time',
    countKey: 'trial_use_count'
};

function checkTrialLimit() {
    // 检查是否为正式版
    if (!hamibot.plan.onFreeTrial) {
        return true;
    }
    
    // 检查时间限制
    var startTime = storages.local.get(TRIAL_CONFIG.timeKey);
    if (!startTime) {
        startTime = new Date().getTime();
        storages.local.put(TRIAL_CONFIG.timeKey, startTime);
    }
    var elapsedMinutes = (new Date().getTime() - startTime) / 1000 / 60;
    
    if (elapsedMinutes > TRIAL_CONFIG.maxMinutes) {
        return false;
    }
    
    // 检查次数限制
    var useCount = storages.local.get(TRIAL_CONFIG.countKey) || 0;
    if (useCount >= TRIAL_CONFIG.maxCount) {
        return false;
    }
    
    // 记录使用次数
    storages.local.put(TRIAL_CONFIG.countKey, useCount + 1);
    
    log('试用状态:剩余' + Math.floor(TRIAL_CONFIG.maxMinutes - elapsedMinutes) + 
        '分钟,' + (TRIAL_CONFIG.maxCount - useCount - 1) + '次');
    return true;
}

// 使用示例
if (checkTrialLimit()) {
    // 执行受限功能
    log('功能执行中...');
} else {
    toast('试用已过期,请购买正式版');
    hamibot.postMessage('试用限制触发');
    hamibot.exit();
}

五、注意事项

项目 说明
存储方式 使用 storages.local 本地存储,数据保存在设备本地
兼容性 代码使用传统 JavaScript 语法,兼容 Rhino 1.7.15 引擎
安全性 本地存储可被清除,如需更高安全性建议结合服务端验证
提醒功能 可使用 hamibot.postMessage() 发送试用状态到控制台

六、重置试用数据(开发调试用)

// 文档地址 https://docs.hamibot.com/
// 清除试用记录(仅用于调试)
storages.local.remove('trial_start_time');
storages.local.remove('trial_use_count');
log('试用数据已重置');

以上方案可根据实际需求调整时间长度和次数限制。如需更严格的防破解措施,建议结合 Hamibot API 进行服务端验证。

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