mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-04-03 06:35:14 +08:00
* 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 通知功能描述 - 维护版本历史记录的准确性
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.sendText(`>|本周剩余消耗减半次数:${weekJson.count}`, '秘境征讨')
|
||
}
|
||
|
||
}
|
||
|
||
this.campaignAreaUtil = {
|
||
campaignAreaMain,
|
||
} |