Fix wallet code redeeming due to Steam changes (#1358)

* Fix wallet code redeeming due to Steam changes

* Revert "Fix wallet code redeeming due to Steam changes"

This reverts commit a993b26e

* Add AssumeWalletKeyOnBadActivationCode parameter to RedeemingPreferences, add according flags for redeem^
This commit is contained in:
Vitaliy
2019-08-05 15:41:37 +03:00
committed by Łukasz Domeradzki
parent 5fe8631e4f
commit 737aa622b7
3 changed files with 21 additions and 5 deletions

View File

@@ -2793,6 +2793,8 @@ namespace ArchiSteamFarm {
ArchiLogger.LogGenericInfo(Strings.Starting);
bool assumeWalletKeyOnBadActivationCode = BotConfig.RedeemingPreferences.HasFlag(BotConfig.ERedeemingPreferences.AssumeWalletKeyOnBadActivationCode);
while (IsConnectedAndLoggedOn && BotDatabase.HasGamesToRedeemInBackground) {
(string key, string name) = BotDatabase.GetGameToRedeemInBackground();
@@ -2808,7 +2810,7 @@ namespace ArchiSteamFarm {
continue;
}
if ((result.PurchaseResultDetail == EPurchaseResultDetail.CannotRedeemCodeFromClient) && (WalletCurrency != ECurrencyCode.Invalid)) {
if (((result.PurchaseResultDetail == EPurchaseResultDetail.CannotRedeemCodeFromClient) || ((result.PurchaseResultDetail == EPurchaseResultDetail.BadActivationCode) && assumeWalletKeyOnBadActivationCode)) && (WalletCurrency != ECurrencyCode.Invalid)) {
// If it's a wallet code, we try to redeem it first, then handle the inner result as our primary one
(EResult Result, EPurchaseResultDetail? PurchaseResult)? walletResult = await ArchiWebHandler.RedeemWalletKey(key).ConfigureAwait(false);

View File

@@ -427,7 +427,8 @@ namespace ArchiSteamFarm {
Forwarding = 1,
Distributing = 2,
KeepMissingGames = 4,
All = Forwarding | Distributing | KeepMissingGames
AssumeWalletKeyOnBadActivationCode = 8,
All = Forwarding | Distributing | KeepMissingGames | AssumeWalletKeyOnBadActivationCode
}
[Flags]

View File

@@ -692,6 +692,11 @@ namespace ArchiSteamFarm {
foreach (string flag in flags) {
switch (flag.ToUpperInvariant()) {
case "FAWK":
case "FORCEASSUMEWALLETKEY":
redeemFlags |= ERedeemFlags.ForceAssumeWalletKeyOnBadActivationCode;
break;
case "FD":
case "FORCEDISTRIBUTING":
redeemFlags |= ERedeemFlags.ForceDistributing;
@@ -706,6 +711,11 @@ namespace ArchiSteamFarm {
case "FORCEKEEPMISSINGGAMES":
redeemFlags |= ERedeemFlags.ForceKeepMissingGames;
break;
case "SAWK":
case "SKIPASSUMEWALLETKEY":
redeemFlags |= ERedeemFlags.SkipAssumeWalletKeyOnBadActivationCode;
break;
case "SD":
case "SKIPDISTRIBUTING":
@@ -2157,6 +2167,7 @@ namespace ArchiSteamFarm {
bool forward = !redeemFlags.HasFlag(ERedeemFlags.SkipForwarding) && (redeemFlags.HasFlag(ERedeemFlags.ForceForwarding) || Bot.BotConfig.RedeemingPreferences.HasFlag(BotConfig.ERedeemingPreferences.Forwarding));
bool distribute = !redeemFlags.HasFlag(ERedeemFlags.SkipDistributing) && (redeemFlags.HasFlag(ERedeemFlags.ForceDistributing) || Bot.BotConfig.RedeemingPreferences.HasFlag(BotConfig.ERedeemingPreferences.Distributing));
bool keepMissingGames = !redeemFlags.HasFlag(ERedeemFlags.SkipKeepMissingGames) && (redeemFlags.HasFlag(ERedeemFlags.ForceKeepMissingGames) || Bot.BotConfig.RedeemingPreferences.HasFlag(BotConfig.ERedeemingPreferences.KeepMissingGames));
bool assumeWalletKeyOnBadActivationCode = !redeemFlags.HasFlag(ERedeemFlags.SkipAssumeWalletKeyOnBadActivationCode) && (redeemFlags.HasFlag(ERedeemFlags.ForceAssumeWalletKeyOnBadActivationCode) || Bot.BotConfig.RedeemingPreferences.HasFlag(BotConfig.ERedeemingPreferences.AssumeWalletKeyOnBadActivationCode));
HashSet<string> pendingKeys = keys.ToHashSet(StringComparer.Ordinal);
HashSet<string> unusedKeys = pendingKeys.ToHashSet(StringComparer.Ordinal);
@@ -2196,7 +2207,7 @@ namespace ArchiSteamFarm {
// Either bot will be changed, or loop aborted
currentBot = null;
} else {
if ((result.PurchaseResultDetail == EPurchaseResultDetail.CannotRedeemCodeFromClient) && (Bot.WalletCurrency != ECurrencyCode.Invalid)) {
if (((result.PurchaseResultDetail == EPurchaseResultDetail.CannotRedeemCodeFromClient) || ((result.PurchaseResultDetail == EPurchaseResultDetail.BadActivationCode) && assumeWalletKeyOnBadActivationCode)) && (Bot.WalletCurrency != ECurrencyCode.Invalid)) {
// If it's a wallet code, we try to redeem it first, then handle the inner result as our primary one
(EResult Result, EPurchaseResultDetail? PurchaseResult)? walletResult = await currentBot.ArchiWebHandler.RedeemWalletKey(key).ConfigureAwait(false);
@@ -2933,7 +2944,7 @@ namespace ArchiSteamFarm {
}
[Flags]
private enum ERedeemFlags : byte {
private enum ERedeemFlags : ushort {
None = 0,
Validate = 1,
ForceForwarding = 2,
@@ -2942,7 +2953,9 @@ namespace ArchiSteamFarm {
SkipDistributing = 16,
SkipInitial = 32,
ForceKeepMissingGames = 64,
SkipKeepMissingGames = 128
SkipKeepMissingGames = 128,
ForceAssumeWalletKeyOnBadActivationCode = 256,
SkipAssumeWalletKeyOnBadActivationCode = 512
}
}
}