Files
bettergi-scripts-list/repo/js/AutoCommission/lib/step-processor-loader.js
2025-08-14 22:46:12 +08:00

114 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 步骤处理器加载器和工厂
var StepProcessorLoader = {
// 存储已加载的步骤处理器
processors: {},
// 动态加载步骤处理器
loadStepProcessors: function() {
try {
// 尝试获取lib/steps目录下的所有.js文件
var stepFiles = [];
// 使用BGI支持的ReadPathSync方法获取文件列表
try {
if (typeof file.ReadPathSync === "function") {
var allPaths = file.ReadPathSync("lib/steps");
// 确保返回的是数组类型,并进行类型转换
if (!Array.isArray(allPaths)) {
// 如果不是数组,尝试转换为数组
allPaths = Array.from(allPaths || []);
}
stepFiles = allPaths.filter(function(path) {
// 只选择.js文件排除文件夹
// 检查路径是否在lib/steps目录下且是.js文件
return path.toLowerCase().endsWith(".js") &&
(path.indexOf("lib/steps/") === 0 || path.indexOf("lib\\steps\\") === 0);
}).map(function(path) {
// 移除lib/steps/前缀,只保留文件名
return path.replace(/^lib[\/\\]steps[\/\\]/, "");
});
} else {
throw new Error("file.ReadPathSync方法不可用");
}
} catch (getDirError) {
log.warn("无法动态扫描目录: {error},使用预定义文件列表", getDirError.message);
throw getDirError;
}
log.info("发现 {count} 个步骤处理器文件", stepFiles.length);
// 加载所有步骤处理器文件
for (var i = 0; i < stepFiles.length; i++) {
var fileName = stepFiles[i];
try {
log.info("正在加载步骤处理器: {file}", fileName);
eval(file.readTextSync("lib/steps/" + fileName));
log.debug("步骤处理器 {file} 加载成功", fileName);
} catch (error) {
log.error("加载步骤处理器 {file} 失败: {error}", fileName, error.message);
}
}
log.info("步骤处理器动态加载完成,共注册 {count} 个处理器", Object.keys(this.processors).length);
} catch (error) {
log.error("动态扫描步骤处理器目录失败: {error}", error.message);
log.warn("将使用备用的固定文件列表加载方式");
this.loadStepProcessorsFallback();
}
},
// 备用加载方式(如果动态扫描失败)
loadStepProcessorsFallback: function() {
var stepFiles = [
"map-tracking.js",
"wait.js",
"commission-tracking.js",
"key-mouse-script.js",
"key-press.js",
"teleport.js",
"wait-main-ui.js",
"location-detection.js",
"commission-description-detection.js",
"switch-role.js",
"switch-team.js",
"auto-task.js"
];
// 加载所有步骤处理器文件
for (var i = 0; i < stepFiles.length; i++) {
var fileName = stepFiles[i];
try {
log.info("正在加载步骤处理器: {file}", fileName);
eval(file.readTextSync("lib/steps/" + fileName));
log.debug("步骤处理器 {file} 加载成功", fileName);
} catch (error) {
log.error("加载步骤处理器 {file} 失败: {error}", fileName, error.message);
}
}
log.info("备用方式加载完成,共注册 {count} 个处理器", Object.keys(this.processors).length);
},
// 注册新的步骤处理器(供各个处理器文件调用)
register: function(stepType, processor) {
this.processors[stepType] = processor;
log.info("注册步骤处理器: {type}", stepType);
},
// 处理步骤
process: async function(step, context) {
var processor = this.processors[step.type];
if (processor) {
await processor(step, context);
} else {
log.warn("未知的流程类型: {type}", step.type);
}
},
// 获取所有已注册的处理器类型
getRegisteredTypes: function() {
return Object.keys(this.processors);
}
};