Skip to content

Commit c7069f2

Browse files
committed
implement manual code redemption functions for supported games
1 parent a086526 commit c7069f2

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

services/google-script/index.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,3 +669,67 @@ function checkInAllGames () {
669669
console.error("Error during check-in process:", e);
670670
});
671671
}
672+
673+
function manuallyRedeemCodes(gameName, forceRedeem = false) {
674+
if (!["genshin", "honkai", "starrail", "zenless"].includes(gameName)) {
675+
console.error(`Invalid game name: ${gameName}. Must be one of: genshin, honkai, starrail, zenless`);
676+
return Promise.reject(new Error(`Invalid game name: ${gameName}`));
677+
}
678+
679+
if (gameName === "honkai") {
680+
console.warn("Code redemption is not supported for Honkai Impact 3rd");
681+
return Promise.resolve({ success: false, message: "Code redemption is not supported for Honkai Impact 3rd" });
682+
}
683+
684+
const game = new Game(gameName, config[gameName]);
685+
const accounts = config[gameName].data;
686+
687+
if (accounts.length === 0) {
688+
console.warn(`No ${gameName} accounts provided. Cannot redeem codes.`);
689+
return Promise.resolve({ success: false, message: `No ${gameName} accounts provided` });
690+
}
691+
692+
return Promise.all(accounts.map(async (cookieData) => {
693+
try {
694+
const ltuid = cookieData.match(/ltuid(?:|_v2)=([^;]+)/)[1];
695+
const accountDetails = await game.getAccountDetails(cookieData, ltuid);
696+
697+
if (!accountDetails) {
698+
return { success: false, message: `Failed to get account details for ${gameName}` };
699+
}
700+
701+
const account = {
702+
uid: accountDetails.uid,
703+
nickname: accountDetails.nickname,
704+
rank: accountDetails.rank,
705+
region: accountDetails.region,
706+
cookie: cookieData
707+
};
708+
709+
console.log(`Redeeming codes for ${gameName} account: ${account.nickname} (${account.uid})`);
710+
711+
if (forceRedeem) {
712+
await game.forceRedeemCodes(account);
713+
return { success: true, account, message: `Force redeemed all codes for ${account.nickname} (${account.uid})` };
714+
} else {
715+
await game.redeemCodes(account);
716+
return { success: true, account, message: `Redeemed new codes for ${account.nickname} (${account.uid})` };
717+
}
718+
} catch (e) {
719+
console.error(`Error redeeming codes for ${gameName}:`, e);
720+
return { success: false, message: e.message };
721+
}
722+
}));
723+
}
724+
725+
function redeemGenshinCodes() {
726+
return manuallyRedeemCodes("genshin", false);
727+
}
728+
729+
function redeemStarRailCodes() {
730+
return manuallyRedeemCodes("starrail", false);
731+
}
732+
733+
function redeemZenlessCodes() {
734+
return manuallyRedeemCodes("zenless", false);
735+
}

0 commit comments

Comments
 (0)