Files
bettergi-scripts-list/repo/js/ActivitySwitchNotice
云端客 a3de5b65d6 [0.0.4迭代]活动期限/周本通知器 (#2604)
* feat(notice): 添加WebSocket独立通知功能并重构通知系统

- 实现WebSocket通知功能,支持私聊和群聊模式
- 添加通知类型配置选项,支持BGI通知、独立通知或两者同时使用
- 新增WebSocket相关配置项包括代理URL、连接地址和认证令牌
- 重构通知发送逻辑,支持多种通知类型的消息格式
- 添加@用户功能和多种消息类型支持
- 更新manifest.json添加网络请求权限配置
- 优化代码结构,使用异步初始化加载工具模块

* feat(ActivitySwitchNotice): 添加独立通知功能支持WebSocket推送

- 新增独立通知配置功能,支持通过WebSocket发送通知
- 新增ws.js模块实现WebSocket通知功能
- 新增noticeType配置选项用于选择通知模式
- 新增ws_proxy_url、ws_url、ws_token配置选项
- 新增action、send_id、at_list配置选项用于发送设置
- 更新README文档添加独立通知配置说明和使用要求
- 修复OCR识别函数名称从OcrRemainingTime改为OcrKey

* fix(ActivitySwitchNotice): 修复设置选项数组格式

- 修复了通知模式选项数组中缺少逗号的问题
- 确保JSON格式正确性以避免解析错误

* refactor(notice): 重构通知工具类并修复配置引用问题

- 将 noticeUtil.send 方法重命名为 sendText 以明确功能
- 修复配置对象引用问题,将 config 重命名为 configNotice 避免冲突
- 为 sendNotice 函数添加默认参数和调试日志
- 更新条件判断逻辑,使用 map.size 检查空值
- 修复 ws 模块中的配置对象引用,将 config 重命名为 configWs
- 重构 ws 模块初始化逻辑,确保配置正确加载
- 修复变量命名冲突,将 token 参数重命名为 wsToken
- 更新模块初始化顺序,调整 activity 工具的加载位置

* docs(ActivitySwitchNotice): 更新文档说明独立通知配置和WsProxy部署

- 更新独立通知功能说明,添加WsProxy依赖提示
- 简化settings.json文件路径引用
- 移除多余的配置示例分隔符
- 添加WsProxy部署指南和Docker镜像使用说明
- 整理文档结构,优化内容排版

* docs(ActivitySwitchNotice): 更新 README 文档完善功能说明和配置选项

- 添加了独立通知功能的详细配置说明
- 更新了设置表格格式和内容描述
- 增加了 WsProxy 部署指南和 Docker 配置示例
- 完善了核心模块和配置选项文档
- 修正了文档格式和链接引用问题

* docs(ActivitySwitchNotice): 更新 README 文档中的链接和函数名

- 修复 settings.json 链接格式
- 将 send 函数名更正为 sendText

* chore(ActivitySwitchNotice): 更新版本号

- 将版本号从 0.0.3 更新到 0.4
- 保持其他配置项不变

* docs(ActivitySwitchNotice): 更新版本历史文档

- 将版本 0.0.4 的发布状态更新为具体发布日期 2026-01-01
- 保持独立通知配置功能说明
- 保留 WebSocket 通知功能描述
- 维护版本历史记录的准确性
2026-01-01 20:20:44 +08:00
..
2025-12-21 16:22:52 +08:00

活动期限/周本通知器

项目概述

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


功能特性

  • 自动返回游戏主界面并打开活动页面
  • OCR识别活动列表和剩余时间
  • 自动滚动浏览所有活动页面
  • 智能解析剩余时间(支持"22天14小时"等格式)
  • 可配置的通知阈值默认8760小时内结束的活动
  • 支持指定特定活动进行监控
  • 支持活动黑名单过滤功能
  • 防重复检测机制
  • 异常处理和错误恢复
  • 自动提醒征讨领域减半剩余次数(默认周日提醒可配置)
  • 支持独立通知功能(0.0.4版本新增 因BGI不支持WebSocket,需搭配WsProxy+开启JS HTTP 权限使用)前往WsProxy部署

用户使用指南

快速开始

1. 安装与配置

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

2. 基础设置

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

设置项 说明 默认值 开放
toMainUi 执行前是否自动返回游戏主界面 true v
noticeType 通知模式默认BGI通知-使用独立通知需要开启JS HTTP权限 BGI通知 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
ws_proxy_url WebSocket代理URL独立通知配置 http://127.0.0.1:8081/ws-proxy/message/send v
ws_url WebSocket客户端 URL独立通知配置 ws://127.0.0.1:8080/ v
ws_token WebSocket客户端 token独立通知配置 v
action 发送类型(私聊/群聊) (独立通知配置) 私聊 v
send_id 发送ID群号或QQ号对应发送类型 (独立通知配置) v
at_list @某人列表使用,隔开QQ号 (独立通知配置) v

使用流程

自动模式(推荐)

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

手动模式

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

功能详解

活动筛选

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

时间通知机制

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

逻辑关系配置

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

智能防重复

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

独立通知配置0.0.4版本新增)

