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;
}
}
}