Deluge签到脚本优化:如何拦截重复登录与重复登出操作
签到应用Deluge脚本优化:防止重复登录/登出
需求说明
需要实现以下限制:
- 已处于**Sign In(登录)**状态的用户,无法再次执行登录操作
- 已处于**Sign Out(登出)**状态的用户,无法再次执行登出操作
原脚本仅实现状态切换,但未限制重复操作,用户手动覆盖状态后会导致无效的重复记录。
原脚本
var = Sign_in_out[UserName == input.UserName] sort by Added_Time Desc; if(var.Status == "Sign In") { Status.select("Sign Out"); } else if(var.Status == "Sign Out") { Status.select("Sign In"); } else { Status.select("Sign In"); }
优化后的脚本
// 获取用户最新的签到状态记录 var userRecords = Sign_in_out[UserName == input.UserName] sort by Added_Time Desc; latestStatus = if(userRecords.size() > 0, userRecords.Status, null); // 基于用户触发的操作("Sign In"或"Sign Out")执行校验 if(input.Action == "Sign In") { // 已登录则阻止操作 if(latestStatus == "Sign In") { alert("您已处于登录状态,无需重复操作"); abort; // 终止脚本,不执行后续动作 } // 执行登录操作并保存记录 Status.select("Sign In"); Sign_in_out.add({ "UserName": input.UserName, "Status": "Sign In", "Added_Time": now() }); } else if(input.Action == "Sign Out") { // 已登出则阻止操作 if(latestStatus == "Sign Out") { alert("您已处于登出状态,无需重复操作"); abort; // 终止脚本,不执行后续动作 } // 执行登出操作并保存记录 Status.select("Sign Out"); Sign_in_out.add({ "UserName": input.UserName, "Status": "Sign Out", "Added_Time": now() }); }
逻辑说明
- 获取最新状态:通过用户名筛选记录并按时间倒序排序,确保拿到用户当前的真实状态
- 操作校验拦截:根据用户触发的具体操作,检查当前状态是否与操作重复,重复则弹出提示并终止脚本
- 强制状态流转:仅当操作与当前状态不冲突时,才执行状态切换并保存新记录,避免手动修改状态导致的无效操作
内容的提问来源于stack exchange,提问作者cluelesscoder
相关产品推荐
相关产品推荐

