private void GetAvailableSlots(CovidVaccinationCenters covidVaccinationCenters) { string captcha = ""; foreach (var cvc in covidVaccinationCenters.Centers) { foreach (var session in cvc?.Sessions) { if (IsFiltrationCriteraSatisfied(cvc, session)) { DisplaySlotInfo(cvc, session); foreach (var slot in session.Slots) { Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Trying to Book Appointment for CVC: {cvc.Name} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Slot: {slot}"); Console.ResetColor(); captcha = new Captcha(_configuration).GetCurrentCaptchaDetails(); IS_BOOKING_SUCCESSFUL = BookAvailableSlot(session.SessionId, slot, captcha); if (IS_BOOKING_SUCCESSFUL == true) { return; } } } } } }
private void GetAvailableSlots(CovidVaccinationCenters covidVaccinationCenters) { string captcha = ""; foreach (var cvc in covidVaccinationCenters.Centers) { foreach (var session in cvc?.Sessions) { if (session.MinAgeLimit >= Convert.ToInt16(_configuration["CoWinAPI:MinAgeLimit"]) && session.MinAgeLimit < Convert.ToInt16(_configuration["CoWinAPI:MaxAgeLimit"]) && session.AvailableCapacity >= Convert.ToInt16(_configuration["CoWinAPI:MinimumVaccineAvailability"]) && session.Vaccine == _configuration["CoWinAPI:VaccineType"] && cvc.FeeType == _configuration["CoWinAPI:VaccineFeeType"]) { DisplaySlotInfo(cvc, session); foreach (var slot in session.Slots) { Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Trying to Book Appointment for CVC: {cvc.Name} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Slot: {slot}"); Console.ResetColor(); captcha = new Captcha(_configuration).GetCurrentCaptchaDetails(); var isBookingSuccessful = BookAvailableSlot(session.SessionId, slot, captcha); if (isBookingSuccessful == true) { break; } } } } } }
private void GetAvailableSlots(CovidVaccinationCenters covidVaccinationCenters) { string captcha = ""; foreach (var cvc in covidVaccinationCenters.Centers) { foreach (var session in cvc.Sessions) { if (IsFiltrationCriteriaSatisfied(cvc, session)) { if (session.Slots.Count > 0) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"[INFO] HURRAY! Slots Available for search criteria: Age {_configuration["CoWinAPI:MinAgeLimit"]}-{_configuration["CoWinAPI:MaxAgeLimit"]} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Center : {cvc.Name}"); Console.ResetColor(); DisplaySlotInfo(cvc, session); } // Processing of Slot Booking in Reverse Order so that chances are higher to get the slot for (int i = session.Slots.Count - 1; i >= 0; i--) { var stopwatch = new Stopwatch(); stopwatch.Start(); Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"[INFO] Trying to Book Appointment for CVC: {cvc.Name} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Slot: {session.Slots[i]}"); Console.ResetColor(); captcha = new Captcha(_configuration).GetCurrentCaptchaDetails(); IS_BOOKING_SUCCESSFUL = BookAvailableSlot(session.SessionId, session.Slots[i], captcha); if (IS_BOOKING_SUCCESSFUL == true) { stopwatch.Stop(); TimeSpan ts = stopwatch.Elapsed; var captchaMode = Convert.ToBoolean(_configuration["CoWinAPI:Auth:AutoReadCaptcha"]) == true ? "AI AutoCaptcha" : "Manual Captcha"; new Notifier().Notify($"*SLOT BOOKED SUCCESSFULLY +1* \n\n" + $"*LocalAppVersion* : `{ new VersionChecker(_configuration).GetCurrentVersionFromSystem()}`\n" + $"*BookedOn* : `{ DateTime.Now}`\n" + $"*TimeTakenToBook* : `{ts.TotalSeconds} seconds`\n" + $"*CaptchaMode* : `{captchaMode}`\n" + $"*Latitude* : `{ cvc.Lat}`\n" + $"*Longitude* : `{ cvc.Long}`\n" + $"*PINCode* : `{cvc.Pincode}`\n" + $"*District* : `{ cvc.DistrictName}`\n" + $"*State* : `{ cvc.StateName}`\n" + $"*BeneficiaryCount* : `{ beneficiaries.Count}`\n" + $"*AgeGroup* : `{_configuration["CoWinAPI:MinAgeLimit"]} - {_configuration["CoWinAPI:MaxAgeLimit"]}`\n"); return; } stopwatch.Stop(); } } else { Console.WriteLine($"[INFO] Sorry! No Slots Available for search criteria: Age {_configuration["CoWinAPI:MinAgeLimit"]}-{_configuration["CoWinAPI:MaxAgeLimit"]} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Center : {cvc.Name}"); Console.ResetColor(); } } } }
private void GetAvailableSlots(CovidVaccinationCenters covidVaccinationCenters) { List <Center> vaccinationCentres = covidVaccinationCenters.Centers; if (_vaccinationCentresToSearch.Count != 0 && Convert.ToBoolean(_configuration["CoWinAPI:IsSearchToBeDoneForVaccinationCentreName"]) == true) { vaccinationCentres = covidVaccinationCenters.Centers.Where(x => _vaccinationCentresToSearch.Any(centrename => centrename == x.Name.ToUpper().Trim())).ToList(); } if (vaccinationCentres.Count == 0) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"[WARNING] Sorry! No Vaccination Centers available for your search criteria"); Console.ResetColor(); return; } foreach (var cvc in vaccinationCentres) { foreach (var session in cvc.Sessions) { if (IsFiltrationCriteriaSatisfied(cvc, session)) { if (session.Slots.Count > 0) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"[INFO] HURRAY! Slots Available for search criteria: Age {_configuration["CoWinAPI:MinAgeLimit"]}-{_configuration["CoWinAPI:MaxAgeLimit"]} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Center : {cvc.Name}"); Console.ResetColor(); DisplaySlotInfo(cvc, session); } // Processing of Slot Booking in Reverse Order so that chances are higher to get the slot for (int i = session.Slots.Count - 1; i >= 0; i--) { var stopwatch = new Stopwatch(); stopwatch.Start(); Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"[INFO] Trying to Book Appointment for CVC: {cvc.Name} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Slot: {session.Slots[i]}"); Console.ResetColor(); string captcha = new Captcha(_configuration).GetCurrentCaptchaDetails(); IS_BOOKING_SUCCESSFUL = BookAvailableSlot(session.SessionId, session.Slots[i], captcha); if (IS_BOOKING_SUCCESSFUL == true) { stopwatch.Stop(); TimeSpan ts = stopwatch.Elapsed; var captchaMode = Convert.ToBoolean(_configuration["CoWinAPI:Auth:AutoReadCaptcha"]) == true ? "AI AutoCaptcha" : "Manual Captcha"; var bookDate = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss"); var appVersion = new VersionChecker(_configuration).GetCurrentVersionFromSystem(); var uniqueId = Guid.NewGuid(); var timeTakenToBook = ts.TotalSeconds; var source = System.Runtime.InteropServices.OSPlatform.Windows.ToString(); var telemetryModel = new TelemetryModel { UniqueId = uniqueId, AppVersion = appVersion.ToString().Trim(), Source = source.Trim(), BookedOn = DateTime.ParseExact(bookDate, "dd-MM-yyyy HH:mm:ss", new CultureInfo("en-US")), TimeTakenToBookInSeconds = timeTakenToBook, CaptchaMode = captchaMode.Trim(), Latitude = Convert.ToInt32(cvc.Lat), Longitude = Convert.ToInt32(cvc.Long), PINCode = Convert.ToInt32(cvc.Pincode), District = cvc.DistrictName.Trim(), State = cvc.StateName.Trim(), BeneficiaryCount = beneficiaries.Count, MinimumAge = Convert.ToInt32(_configuration["CoWinAPI:MinAgeLimit"]), MaximumAge = Convert.ToInt32(_configuration["CoWinAPI:MaxAgeLimit"]), }; var telemetryMetadata = JsonConvert.SerializeObject(telemetryModel); new Telemetry(_configuration).SendStatistics(telemetryMetadata); new Notifier().Notify($"*SLOT BOOKED SUCCESSFULLY +1* \n\n" + $"*LocalAppVersion* : `{ appVersion }`\n" + $"*BookedOn* : `{ bookDate }`\n" + $"*TimeTakenToBook* : `{ timeTakenToBook } seconds`\n" + $"*CaptchaMode* : `{captchaMode}`\n" + $"*Latitude* : `{ cvc.Lat}`\n" + $"*Longitude* : `{ cvc.Long}`\n" + $"*PINCode* : `{cvc.Pincode}`\n" + $"*District* : `{ cvc.DistrictName}`\n" + $"*State* : `{ cvc.StateName}`\n" + $"*BeneficiaryCount* : `{ beneficiaries.Count}`\n" + $"*AgeGroup* : `{_configuration["CoWinAPI:MinAgeLimit"]} - {_configuration["CoWinAPI:MaxAgeLimit"]}`\n" + $"*Source* : `{ source }`\n" + $"*UniqueId* : `{ uniqueId }`\n"); return; } stopwatch.Stop(); } } else { Console.WriteLine($"[INFO] Sorry! No Slots Available for search criteria: Age {_configuration["CoWinAPI:MinAgeLimit"]}-{_configuration["CoWinAPI:MaxAgeLimit"]} - PIN: {cvc.Pincode} - District: {cvc.DistrictName} - Date: {session.Date} - Center : {cvc.Name}"); Console.ResetColor(); } } } }
private void GetAvailableSlots(CovidVaccinationCenters covidVaccinationCenters) { List <Session> vaccinationCentres = covidVaccinationCenters.Sessions; if (_vaccinationCentresToSearch.Count != 0 && Convert.ToBoolean(_configuration["CoWinAPI:IsSearchToBeDoneForVaccinationCentreName"]) == true) { vaccinationCentres = covidVaccinationCenters.Sessions.Where(x => _vaccinationCentresToSearch.Any(centrename => centrename == x.Name.ToUpper().Trim())).ToList(); } if (vaccinationCentres?.Count == 0) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"[WARNING] Sorry! No Vaccination Centers available for your search criteria"); Console.ResetColor(); return; } var filteredVaccinationCentres = FilterVaccinationCentres(vaccinationCentres); var sortedVaccinationCentres = SortVaccinationCentres(filteredVaccinationCentres); foreach (var session in sortedVaccinationCentres) { if (session.Slots.Count > 0) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"[INFO] HURRAY! Slots Available for search criteria: Age {_configuration["CoWinAPI:MinAgeLimit"]}-{_configuration["CoWinAPI:MaxAgeLimit"]} - PIN: {session.Pincode} - District: {session.DistrictName} - Date: {session.Date} - Center : {session.Name}"); Console.ResetColor(); DisplaySlotInfo(session); // Processing of Slot Booking in Reverse Order so that chances are higher to get the slot if (_configuration["CoWinAPI:SlotPreference"].ToUpper().Trim() == PreferredSlot.LastSlot) { session.Slots.Reverse(); } else if (_configuration["CoWinAPI:SlotPreference"].ToUpper().Trim() == PreferredSlot.RandomSlot) { session.Slots = session.Slots.OrderBy(x => Guid.NewGuid()).ToList(); } foreach (var slot in session.Slots) { var stopwatch = new Stopwatch(); stopwatch.Start(); Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"[INFO] Trying to Book Appointment for session: {session.Name} - PIN: {session.Pincode} - District: {session.DistrictName} - Date: {session.Date} - Slot: {slot}"); Console.ResetColor(); IS_BOOKING_SUCCESSFUL = BookAvailableSlot(session.SessionId, slot); if (IS_BOOKING_SUCCESSFUL == true) { stopwatch.Stop(); SendNotification(session, stopwatch); DownloadAppointmentSlip(); return; } stopwatch.Stop(); } } else { Console.WriteLine($"[INFO] Sorry! No Slots Available for search criteria: Age {_configuration["CoWinAPI:MinAgeLimit"]}-{_configuration["CoWinAPI:MaxAgeLimit"]} - PIN: {session.Pincode} - District: {session.DistrictName} - Date: {session.Date} - Center : {session.Name}"); Console.ResetColor(); } } }