static void Main(string[] args) { ServiceController service = new ServiceController(); service.ServiceName = "[Service name]"; // Insert service name to be monitored int n = 0, b = 0; bool msgSent = false; // logging string token = "[Discord webhook URL]"; // Insert Discord webhook URL string username = "******"; // Insert username that posts messages string avatar = "[Avatar image URL"; // Insert URL for avatar image Console.WriteLine("-------------------------------------"); Console.WriteLine("| Medieval Engineers Server Monitor |"); Console.WriteLine("-------------------------------------\n"); DateTime restart1 = DateTime.Today.AddHours(3); // Set time for scheduled restart1 DateTime restart2 = DateTime.Today.AddHours(9); // Set time for scheduled restart2 DateTime restart3 = DateTime.Today.AddHours(15); // Set time for scheduled restart3 DateTime restart4 = DateTime.Today.AddHours(20); // Set time for scheduled restart4 Console.WriteLine("-----------------------------------------"); Console.WriteLine("| Server Restart #1 at {0:HH:mm:ss zzz}. |", restart1); Console.WriteLine("| Server Restart #2 at {0:HH:mm:ss zzz}. |", restart2); Console.WriteLine("| Server Restart #3 at {0:HH:mm:ss zzz}. |", restart3); Console.WriteLine("| Server Restart #4 at {0:HH:mm:ss zzz}. |", restart4); Console.WriteLine("-----------------------------------------\n"); DiscordWebhookExecutor discord = new DiscordWebhookExecutor(token); while (true) { DateTime now = DateTime.Now; Console.WriteLine("System Time: {0:HH:mm:ss}.", now); // Health check service.Refresh(); Console.WriteLine("Service {0} is {1}.\n", service.ServiceName, service.Status.ToString()); // Initial message if (service.Status == ServiceControllerStatus.Running && msgSent == false) { discord.Execute(now + " - Server is running.", username, avatar, false); msgSent = true; } // Initial start when service is stopped if (service.Status == ServiceControllerStatus.Stopped && msgSent == false) { discord.Execute(now + " - Server stopped.", username, avatar, false); Thread.Sleep(10000); now = DateTime.Now; Console.WriteLine("Starting service {0}...", service.ServiceName); discord.Execute(now + " - Starting server...", username, avatar, false); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); service.Refresh(); now = DateTime.Now; Console.WriteLine("Service {0} started successfully.\n", service.ServiceName); discord.Execute(now + " - Server started successfully.", username, avatar, false); } // Scheduled restarts // T-15 min if (n != 15 && now >= restart1.AddMinutes(-15) && now <= restart1.AddMinutes(-14) || n != 15 && now >= restart2.AddMinutes(-15) && now <= restart2.AddMinutes(-14) || n != 15 && now >= restart3.AddMinutes(-15) && now <= restart3.AddMinutes(-14) || n != 15 && now >= restart4.AddMinutes(-15) && now <= restart4.AddMinutes(-14)) { Console.WriteLine("!!! Server restart in 15 minutes !!!"); discord.Execute(now + " - Scheduled server restart in 15 minutes.", username, avatar, false); n = 15; } // T-10 min if (n != 10 && now >= restart1.AddMinutes(-10) && now <= restart1.AddMinutes(-9) || n != 10 && now >= restart2.AddMinutes(-10) && now <= restart2.AddMinutes(-9) || n != 10 && now >= restart3.AddMinutes(-10) && now <= restart3.AddMinutes(-9) || n != 10 && now >= restart4.AddMinutes(-10) && now <= restart4.AddMinutes(-9)) { Console.WriteLine("!!! Server restart in 10 minutes !!!"); discord.Execute(now + " - Scheduled server restart in 10 minutes.", username, avatar, false); n = 10; } // T-5min if (n != 5 && now >= restart1.AddMinutes(-5) && now <= restart1.AddMinutes(-4) || n != 5 && now >= restart2.AddMinutes(-5) && now <= restart2.AddMinutes(-4) || n != 5 && now >= restart3.AddMinutes(-5) && now <= restart3.AddMinutes(-4) || n != 5 && now >= restart4.AddMinutes(-5) && now <= restart4.AddMinutes(-4)) { Console.WriteLine("!!! Server restart in 5 minutes !!!"); discord.Execute(now + " - Scheduled server restart in 5 minutes.", username, avatar, false); n = 5; } // T-0.5 min if (now >= restart1.AddMinutes(-0.5) && now <= restart1.AddMinutes(-0.25) || now >= restart2.AddMinutes(-0.5) && now <= restart2.AddMinutes(-0.25) || now >= restart3.AddMinutes(-0.5) && now <= restart3.AddMinutes(-0.25) || now >= restart4.AddMinutes(-0.5) && now <= restart4.AddMinutes(-0.25)) { Console.WriteLine("!!! Server restart imminent !!!"); discord.Execute(now + " - Scheduled server restart imminent.", username, avatar, false); // Timer for precise shutdown while (now > restart1.AddMinutes(-1) && now < restart1 || now > restart2.AddMinutes(-1) && now < restart2 || now > restart3.AddMinutes(-1) && now < restart3 || now > restart4.AddMinutes(-1) && now < restart4) { now = DateTime.Now; Thread.Sleep(1000); } // Stop Console.WriteLine("Stopping service {0}...", service.ServiceName); discord.Execute(now + " - Stopping server...", username, avatar, false); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped); service.Refresh(); now = DateTime.Now; Console.WriteLine("Service {0} is {1}.", service.ServiceName, service.Status.ToString()); discord.Execute(now + " - Server stopped successfully.", username, avatar, false); Thread.Sleep(10000); // Start now = DateTime.Now; Console.WriteLine("Starting service {0}...\n", service.ServiceName); discord.Execute(now + " - Starting server...", username, avatar, false); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); service.Refresh(); now = DateTime.Now; Console.WriteLine("Service {0} started successfully.\n", service.ServiceName); discord.Execute(now + " - Server started successfully.", username, avatar, false); msgSent = false; // Reset bool, for healthcheck message } // Restart after crash if (service.Status == ServiceControllerStatus.Stopped && msgSent == true) { discord.Execute(now + " - <@[Role ID]> Server stopped unexpectedly!", username, avatar, false); // Mention @role Thread.Sleep(10000); now = DateTime.Now; Console.WriteLine("Starting service {0}...", service.ServiceName); discord.Execute(now + " - Starting server...", username, avatar, false); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); service.Refresh(); now = DateTime.Now; Console.WriteLine("Service {0} started successfully.\n", service.ServiceName); discord.Execute(now + " - Server started successfully.", username, avatar, false); msgSent = false; // Reset bool, for healthcheck message } Thread.Sleep(10000); } }
static void Main(string[] args) { //EXIT HANDLER// _consoleCtrlHandler += s => { driver.Quit(); return(false); }; SetConsoleCtrlHandler(_consoleCtrlHandler, true); //CHROME SETTINGS// ChromeOptions options = new ChromeOptions(); options.AddArgument("headless"); //windowless options.AddUserProfilePreference("profile.default_content_setting_values.images", 2); //no images var chromeDriverService = ChromeDriverService.CreateDefaultService(); chromeDriverService.HideCommandPromptWindow = true; driver = new ChromeDriver(chromeDriverService, options); DiscordWebhookExecutor executor = new DiscordWebhookExecutor("[Insert Webhook Link]"); while (true) { foreach (string supremelink in SupremeLinks) { driver.Navigate().GoToUrl("https://supremenewyork.com/shop/all/" + supremelink); var Container = driver.FindElement(By.Id("container")); foreach (var article in Container.FindElements(By.TagName("article"))) { var ItemName = article.FindElement(By.TagName("p")).FindElement(By.ClassName("name-link")).Text; var ItemColor = article.FindElement(By.TagName("h1")).FindElement(By.ClassName("name-link")).Text; bool SoldOut = IsElementPresent(article); var ItemLink = article.FindElement(By.TagName("a")).GetAttribute("href"); SiteItem temp = new SiteItem(ItemName, ItemColor, SoldOut); if (ExistsInList(temp)) { int index = ItemList.FindIndex(a => a.Name == ItemName && a.Color == ItemColor); bool oldSoldOut = ItemList[index].SoldOut; if (SoldOut != oldSoldOut) { ItemList.RemoveAt(index); ItemList.Add(temp); if (!SoldOut) { ColorLine("[RESTOCK] [" + DateTime.Now + "] " + ItemName + " " + ItemColor, ConsoleColor.Green); executor.Execute("[RESTOCK] [" + DateTime.Now + "] " + ItemName + " " + ItemColor + "Link: " + ItemLink, "EZMonitor", null, false, false); } else { ColorLine("[SOLD OUT]" + ItemName + " " + ItemColor, ConsoleColor.Red); } } } else { Console.WriteLine("[Item] " + ItemName + " " + ItemColor + " " + SoldOut.ToString()); ItemList.Add(temp); } } } } }