配置项说明

  • noticeType:

    • BGI通知: 使用 BetterGI 内置通知
    • 独立通知: 通过 WebSocket 发送通知
    • 独立通知和BGI通知: 同时使用两种方式
  • WebSocket 配置:

    • ws_proxy_url: WebSocket 代理 URL默认为 http://127.0.0.1:8081/ws-proxy/message/send
    • ws_url: WebSocket 客户端 URL默认为 ws://127.0.0.1:8080/
    • ws_token: WebSocket 客户端认证令牌(可选)
  • 发送配置:

    • action: 发送类型,可选 私聊群聊
    • send_id: 根据 action 类型填写群号或 QQ 号
    • at_list: @ 某人列表,使用逗号分隔多个 QQ 号

使用要求

  1. 开启权限: 需要开启 JS HTTP 权限才能使用独立通知功能
  2. 配置服务: 需要搭建相应的 WebSocket 服务和代理服务器
  3. 网络连接: 确保能够连接到配置的 WebSocket 服务器

配置示例

{
  "noticeType": "独立通知",
  "ws_proxy_url": "http://127.0.0.1:8081/ws-proxy/message/send",
  "ws_url": "ws://127.0.0.1:8080/",
  "action": "群聊",
  "send_id": "123456789",
  "at_list": "987654321,111222333"
}

部署 WsProxy

提供docker镜像方便用户快速搭建WebSocket代理服务

docker pull ghcr.io/kirito520asuna/wsproxy:latest
docker run -d -p 8081:8081 -v /path/to/application-prod.yml:/app/application-prod.yml --name wsproxy ghcr.io/kirito520asuna/wsproxy:latest

注意事项

使用环境要求

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

运行期间注意事项

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

高级配置

自定义快捷键

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

时间阈值设置

根据个人需求设置 notifyHoursThreshold

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

独立通知配置

如果需要使用独立通知功能如发送到QQ群聊需要

  1. 开启JS HTTP权限
  2. 配置WebSocket相关参数
  3. 设置发送类型和ID

输出示例

通知消息格式如下:

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

文件结构

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

核心模块

activity.js - 活动处理核心

主要包含以下功能函数:

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

notice.js - 通知模块

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

campaignArea.js - 征讨领域模块

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

ws.js - WebSocket通知模块

  • send() - 发送WebSocket消息
  • sendText() - 发送文本消息

配置选项

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

配置项 类型 说明
toMainUi Boolean 是否先返回主界面再执行
noticeType String 通知模式BGI通知/独立通知/两者都发送)
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=周六)
ws_proxy_url String WebSocket代理URL独立通知配置
ws_url String WebSocket客户端 URL独立通知配置
ws_token String WebSocket客户端 token独立通知配置
action String 发送类型(私聊/群聊)(独立通知配置)
send_id String 发送ID群号或QQ号对应发送类型 (独立通知配置)
at_list String @某人列表使用,隔开QQ号 (独立通知配置)

工作原理

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

注意事项

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

版本历史

0.0.4 (2026-01-01)

  • 新增 独立通知配置功能,支持通过 WebSocket 发送通知
  • 新增 ws.js 模块,实现 WebSocket 通知功能
  • 新增 noticeType 配置选项,用于选择通知模式
  • 新增 ws_proxy_urlws_urlws_token 配置选项
  • 新增 actionsend_idat_list 配置选项用于发送设置

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