using Newtonsoft.Json; using RuriLib.CaptchaServices; using RuriLib.LS; using System.Windows.Media; namespace RuriLib { /// /// A block that can solve captcha challenges. /// public abstract class BlockCaptcha : BlockBase { /// /// The available Captcha-solving services. /// public enum CaptchaService { /// The service provided by https://anti-captcha.com/ AntiCaptcha, /// The service provided by https://azcaptcha.com/ AZCaptcha, /// The service provided by https://captchas.io/ CaptchasIO, /// The service provided by https://www.deathbycaptcha.com/ DBC, /// The service provided by http://de-captcher.com/ DeCaptcher, /// The service provided by http://www.imagetyperz.com/ ImageTypers, /// The service provided by https://www.solverecaptcha.com/ SolveRecaptcha, /// The service provided by https://2captcha.com/ TwoCaptcha, /// The service provided by https://rucaptcha.com/ RuCaptcha } /// The balance of the account of the captcha-solving service. [JsonIgnore] public double Balance { get; set; } = 0; /// public override void Process(BotData data) { base.Process(data); // If bypass balance check, skip this method. if (data.GlobalSettings.Captchas.BypassBalanceCheck) return; // Get balance. If balance is under a certain threshold, don't ask for captcha solve Balance = 0; // Reset it or the block will save it for future calls data.Log(new LogEntry("Checking balance...", Colors.White)); switch (data.GlobalSettings.Captchas.CurrentService) { case CaptchaService.ImageTypers: Balance = new ImageTyperz(data.GlobalSettings.Captchas.ImageTypToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.AntiCaptcha: Balance = new AntiCaptcha(data.GlobalSettings.Captchas.AntiCapToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.DBC: Balance = new DeathByCaptcha(data.GlobalSettings.Captchas.DBCUser, data.GlobalSettings.Captchas.DBCPass, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.TwoCaptcha: Balance = new TwoCaptcha(data.GlobalSettings.Captchas.TwoCapToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.RuCaptcha: Balance = new RuCaptcha(data.GlobalSettings.Captchas.RuCapToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.DeCaptcher: Balance = new DeCaptcher(data.GlobalSettings.Captchas.DCUser, data.GlobalSettings.Captchas.DCPass, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.AZCaptcha: Balance = new AZCaptcha(data.GlobalSettings.Captchas.AZCapToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.SolveRecaptcha: Balance = new SolveReCaptcha(data.GlobalSettings.Captchas.SRUserId, data.GlobalSettings.Captchas.SRToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; case CaptchaService.CaptchasIO: Balance = new CaptchasIO(data.GlobalSettings.Captchas.CIOToken, data.GlobalSettings.Captchas.Timeout).GetBalance(); break; default: Balance = 999; break; } if (Balance <= 0) throw new System.Exception($"[{data.GlobalSettings.Captchas.CurrentService}] Bad token/credentials or zero balance!"); data.Log(new LogEntry($"[{data.GlobalSettings.Captchas.CurrentService}] Current Balance: ${Balance}", Colors.GreenYellow)); data.Balance = Balance; } } }