From 262f229bf9a127daa0f58ccdfb01eed8d3636cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BA=81=E5=8A=A8=E7=9A=84=E6=B0=A8=E6=B0=94?= <131591012+zaodonganqi@users.noreply.github.com> Date: Tue, 12 Aug 2025 11:37:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=91=E6=8D=A2=E7=A0=81?= =?UTF-8?q?=E5=BD=92=E6=A1=A3=20(#1563)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {repo => archive}/js/AutoCode/README.md | 4 +- .../js/AutoCode/assets/account.png | Bin .../js/AutoCode/assets/clear.png | Bin .../js/AutoCode/assets/confirm.png | Bin .../js/AutoCode/assets/expired.png | Bin .../js/AutoCode/assets/go_to_redeem.png | Bin .../js/AutoCode/assets/input_code.png | Bin .../js/AutoCode/assets/invalid.png | Bin .../js/AutoCode/assets/not_open.png | Bin .../js/AutoCode/assets/redeem.png | Bin .../js/AutoCode/assets/settings.png | Bin {repo => archive}/js/AutoCode/assets/used.png | Bin {repo => archive}/js/AutoCode/codes.txt | 6 +- {repo => archive}/js/AutoCode/main.js | 232 +++++++++--------- {repo => archive}/js/AutoCode/manifest.json | 0 15 files changed, 121 insertions(+), 121 deletions(-) rename {repo => archive}/js/AutoCode/README.md (97%) rename {repo => archive}/js/AutoCode/assets/account.png (100%) rename {repo => archive}/js/AutoCode/assets/clear.png (100%) rename {repo => archive}/js/AutoCode/assets/confirm.png (100%) rename {repo => archive}/js/AutoCode/assets/expired.png (100%) rename {repo => archive}/js/AutoCode/assets/go_to_redeem.png (100%) rename {repo => archive}/js/AutoCode/assets/input_code.png (100%) rename {repo => archive}/js/AutoCode/assets/invalid.png (100%) rename {repo => archive}/js/AutoCode/assets/not_open.png (100%) rename {repo => archive}/js/AutoCode/assets/redeem.png (100%) rename {repo => archive}/js/AutoCode/assets/settings.png (100%) rename {repo => archive}/js/AutoCode/assets/used.png (100%) rename {repo => archive}/js/AutoCode/codes.txt (96%) rename {repo => archive}/js/AutoCode/main.js (97%) rename {repo => archive}/js/AutoCode/manifest.json (100%) diff --git a/repo/js/AutoCode/README.md b/archive/js/AutoCode/README.md similarity index 97% rename from repo/js/AutoCode/README.md rename to archive/js/AutoCode/README.md index 97627796..8167a530 100644 --- a/repo/js/AutoCode/README.md +++ b/archive/js/AutoCode/README.md @@ -1,3 +1,3 @@ -兑换码+截止时间存储地址codes.txt -格式 兑换码,xxxx.xx.xx xx:xx:xx +兑换码+截止时间存储地址codes.txt +格式 兑换码,xxxx.xx.xx xx:xx:xx 仅支持国服 \ No newline at end of file diff --git a/repo/js/AutoCode/assets/account.png b/archive/js/AutoCode/assets/account.png similarity index 100% rename from repo/js/AutoCode/assets/account.png rename to archive/js/AutoCode/assets/account.png diff --git a/repo/js/AutoCode/assets/clear.png b/archive/js/AutoCode/assets/clear.png similarity index 100% rename from repo/js/AutoCode/assets/clear.png rename to archive/js/AutoCode/assets/clear.png diff --git a/repo/js/AutoCode/assets/confirm.png b/archive/js/AutoCode/assets/confirm.png similarity index 100% rename from repo/js/AutoCode/assets/confirm.png rename to archive/js/AutoCode/assets/confirm.png diff --git a/repo/js/AutoCode/assets/expired.png b/archive/js/AutoCode/assets/expired.png similarity index 100% rename from repo/js/AutoCode/assets/expired.png rename to archive/js/AutoCode/assets/expired.png diff --git a/repo/js/AutoCode/assets/go_to_redeem.png b/archive/js/AutoCode/assets/go_to_redeem.png similarity index 100% rename from repo/js/AutoCode/assets/go_to_redeem.png rename to archive/js/AutoCode/assets/go_to_redeem.png diff --git a/repo/js/AutoCode/assets/input_code.png b/archive/js/AutoCode/assets/input_code.png similarity index 100% rename from repo/js/AutoCode/assets/input_code.png rename to archive/js/AutoCode/assets/input_code.png diff --git a/repo/js/AutoCode/assets/invalid.png b/archive/js/AutoCode/assets/invalid.png similarity index 100% rename from repo/js/AutoCode/assets/invalid.png rename to archive/js/AutoCode/assets/invalid.png diff --git a/repo/js/AutoCode/assets/not_open.png b/archive/js/AutoCode/assets/not_open.png similarity index 100% rename from repo/js/AutoCode/assets/not_open.png rename to archive/js/AutoCode/assets/not_open.png diff --git a/repo/js/AutoCode/assets/redeem.png b/archive/js/AutoCode/assets/redeem.png similarity index 100% rename from repo/js/AutoCode/assets/redeem.png rename to archive/js/AutoCode/assets/redeem.png diff --git a/repo/js/AutoCode/assets/settings.png b/archive/js/AutoCode/assets/settings.png similarity index 100% rename from repo/js/AutoCode/assets/settings.png rename to archive/js/AutoCode/assets/settings.png diff --git a/repo/js/AutoCode/assets/used.png b/archive/js/AutoCode/assets/used.png similarity index 100% rename from repo/js/AutoCode/assets/used.png rename to archive/js/AutoCode/assets/used.png diff --git a/repo/js/AutoCode/codes.txt b/archive/js/AutoCode/codes.txt similarity index 96% rename from repo/js/AutoCode/codes.txt rename to archive/js/AutoCode/codes.txt index 0e7dc4c5..998b2430 100644 --- a/repo/js/AutoCode/codes.txt +++ b/archive/js/AutoCode/codes.txt @@ -1,3 +1,3 @@ -KG3SZF8EZGQN,2025.7.21 12:00:00 -DZ2TZX9WHXSS,2025.7.21 12:00:00 -ZGKBHW9FGXSW,2025.7.21 12:00:00 +KG3SZF8EZGQN,2025.7.21 12:00:00 +DZ2TZX9WHXSS,2025.7.21 12:00:00 +ZGKBHW9FGXSW,2025.7.21 12:00:00 diff --git a/repo/js/AutoCode/main.js b/archive/js/AutoCode/main.js similarity index 97% rename from repo/js/AutoCode/main.js rename to archive/js/AutoCode/main.js index 43a32dd9..3cc645ef 100644 --- a/repo/js/AutoCode/main.js +++ b/archive/js/AutoCode/main.js @@ -1,117 +1,117 @@ -(async function () { - setGameMetrics(1920, 1080, 1); - // 1. 返回主界面,等待1秒 - await genshin.returnMainUi(); - await sleep(1000); - - // 2. 通过keyPress点按esc键(VK_ESCAPE),等待2秒。ocr识别设置图片并点击,等待2秒。识别账户图片并点击,等待0.5秒,识别前往兑换图片并点击,等待0.5秒 - keyPress("ESCAPE"); - await sleep(2000); - - const settingsRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/settings.png")); - const settingsRes = captureGameRegion().find(settingsRo); - if (settingsRes.isExist()) { - settingsRes.click(); - } - await sleep(2000); - - const accountRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/account.png")); - const accountRes = captureGameRegion().find(accountRo); - if (accountRes.isExist()) { - accountRes.click(); - } - await sleep(500); - - const goToRedeemRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/go_to_redeem.png")); - const goToRedeemRes = captureGameRegion().find(goToRedeemRo); - if (goToRedeemRes.isExist()) { - goToRedeemRes.click(); - } - await sleep(500); - - // 3. 新建一个txt用于存储兑换码及截止时间,之间换行区分,格式为【兑换码,截止时间】 - try { - const content = file.readTextSync("codes.txt"); - const codes = content.split('\n'); - - for (let i = 0; i < codes.length; i++) { - const codeInfo = codes[i].split(','); - const code = codeInfo[0]; - const deadline = codeInfo[1]; - - // a. 获取当前时间【xxxx.xx.xx xx:xx:xx】(年月日时分秒),与截止时间进行对比 - const now = new Date(); - const currentTime = now.getFullYear() + '.' + String(now.getMonth() + 1).padStart(2, '0') + '.' + String(now.getDate()).padStart(2, '0') + ' ' + String(now.getHours()).padStart(2, '0') + ':' + String(now.getMinutes()).padStart(2, '0') + ':' + String(now.getSeconds()).padStart(2, '0'); - - if (currentTime > deadline) { - log.info(`兑换码【${code}】已超过截止时间,跳过`); - continue; - } - - // b. 识别输入兑换码图片并点击 - const inputCodeRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/input_code.png")); - const inputCodeRes = captureGameRegion().find(inputCodeRo); - if (inputCodeRes.isExist()) { - inputCodeRes.click(); - } - await sleep(300); - - // c. 通过虚拟键代码依次keyPress键入兑换码的每一个字符 - await inputText(code); - await sleep(500); - - // d. 输入完毕后,识别兑换图片并点击,等待1.5秒 - const redeemRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/redeem.png")); - const redeemRes = captureGameRegion().find(redeemRo); - if (redeemRes.isExist()) { - redeemRes.click(); - } - await sleep(1500); - - // e. 识别无效图片、已使用图片、过期图片、确认图片、未开启图片 - const invalidRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/invalid.png")); - const invalidRes = captureGameRegion().find(invalidRo); - if (invalidRes.isExist()) { - log.info(`兑换码【${code}】无效`); - } - - const usedRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/used.png")); - const usedRes = captureGameRegion().find(usedRo); - if (usedRes.isExist()) { - log.info(`兑换码【${code}】已使用`); - } - - const expiredRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/expired.png")); - const expiredRes = captureGameRegion().find(expiredRo); - if (expiredRes.isExist()) { - log.info(`兑换码【${code}】已过期`); - } - - const notopenRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/not_open.png")); - const notopenRes = captureGameRegion().find(notopenRo); - if (notopenRes.isExist()) { - log.info(`兑换码【${code}】未开启`); - } - - const confirmRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/confirm.png")); - const confirmRes = captureGameRegion().find(confirmRo); - if (confirmRes.isExist()) { - log.info(`兑换码【${code}】成功兑换`); - confirmRes.click(); - } - - // f. 识别清除图片并点击,若未识别到则不做处理 - const clearRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/clear.png")); - const clearRes = captureGameRegion().find(clearRo); - if (clearRes.isExist()) { - clearRes.click(); - } - await sleep(4000); - } - } catch (error) { - log.error(`读取兑换码文件失败: ${error}`); - } - - // 4. 所有兑换码兑换完成后返回主界面 - await genshin.returnMainUi(); +(async function () { + setGameMetrics(1920, 1080, 1); + // 1. 返回主界面,等待1秒 + await genshin.returnMainUi(); + await sleep(1000); + + // 2. 通过keyPress点按esc键(VK_ESCAPE),等待2秒。ocr识别设置图片并点击,等待2秒。识别账户图片并点击,等待0.5秒,识别前往兑换图片并点击,等待0.5秒 + keyPress("ESCAPE"); + await sleep(2000); + + const settingsRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/settings.png")); + const settingsRes = captureGameRegion().find(settingsRo); + if (settingsRes.isExist()) { + settingsRes.click(); + } + await sleep(2000); + + const accountRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/account.png")); + const accountRes = captureGameRegion().find(accountRo); + if (accountRes.isExist()) { + accountRes.click(); + } + await sleep(500); + + const goToRedeemRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/go_to_redeem.png")); + const goToRedeemRes = captureGameRegion().find(goToRedeemRo); + if (goToRedeemRes.isExist()) { + goToRedeemRes.click(); + } + await sleep(500); + + // 3. 新建一个txt用于存储兑换码及截止时间,之间换行区分,格式为【兑换码,截止时间】 + try { + const content = file.readTextSync("codes.txt"); + const codes = content.split('\n'); + + for (let i = 0; i < codes.length; i++) { + const codeInfo = codes[i].split(','); + const code = codeInfo[0]; + const deadline = codeInfo[1]; + + // a. 获取当前时间【xxxx.xx.xx xx:xx:xx】(年月日时分秒),与截止时间进行对比 + const now = new Date(); + const currentTime = now.getFullYear() + '.' + String(now.getMonth() + 1).padStart(2, '0') + '.' + String(now.getDate()).padStart(2, '0') + ' ' + String(now.getHours()).padStart(2, '0') + ':' + String(now.getMinutes()).padStart(2, '0') + ':' + String(now.getSeconds()).padStart(2, '0'); + + if (currentTime > deadline) { + log.info(`兑换码【${code}】已超过截止时间,跳过`); + continue; + } + + // b. 识别输入兑换码图片并点击 + const inputCodeRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/input_code.png")); + const inputCodeRes = captureGameRegion().find(inputCodeRo); + if (inputCodeRes.isExist()) { + inputCodeRes.click(); + } + await sleep(300); + + // c. 通过虚拟键代码依次keyPress键入兑换码的每一个字符 + await inputText(code); + await sleep(500); + + // d. 输入完毕后,识别兑换图片并点击,等待1.5秒 + const redeemRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/redeem.png")); + const redeemRes = captureGameRegion().find(redeemRo); + if (redeemRes.isExist()) { + redeemRes.click(); + } + await sleep(1500); + + // e. 识别无效图片、已使用图片、过期图片、确认图片、未开启图片 + const invalidRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/invalid.png")); + const invalidRes = captureGameRegion().find(invalidRo); + if (invalidRes.isExist()) { + log.info(`兑换码【${code}】无效`); + } + + const usedRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/used.png")); + const usedRes = captureGameRegion().find(usedRo); + if (usedRes.isExist()) { + log.info(`兑换码【${code}】已使用`); + } + + const expiredRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/expired.png")); + const expiredRes = captureGameRegion().find(expiredRo); + if (expiredRes.isExist()) { + log.info(`兑换码【${code}】已过期`); + } + + const notopenRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/not_open.png")); + const notopenRes = captureGameRegion().find(notopenRo); + if (notopenRes.isExist()) { + log.info(`兑换码【${code}】未开启`); + } + + const confirmRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/confirm.png")); + const confirmRes = captureGameRegion().find(confirmRo); + if (confirmRes.isExist()) { + log.info(`兑换码【${code}】成功兑换`); + confirmRes.click(); + } + + // f. 识别清除图片并点击,若未识别到则不做处理 + const clearRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/clear.png")); + const clearRes = captureGameRegion().find(clearRo); + if (clearRes.isExist()) { + clearRes.click(); + } + await sleep(4000); + } + } catch (error) { + log.error(`读取兑换码文件失败: ${error}`); + } + + // 4. 所有兑换码兑换完成后返回主界面 + await genshin.returnMainUi(); })(); \ No newline at end of file diff --git a/repo/js/AutoCode/manifest.json b/archive/js/AutoCode/manifest.json similarity index 100% rename from repo/js/AutoCode/manifest.json rename to archive/js/AutoCode/manifest.json