@@ -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 ( / l t u i d (?: | _ v 2 ) = ( [ ^ ; ] + ) / ) [ 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