Files
bettergi-scripts-list/repo/js/ActivitySwitchNotice/utils/campaignArea.js
云端客 cac08d4f15 [活动期限/周本通知器] 迭代 0.0.2 版本 (#2552)
* feat(ActivitySwitchNotice): 添加异步通知发送功能

- 新增异步发送通知函数 send,支持标题和内容拼接
- 添加通知发送前的日志记录和条件判断
- 导出新的 send 函数供外部调用
- 保留原有 sendNotice 函数兼容性

* feat(activity): 新增征讨领域次数识别与通知功能

- 实现征讨领域 OCR 识别逻辑,用于获取每周剩余次数
- 添加秘境与征讨领域的点击坐标配置
- 集成通知工具,发送剩余次数提醒
- 支持自动按键进入活动界面并执行点击操作
- 增加星期判断逻辑,跳过周日执行
- 提供字符串与整数解析工具函数,增强配置容错性

* fix(campaignArea): 修复周日不执行秘境征讨提醒的问题

- 将判断条件从等于0修改为不等于0,确保周日可以执行提醒逻辑
- 添加日志记录,便于追踪执行情况和调试
- 保留原有的延迟和按键操作逻辑

* feat(activity): 添加活动切换通知功能

- 引入 campaignArea.js 工具模块
- 在主流程中调用 toMainUi 函数
- 执行活动区域主逻辑处理
- 整合活动切换与通知机制
- 增强主界面判断逻辑
- 优化异步流程控制

* feat(activity): 实现秘境征讨剩余次数提醒功能

- 添加了每周日自动检查秘境征讨剩余次数的功能
- 实现了通过OCR识别剩余次数的逻辑
- 集成了日志记录和通知发送机制
- 添加了完整的操作延迟和点击坐标配置
- 实现了热键触发和界面点击的自动化流程
- 增加了详细的函数注释和执行日志

* feat(campaignArea): 更新征讨领域坐标并优化OCR识别逻辑

- 调整征讨领域点击坐标为{x: 493, y: 537}
- 新增ocrWeeklyCount函数用于OCR识别周计数信息
- 增强OCR识别后的文本处理与日志记录
- 修复周日判断逻辑,确保仅在周日执行特定操作
- 调整主流程顺序,先执行征讨领域再返回主界面

* refactor(campaignArea): 优化星期名称获取逻辑

- 提取星期名称到独立变量以提高可读性
- 更新日志记录以使用新的变量名
- 确保返回对象中的星期名称正确引用新变量

* feat(ActivitySwitchNotice): 新增征讨领域每周提醒功能

- 在 README 中新增“每周日自动提醒征讨领域剩余次数”特性说明
- 更新 settings.json 配置项表格,增加 toTopCount、scrollPageCount 和 campaignAreaKey 参数
- 新增 campaignArea.js 模块,实现 OCR 识别与周日提醒逻辑
- 调整目录结构说明,加入 campaignArea.js 文件介绍
- 修改工作原理部分,补充征讨领域提醒的执行流程
- 统一 README 中代码引用格式为反引号包裹

* docs(ActivitySwitchNotice): 更新 README 版本历史记录

- 新增 0.0.2 版本的征讨领域周次数提醒功能
- 新增 campaignArea.js 模块及相关配置选项
- 改进 滚动到顶部功能的稳定性并新增相关配置
- 新增 0.1 版本的活动检测、OCR识别及通知功能
- 新增 多种智能解析与防重复检测机制
- 新增 异常处理和错误恢复机制

* fix(ActivitySwitchNotice): 调整日志级别与周日判断逻辑

- 将 info 级别日志调整为 debug 级别
- 修正周日判断条件,确保仅周日执行提醒
- 增强周日判断日志描述
- 更新剩余次数提示文案,明确显示“本周剩余消耗减半次数”
- 在通知消息前添加 Markdown 格式符号 `>` 以突出显示

* refactor(campaignArea): 将日志级别从 info 调整为 debug

- 修改日志记录方式,将 info 级别调整为 debug
- 减少生产环境中的日志噪音
- 提高调试信息的可读性与准确性

* feat(ActivitySwitchNotice): 新增征讨领域模块和配置选项

- 新增 campaignArea.js 模块,包含征讨领域相关功能
- 新增 campaignAreaKey 配置选项,用于自定义征讨领域页面快捷键
- 改进增强滚动到顶部功能的稳定性
- 新增 toTopCount 和 scrollPageCount 配置选项,提供更多滚动控制参数
- 新增活动期限检测与通知功能
- 新增 OCR 识别活动列表和剩余时间功能

* docs: 更新活动通知器功能说明

* feat(ActivitySwitchNotice): 支持征讨领域周次数提醒功能

- 更新插件名称以明确支持活动期限与周本提醒
- 提升版本号至 0.0.2
- 新增 campaignAreaKey 配置项用于自定义征讨领域页面快捷键
- 在 README 中更新 campaignAreaKey 的使用状态为启用
- 更新版本历史记录日期及新增功能说明
- 新增 campaignArea.js 模块实现相关功能逻辑

* feat(ActivitySwitchNotice): 支持自定义征讨领域提醒日

- 新增配置项 campaignAreaReminderDay,用于设置提醒日期
- 修改判断逻辑,使用配置的提醒日替代固定周日判断
- 添加相关注释说明配置用途

* feat(settings): 添加周本提醒日设置选项

- 在设置中新增周本提醒日选择器
- 支持设置提醒日为周日至周六任意一天
- 默认值设为周日
- 保留原有冒险之证按键设置功能

* docs: 更新文档,新增征讨领域提醒日配置选项说明

* fix: 修改周本提醒日配置值为字符串格式

* feat(activity): 添加活动描述字段支持

- 在活动映射中新增 desc 字段,默认值为 null
- 更新通知文本生成逻辑,支持显示活动描述信息
- 优化剩余时间文本格式,增强可读性
- 保持现有功能兼容性,不影响无描述场景显示

* feat(activity): 增加活动时间转换和OCR功能

- 添加日期枚举类型DATE_ENUM及反向映射方法
- 新增活动周期转换映射表activityTermConversionMap
- 新增特定活动OCR内容映射表needOcrOtherMap
- 实现根据活动名称获取日期枚举值的函数getDATE_ENUM
- 添加将总小时数转换为周/天/小时格式的函数convertHoursToWeeksDaysHours
- 在活动时间处理中增加对不同时间单位的支持
- 增加对特定活动额外OCR识别内容的支持
- 修复数组遍历时的缩进问题

* feat(activity): 更新活动时间显示逻辑

- 修改"砺行修远"活动的时间枚举为周
- 调整剩余时间文本的显示格式
- 优化通知文本的排版和分隔符
- 增强日期枚举获取函数的返回值结构
- 添加调试日志用于追踪活动时间和枚举值
- 改进OCR识别时间的显示方式

* feat(ActivitySwitchNotice): 添加黑名单活动名称过滤功能

- 在配置中新增 blackActivityNameList 字段,支持通过 | 分割多个活动名称
- 实现活动黑名单过滤逻辑,排除黑名单中的活动名称
- 更新设置界面,增加黑名单活动名称输入框
- 完善活动筛选流程,优先过滤黑名单活动再判断剩余时间阈值

* feat(ActivitySwitchNotice): 新增活动黑名单过滤功能

- 在 settings.json 中新增 blackActivityNameList 配置项
- 支持通过黑名单排除不关心的活动提醒
- 更新文档说明,添加黑名单使用示例
- 增强活动过滤逻辑,提高匹配准确性
- 在核心扫描流程中集成黑名单过滤机制
- 优化通知显示格式,增加活动描述信息
- 修复若干已知问题,提升脚本稳定性

* fix(activity): 修复活动过滤逻辑

- 修改黑名单活动名称过滤方式,从完全匹配改为包含匹配
- 确保活动名称中包含黑名单关键词时能被正确过滤
- 保持小时数阈值过滤逻辑不变
- 维持扫描完成后统一发送通知的机制

* fix(activity): 修复活动黑名单过滤逻辑及通知文本

- 修正黑名单关键词过滤条件判断
- 优化通知消息文本格式,增加黑名单提示信息

* feat(activity): 支持多个OCR识别键值

- 修改needOcrOtherMap结构以支持数组形式的键值
- 更新OCR识别逻辑以遍历多个键值并拼接结果
- 为"砺行修远"活动添加"完成进度"作为新的OCR识别目标

* fix(activity): 修复OCR时间和活动过滤逻辑

- 修复OCR剩余时间函数调用参数错误,从keys改为key
- 优化活动黑名单过滤逻辑,提高过滤准确性
- 增强活动名称关键字匹配的判断条件
- 修复过滤器提前返回导致的逻辑中断问题

* fix(ActivitySwitchNotice): 优化活动黑名单过滤和日期枚举匹配逻辑

- 黑名单活动名称过滤时增加去除空字符串逻辑
- 日期枚举匹配改为模糊包含匹配,提升识别准确率
- 修复黑名单提示条件判断错误导致的消息格式问题

* docs: 更新活动模块文档,添加配置项说明

* feat(activity): 添加黑名单活动名称过滤功能

- 在活动点击前增加黑名单关键词匹配逻辑
- 跳过匹配黑名单的活动,避免无效点击
- 移除原有冗余的活动过滤逻辑
- 优化活动重复点击判断流程

* style(docs): 格式化 README.md 中的表格样式

- 调整表格列对齐方式,使用冒号对齐格式
- 统一表格分隔符的格式和间距
- 修复表格列宽和对齐问题
- 优化表格的视觉呈现效果
2025-12-23 18:23:58 +08:00

121 lines
4.6 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.
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代表周日),则直接返回
if (dayOfWeek.day != config.campaignAreaReminderDay) {
log.info(`[{dayOfWeek.dayOfWeek}],跳过执行秘境征讨剩余次数提醒`, dayOfWeek.dayOfWeek)
return
}
// 记录开始执行秘境征讨提醒的日志
log.info(`[{dayOfWeek.dayOfWeek}],开始执行秘境征讨剩余次数提醒`, dayOfWeek.dayOfWeek)
// 设置操作间隔时间(毫秒)
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,
}