static void Main() { using var tmr = new Timer(1000); tmr.Elapsed += UptimeTimer_Elapsed; tmr.Start(); Console.Gradient("Stock Checker!", gradient: new[] { ConsoleColor.DarkGray, ConsoleColor.DarkBlue, }, pattern: GradientPattern.Word); //Console.AddStatusBar(ProgressStatusBar); Console.AddStatusBar(UptimeStatusBar); Run().Wait(); tmr.Stop(); }
static async Task Run() { ItemNumber = null; while (Items.Count > 0) { ItemNumber = 0; foreach (var task in Items.ToArray()) { ItemNumber++; UptimeTimer_Elapsed(); await Task.Delay(500); var html = await WebScanner.HttpBrowser.GetHtmlAsync(task.FormattedUrl); if (!String.IsNullOrWhiteSpace(html)) { var has_changed = task.Process(html, out string status); if (has_changed) { if (task.LastStatus != status) { task.LastStatus = status; SysConsole.Beep(5000, 5000); // scare the user into knowing the item they wanted can be purchased. a few minutes late via an email can be a problem in the case of amd/nvidia cpu/gpus etc. SendNotice(task.Title, $"Stock status change detected `{status}`. If this is an in stock status get on this asap to aquire your item.<br/> - " + task.FormattedUrl); } } Console.LocalTime(ConsoleColor.DarkGray) .DarkCyan($" {task.TaskCategory}") .DarkGray($"> ") .Write($"{task.Title} ", ConsoleColor.White) .WriteLine(status, has_changed ? ConsoleColor.Green : ConsoleColor.Red); } else { Console.LocalTime(ConsoleColor.DarkGray) .DarkCyan($" {task.TaskCategory}") .DarkGray($"> ") .Write($"{task.Title} ", ConsoleColor.White) .WriteLine("Failed to fetch", ConsoleColor.Red); } } await Task.Delay(1000 * 30); } }
static void SendNotice(string title, string notice) { try { var fromAddress = new MailAddress("--- INSERT EMAIL TO SEND FROM ---", "Aus Stock Checker"); var toAddress = new MailAddress("--- INSERT EMAIL ADDRESS TO NOTIFY ---", "Customer"); var smtp = new SmtpClient { Host = "smtp.gmail.com", // INSERT YOUR HOST IF NOT GMAIL Port = 587, // INSERT YOUR PORT EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, "--- INSERT YOUR EMAIL PASSWORD TO SEND FROM ---") }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = "Stock Notification: " + title, Body = notice, IsBodyHtml = true, Priority = MailPriority.High, }) { message.Headers.Add("Importance", "High"); smtp.Send(message); } } catch (Exception ex) { Console.LocalTime(ConsoleColor.DarkGray) .DarkCyan($" ERR") .DarkGray($"> ") .WriteLine(ex, ConsoleColor.Red); Console.LocalTime(ConsoleColor.DarkGray) .DarkCyan($" ERR") .DarkGray($"> ") .WriteLine("--- ENSURE YOU UPDATE THE EMAIL INFORMATION! ---", ConsoleColor.Red); } }