mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-05-02 23:49:50 +08:00
* feat(activity): 优化活动筛选逻辑并添加白名单功能 - 新增 relationship 配置项,控制剩余时间与白名单的逻辑关系 - 将 activityNameList 重命名为 whiteActivityNameList 作为白名单功能 - 实现白名单与黑名单的互斥过滤机制 - 更新活动筛选逻辑,支持按剩余时间或白名单条件过滤 - 修改通知标题构建逻辑,显示剩余时间与白名单配置信息 - 更新 README 文档说明白名单与逻辑关系配置使用方法 * chore(ActivitySwitchNotice): 更新版本号 - 将版本号从 0.0.2 更新到 0.0.3 * fix(ActivitySwitchNotice): 修正活动识别日志消息 - 修正了未识别到活动时的日志消息文案,从"未识别到任何活动"改为"不存在符合条件的活动" * refactor: 优化秘境征讨提醒逻辑代码结构 * fix(activity): 修复活动白名单过滤逻辑 - 修复了当配置了关系条件时活动白名单过滤的问题 - 添加了对 config.relationship 的检查以决定是否跳过活动处理 - 确保在没有关系配置的情况下仍然按照白名单过滤活动 * fix(ActivitySwitchNotice): 修复活动白名单逻辑判断错误 - 修正了白名单活动匹配时的关系判断逻辑 - 将 !config.relationship 条件改为 config.relationship - 确保只有在关系配置正确时才跳过非白名单活动 * refactor(ActivitySwitchNotice): 优化OCR识别函数命名 - 将OcrRemainingTime函数重命名为OcrKey以提高通用性 - 更新函数调用以使用新的函数名称 - 保持原有功能逻辑不变,仅优化函数命名规范 * fix(activity): 修复OCR识别和活动过滤逻辑 - 修复OCR识别时资源释放位置,添加try-finally确保截图资源正确释放 - 修改OCR识别逻辑,支持返回多个匹配结果并用'<-->'连接 - 修复活动名称过滤条件中的逻辑运算符空格问题 - 优化代码结构,提高OCR识别的稳定性和准确性 * fix(ActivitySwitchNotice): 修复活动识别结果处理逻辑 - 将 Set 数据结构改为数组并使用 push 方法添加元素 - 保持原有的文本识别和日志记录功能 - 确保返回识别到的文本结果 * feat(ActivitySwitchNotice): 添加根据键名部分内容获取Map值的工具函数 - 新增getMapByKey函数,支持通过键名部分匹配获取Map中的值 - 更新needOcrOtherMap配置,为"飒勇争锋"和"幽境危战"活动添加OCR识别项 - 修改代码逻辑,使用getMapByKey函数替代原有的精确匹配方式 - 优化活动OCR处理流程,提升键名匹配的灵活性 * refactor(ActivitySwitchNotice): 优化OCR识别功能 - 移除"飒勇争锋"活动的OCR配置项 - 修复getMapByKey函数参数格式问题 - 添加函数间空白行以改善代码可读性 - 增强OCR识别日志记录功能,添加命中标识 - 修复变量赋值和参数传递的格式问题 * feat(ActivitySwitchNotice): 添加通用关键词OCR识别功能 - 新增commonList常量定义通用关键词列表 - 实现通用关键词的OCR识别逻辑 - 将识别结果添加到剩余时间文本中 - 支持对已完成等通用状态的自动识别 * feat(ActivitySwitchNotice): 添加通用关键词显示功能 - 在activity.js中添加common变量存储通用关键词 - 将通用关键词信息保存到activityMap中 - 在notice.js中读取并显示通用关键词信息 - 修复通知文本中的格式问题 - 优化条件判断中的空格格式 * docs(ActivitySwitchNotice): 更新README文档添加剩余时间与白名单关系配置说明 - 新增:支持剩余时间和白名单的"与"关系和"或"关系配置说明 - 完善了配置参数文档,增加了`relationship`参数的详细说明 - 更新了版本发布信息和变更日志格式 * feat(ActivitySwitchNotice): 添加剩余时间与白名单关系配置和完成状态显示 - 支持剩余时间和白名单的"与"关系和"或"关系配置 - 添加标记界面显示 `已完成` 的活动功能 - 修复活动过滤逻辑问题,将`activityNameList`更改为`whiteActivityNameList` - 新增黑名单与白名单的互斥过滤机制,黑名单中剔除白名单 - 在配置中增加`relationship`参数,用于控制剩余时间与白名单活动的逻辑关系 * fix(ActivitySwitchNotice): 修复活动切换通知中的逻辑错误和显示问题 - 修复剩余时间白名单关系逻辑,默认从`与`改为`或`关系 - 移除过早的返回语句,确保列表处理逻辑完整执行 - 调整注释格式以保持代码一致性 * fix(ActivitySwitchNotice): 修复活动通用键处理逻辑 - 将common变量初始化为数组而非undefined - 使用push方法将OCR识别文本添加到数组中 - 将数组内容通过逗号连接成字符串存储 - 当数组为空时保持undefined值以维持原有行为 * refactor(Notice): 重构活动通知黑名单文本拼接逻辑 * refactor(ActivitySwitchNotice): 重命名活动学期转换函数并添加文档注释 - 将 getDATE_ENUM 函数重命名为 getActivityTermConversion 以提高语义清晰度 - 为函数添加 JSDoc 注释说明参数和返回值类型 - 在函数内部添加代码注释解释逻辑流程 - 更新函数调用处的函数名称引用 * refactor(ActivitySwitchNotice): 移除废弃的滚动到顶部功能 - 删除了 scrollPagesByActivityToTop 函数的完整实现 - 移除了相关的OCR检测和鼠标滚动逻辑 - 清理了游戏区域截图和资源释放代码 - 保留了优化版的滚动到顶部功能注释 * fix(ActivitySwitchNotice): 修复截图资源释放问题 - 添加 try-finally 块确保 captureRegion 资源正确释放 - 防止截图资源未释放导致的内存泄漏问题 - 保持截图识别和滚动逻辑不变 - 修复黑名单文本格式中的多余空格问题 * refactor(ActivitySwitchNotice): 优化活动列表扫描逻辑的资源管理 - 添加 try-finally 块确保 captureRegion 资源正确释放 - 修复资源泄露问题,避免未调用 dispose() 方法 - 保持原有的活动识别和滚动扫描功能不变 - 优化代码结构提高可读性和维护性 * fix(ocr): 修复OCR文本提取时的空值问题 - 添加了对OCR提取结果的空值检查 - 避免将空值推入common数组中 - 确保只有有效的文本内容才会被添加到数组中
121 lines
4.6 KiB
JavaScript
121 lines
4.6 KiB
JavaScript
function settingsParseInt(str, defaultValue) {
|
||
try {
|
||
return str ? parseInt('' + str) : defaultValue;
|
||
} catch (e) {
|
||
log.warn(`settingsParseInt error:${e}`)
|
||
return defaultValue;
|
||
}
|
||
}
|
||
|
||
function settingsParseStr(str, defaultValue) {
|
||
return '' + (str ? str : defaultValue);
|
||
}
|
||
|
||
const config = {
|
||
campaignAreaKey: settingsParseStr(settings.campaignAreaKey, 'F1'),
|
||
campaignAreaReminderDay: settingsParseInt(settings.campaignAreaReminderDay, 0),//征讨领域提醒日
|
||
}
|
||
const ocrRegionConfig = {
|
||
weeklyCount: {x: 809, y: 258, width: 277, height: 37},//征讨领域减半次数识别区域坐标和尺寸
|
||
}
|
||
const xyConfig = {
|
||
campaignArea: {x: 493, y: 537},//征讨领域坐标
|
||
secretRealm: {x: 304, y: 448},//秘境坐标
|
||
}
|
||
|
||
/**
|
||
* OCR识别周计数函数
|
||
* @param {Object} ocrRegion - OCR识别区域配置,默认为ocrRegionConfig.weeklyCount
|
||
* @returns {Object} 返回包含周计数信息的JSON对象,包含text、total和count属性
|
||
* @throws {Error} 当OCR识别失败时抛出错误
|
||
*/
|
||
async function ocrWeeklyCount(ocrRegion = ocrRegionConfig.weeklyCount) {
|
||
let captureRegion = captureGameRegion(); // 获取游戏区域截图
|
||
const ocrObject = RecognitionObject.Ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height); // 创建OCR识别对象
|
||
// ocrObject.threshold = 1.0;
|
||
let res = captureRegion.find(ocrObject); // 在指定区域进行OCR识别
|
||
captureRegion.dispose(); // 释放截图资源
|
||
if (!res.isExist()) {
|
||
log.error(`ocrWeeklyCount not found`) // 记录错误日志
|
||
throw new Error(`ocrWeeklyCount not found`) // 抛出错误异常
|
||
}
|
||
let weekJson = { // 初始化周计数JSON对象
|
||
text: res.text,
|
||
total: 3,
|
||
count: 3,
|
||
}
|
||
let weekCountText = res.text // 获取OCR识别的文本结果
|
||
let result = weekCountText.match(/[0-9/]+/g)?.join('') || ''; // 使用正则表达式提取数字和斜杠
|
||
|
||
log.debug(`识别结果:{weekCountText}`, weekCountText) // 记录原始识别结果
|
||
log.debug(`处理结果:{result}`, result) // 记录处理后的结果
|
||
const numbers = result.split('/').map((item) => parseInt(item)); // 分割字符串并转换为数字数组
|
||
weekJson.total = numbers[1] // 设置总数
|
||
weekJson.count = numbers[0] // 设置当前计数
|
||
log.debug(`Json:{weekJson}`, weekJson) // 记录最终JSON结果
|
||
return weekJson // 返回处理后的周计数JSON对象
|
||
}
|
||
|
||
/**
|
||
* 获取当前日期的星期信息
|
||
* @returns {Object} 返回包含星期数字和星期名称的对象
|
||
*/
|
||
async function getDayOfWeek() {
|
||
// 获取当前日期对象
|
||
const today = new Date();
|
||
// 获取当前日期是星期几(0代表星期日,1代表星期一,以此类推)
|
||
const day = today.getDay();
|
||
// 创建包含星期名称的数组
|
||
const weekDays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
|
||
let weekDay = `${weekDays[day]}`;
|
||
|
||
log.debug(`今天是[{day}]`, day)
|
||
log.debug(`今天是[{weekDays}]`, weekDay)
|
||
// 返回包含星期数字和对应星期名称的对象
|
||
return {
|
||
day: day,
|
||
dayOfWeek: weekDay
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 执行秘境征讨剩余次数提醒的主函数
|
||
* 该函数会在每周日执行,检查秘境征讨的剩余次数并发送提醒
|
||
*/
|
||
async function campaignAreaMain() {
|
||
// 获取当前星期信息
|
||
let dayOfWeek = await getDayOfWeek();
|
||
// 如果不是周日(0代表周日),则直接返回
|
||
const bool = dayOfWeek.day != config.campaignAreaReminderDay;
|
||
// 记录开始执行秘境征讨提醒的日志
|
||
log.info(`[{dayOfWeek.dayOfWeek}],${bool?"跳过":"开始"}执行秘境征讨剩余次数提醒`, dayOfWeek.dayOfWeek)
|
||
if (bool) {
|
||
return
|
||
}
|
||
// 设置操作间隔时间(毫秒)
|
||
let ms = 600
|
||
// 等待一段时间
|
||
await sleep(ms)
|
||
// 按下配置的热键
|
||
await keyPress(config.campaignAreaKey)
|
||
await sleep(ms * 2)
|
||
// 点击秘境入口坐标
|
||
await click(xyConfig.secretRealm.x, xyConfig.secretRealm.y)
|
||
await sleep(ms * 2)
|
||
// 点击秘境征讨坐标
|
||
await click(xyConfig.campaignArea.x, xyConfig.campaignArea.y)
|
||
await sleep(ms * 2)
|
||
// 使用OCR识别本周秘境征讨剩余次数
|
||
let weekJson = await ocrWeeklyCount();
|
||
|
||
// 如果有剩余次数,则记录日志并发送通知
|
||
if (weekJson.count > 0) {
|
||
log.info(`本周剩余消耗减半次数:${weekJson.count}`)
|
||
await noticeUtil.send(`>|本周剩余消耗减半次数:${weekJson.count}`, '秘境征讨')
|
||
}
|
||
|
||
}
|
||
|
||
this.campaignAreaUtil = {
|
||
campaignAreaMain,
|
||
} |