private static void ApprovalServerStatusCheck() { bool serverUp = BotUtilities.PingUrl($"{BotUtilities.ApprovalServerUrl}?status"); if (!serverUp && !alerted) { BotUtilities.SendDiscordMessage("Approval server is down (ping timed out)\nAttempting to restart..."); alerted = true; BotUtilities.ApprovalServer.Restart(); } else if (serverUp && alerted) { BotUtilities.SendDiscordMessage("Approval server is back up"); alerted = false; } }
public static async Task CheckMonitoredComments() { monitoredComments.RemoveAll(c => c.Age.TotalHours > c.ExpirationHours); //Remove any old monitors for (int i = monitoredComments.Count - 1; i >= 0; i--) { CommentMonitor monitor = monitoredComments[i]; try { Comment botResponseComment = null; try { botResponseComment = await RedditHelper.GetComment(monitor.BotResponseComment.Permalink); } catch (Exception ex) { monitor.FailedTimes++; if (monitor.FailedTimes == 3) { ConsoleHelper.Write($"Exception thrown when getting comment: {ex.Message}\n{ex.StackTrace}", ConsoleColor.Red); ConsoleHelper.Write("Removing monitor...", ConsoleColor.Red); //maybe we shouldn't remove the monitor unless trying to retrieve the comment fails too many times? monitoredComments.Remove(monitor); } continue; } if (!monitor.AlertedBadBot && botResponseComment.Comments.Any(c => Regex.IsMatch(c.Body, "bad bot|wrong", RegexOptions.IgnoreCase))) { BotUtilities.SendDiscordMessage($"There was a \"bad bot\"/\"wrong\" reply to this comment. Might want to investigate:\n\n{RedditHelper.GetFullLink(botResponseComment.Shortlink)}"); monitor.AlertedBadBot = true; } if (!monitor.AlertedNegativePoints && botResponseComment.Score < 0) { BotUtilities.SendDiscordMessage($"The bot's recent comment has a negative score. Might want to investigate:\n\n{RedditHelper.GetFullLink(botResponseComment.Shortlink)}"); monitor.AlertedNegativePoints = true; } if (!monitor.Alerted10Points && botResponseComment.Score >= 10) { BotUtilities.SendDiscordMessage($"The bot's recent comment has gotten more than 10 points! Check it out:\n\n{RedditHelper.GetFullLink(botResponseComment.Shortlink)}"); monitor.Alerted10Points = true; } if (monitor.Parent is Post && botResponseComment.Score <= -3) { await RedditHelper.DeleteComment(monitor.BotResponseComment); monitoredComments.Remove(monitor); ConsoleHelper.Write($"Deleted comment {monitor.BotResponseComment.Id} (score too low)", ConsoleColor.Green); //If we've made a bad reply, update the Google sheet to reflect that if (monitor.Parent is Post parentPost) { BotUtilities.LogBadReply(parentPost); } continue; } if (monitor.Parent is Comment parentComment) { string oldParentBody = parentComment.Body; string oldResponseBody = monitor.BotResponseComment.Body; Comment updatedParent = await RedditHelper.GetComment(parentComment.Permalink); if (updatedParent.Body == "[deleted]" || (updatedParent.IsRemoved.HasValue && updatedParent.IsRemoved.Value)) //If comment is deleted or removed, delete the bot's response { await RedditHelper.DeleteComment(monitor.BotResponseComment); monitoredComments.Remove(monitor); ConsoleHelper.Write($"Deleted comment {monitor.BotResponseComment.Id} (parent deleted)", ConsoleColor.Green); } else if (updatedParent.Body != oldParentBody) //If the parent comment's request has changed, edit the bot's response { if (Regex.IsMatch(updatedParent.Body, BOTKEYWORDREGEX)) { string reply = BotReply.GetReplyForRequest(updatedParent); if (reply != oldResponseBody) { if (!string.IsNullOrEmpty(reply)) { await RedditHelper.EditComment(monitor.BotResponseComment, reply); ConsoleHelper.Write($"Edited comment {monitor.BotResponseComment.Id} (parent edited)", ConsoleColor.Green); } else { await RedditHelper.DeleteComment(monitor.BotResponseComment); monitoredComments.Remove(monitor); ConsoleHelper.Write($"Deleted comment {monitor.BotResponseComment.Id} (parent doesn't require a response)", ConsoleColor.Green); } } monitor.Parent = updatedParent; } else if (updatedParent.Body.Contains("mountainproject.com")) //If the parent comment's MP url has changed, edit the bot's response { string reply = BotReply.GetReplyForMPLinks(updatedParent); if (reply != oldResponseBody) { if (!string.IsNullOrEmpty(reply)) { await RedditHelper.EditComment(monitor.BotResponseComment, reply); ConsoleHelper.Write($"Edited comment {monitor.BotResponseComment.Id} (parent edited)", ConsoleColor.Green); } else { await RedditHelper.DeleteComment(monitor.BotResponseComment); monitoredComments.Remove(monitor); ConsoleHelper.Write($"Deleted comment {monitor.BotResponseComment.Id} (parent doesn't require a response)", ConsoleColor.Green); } } monitor.Parent = updatedParent; } else //If the parent comment is no longer a request or contains a MP url, delete the bot's response { await RedditHelper.DeleteComment(monitor.BotResponseComment); monitoredComments.Remove(monitor); ConsoleHelper.Write($"Deleted comment {monitor.BotResponseComment.Id} (parent doesn't require a response)", ConsoleColor.Green); } } } } catch (Exception e) { ConsoleHelper.Write($"\tException occured when checking monitor for comment {RedditHelper.GetFullLink(monitor.Parent.Permalink)}", ConsoleColor.Red); ConsoleHelper.Write($"\t{e.Message}\n{e.StackTrace}", ConsoleColor.Red); ConsoleHelper.Write("Removing monitor...", ConsoleColor.Red); monitoredComments.Remove(monitor); } } }