Files
bettergi-scripts-list/repo/js/ActivitySwitchNotice
云端客 32b950d6a9 [0.0.3版本迭代]--活动期限/周本通知器 (#2591)
* 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数组中
- 确保只有有效的文本内容才会被添加到数组中
2025-12-30 18:57:38 +08:00
..
2025-12-21 16:22:52 +08:00

活动期限/周本通知器

项目概述

这是一个用于《原神》游戏的自动化脚本工具,主要功能是自动检测游戏内活动的剩余时间,并在活动即将结束时/每周指定日期自动提醒征讨领域减半剩余次数发送通知提醒玩家。

功能特性

  • 自动返回游戏主界面并打开活动页面
  • OCR识别活动列表和剩余时间
  • 自动滚动浏览所有活动页面
  • 智能解析剩余时间(支持"22天14小时"等格式)
  • 可配置的通知阈值默认8760小时内结束的活动
  • 支持指定特定活动进行监控
  • 支持活动黑名单过滤功能
  • 防重复检测机制
  • 异常处理和错误恢复
  • 自动提醒征讨领域减半剩余次数(默认周日提醒可配置)

用户使用指南

快速开始

1. 安装与配置

  • 确保游戏分辨率为 1920×1080(推荐分辨率)
  • 将脚本导入到 BetterGI 脚本管理器中
  • 在脚本设置界面进行个性化配置

2. 基础设置

settings.json 中可以配置以下参数:

设置项 说明 默认值 开放
toMainUi 执行前是否自动返回游戏主界面 true v
relationship 剩余时间与白名单启用关系(默认关系) false v
whiteActivityNameList 白名单活动名称(用|分隔) 空(监控所有活动) v
blackActivityNameList 黑名单活动名称(用|分隔) 空(无黑名单活动) v
notifyHoursThreshold 通知时间阈值(小时) 8760365天 v
activityKey 打开活动页面的快捷键 F5 v
toTopCount 滑动到顶最大尝试次数 10 x
scrollPageCount 滑动次数/页 4 x
campaignAreaKey 打开征讨领域页面的快捷键 F1 v
campaignAreaReminderDay 周本提醒日(0-6,0=周日,1=周一,2=周二,3=周三,4=周四,5=周五,6=周六) 0 v

使用流程

自动模式(推荐)

  1. 启动脚本后,程序会自动:
    • 检测当前是否在游戏主界面
    • 如未在主界面,自动返回主界面
    • 按设定的快捷键打开活动页面
    • 开始扫描所有活动

手动模式

  1. 关闭 toMainUi 选项
  2. 确保游戏处于主界面状态
  3. 启动脚本开始扫描

功能详解

活动筛选

  • 全部活动监控whiteActivityNameList 保持空值,监控所有有剩余时间的活动
  • 指定活动监控:填写活动关键词,如 海灯节\|盛典,只监控包含这些关键词的活动
  • 黑名单过滤blackActivityNameList 可以设置不想接收提醒的活动名称,多个活动用|分隔

时间通知机制

  • 默认监控所有活动(notifyHoursThreshold=8760小时
  • 可设置阈值如设置为24则只通知剩余时间≤24小时的活动
  • 即将结束(24小时内)的活动会在通知中标记 <即将结束>

逻辑关系配置

  • relationshipfalse(默认):满足"剩余时间阈值"或"白名单活动"任一条件即发送通知
  • relationshiptrue:必须同时满足"剩余时间阈值"和"白名单活动"两个条件才发送通知

智能防重复

  • 自动识别已扫描过的活动页面
  • 防止因页面滚动不准确造成的重复识别
  • 自动判断是否已滚动到页面底部

注意事项

使用环境要求

  • 游戏分辨率为 1920×1080最佳兼容性
  • 游戏处于前台运行状态
  • 活动页面可通过设置的快捷键正常打开

运行期间注意事项

  • 🚫 运行期间请勿手动操作鼠标
  • 🚫 避免切换窗口或最小化游戏
  • ⚠️ 如遇异常可重新启动脚本

高级配置

自定义快捷键

如活动页面不是F5打开可在 activityKey 中修改为对应按键。 如冒险之书页面不是F1打开可在 campaignAreaKey 中修改为对应按键。

时间阈值设置

根据个人需求设置 notifyHoursThreshold

  • 24只关注24小时内结束的活动
  • 168关注一周内结束的活动
  • 720关注一个月内结束的活动

输出示例

通知消息格式如下:

原神活动剩余时间提醒:
> 海灯节庆典 剩余时间3天14小时<还剩 86 小时>
> 风花节活动 剩余时间1天5小时<还剩 29 小时><即将结束>

以上为用户使用指南全部内容

文件结构

ActivitySwitchNotice/
├── utils/
│   ├── activity.js     # 核心活动处理逻辑
│   ├── campaignArea.js # 征讨领域提醒功能
│   └── notice.js       # 通知发送功能
├── main.js             # 主入口文件
├── manifest.json       # 插件配置文件
├── settings.json       # 用户设置界面定义
└── README.md           # 说明文档

核心模块

activity.js - 活动处理核心

主要包含以下功能函数:

  • scrollPage() - 页面滚动基础函数
  • scrollPagesByActivity() - 按页滚动活动列表
  • scrollPagesByActivityToTop() - 滚动到活动列表顶部
  • parseRemainingTimeToHours() - 解析剩余时间文本为小时数
  • OcrRemainingTime() - OCR识别剩余时间
  • activityMain() - 主流程控制函数

notice.js - 通知模块

  • sendNotice() - 发送活动提醒通知,按剩余时间排序
  • send() - 发送普通通知

campaignArea.js - 征讨领域模块

  • ocrWeeklyCount() - OCR识别征讨领域周次数
  • getDayOfWeek() - 获取当前星期信息
  • campaignAreaMain() - 征讨领域提醒主函数

配置选项

settings.json 中可配置以下参数:

配置项 类型 说明
toMainUi Boolean 是否先返回主界面再执行
relationship Boolean 剩余时间与白名单启用关系(默认关系)
whiteActivityNameList String 白名单活动名称(用|分隔)
blackActivityNameList String 黑名单活动名称(用|分隔)
notifyHoursThreshold Number 通知阈值(小时)
activityKey String 打开活动页面的快捷键
toTopCount Number 滑动到顶最大尝试次数
scrollPageCount Number 滑动次数/页
campaignAreaKey String 打开冒险之书页面的快捷键
campaignAreaReminderDay Number 周本提醒日(0-6,0=周日,1=周一,2=周二,3=周三,4=周四,5=周五,6=周六)

工作原理

  1. 自动返回游戏主界面
  2. 检查是否为设置的提醒日(默认周日),如果是则执行征讨领域提醒功能
  3. 按配置快捷键打开活动页面
  4. 滚动到活动列表顶部
  5. 逐页扫描所有活动
  6. OCR识别每个活动的剩余时间
  7. 解析时间为小时数并过滤(包括黑名单过滤)
  8. 发送符合条件的活动提醒

注意事项

  • 请确保游戏分辨率为1920×1080以获得最佳效果
  • 脚本运行期间请勿操作鼠标
  • 某些特殊活动可能无法正确识别剩余时间
  • 建议在游戏空闲时运行此脚本

版本历史

0.0.3 (2025-12-29)

  • 修复 修复了活动过滤逻辑问题,将activityNameList更改为whiteActivityNameList以保持一致
  • 新增 黑名单与白名单的互斥过滤机制,黑名单中剔除白名单
  • 新增 在配置中增加了relationship参数,用于控制剩余时间与白名单活动的逻辑关系
  • 新增 支持剩余时间和白名单的"与"关系和"或"关系配置
  • 新增 标记界面显示 已完成 的活动

0.0.2 (2025-12-22)

  • 新增 征讨领域周次数提醒功能
  • 新增 campaignArea.js 模块,包含征讨领域相关功能
  • 新增 campaignAreaKey 配置选项,用于自定义冒险之书页面快捷键
  • 新增 campaignAreaReminderDay 配置选项,用于配置提醒日
  • 改进 增强滚动到顶部功能的稳定性
  • 新增 活动黑名单过滤功能,支持通过 blackActivityNameList 配置项排除不关心的活动
  • 新增 特殊活动时间格式支持,针对"砺行修远"等活动提供周数显示
  • 新增 额外OCR识别支持可识别特定活动的附加信息如"本周进度"
  • 改进 活动过滤逻辑,增强黑名单匹配准确性
  • 改进 通知显示格式,增加活动描述信息展示
  • 修复 若干已知问题,提升脚本稳定性

0.0.1 (2025-12-21)

  • 新增 活动期限检测与通知功能
  • 新增 OCR识别活动列表和剩余时间
  • 新增 自动滚动浏览所有活动页面
  • 新增 智能解析剩余时间(支持"22天14小时"等格式)
  • 新增 可配置的通知阈值功能
  • 新增 指定特定活动监控功能
  • 新增 防重复检测机制
  • 新增 异常处理和错误恢复机制

其它

作者:云端客 脚本反馈邮箱:doutianmianxia@qq.com