public static async Task RespondToMPUrls(Dictionary <Subreddit, List <Comment> > subredditsAndRecentComments) //Respond to comments that have a mountainproject url { foreach (Subreddit subreddit in subredditsAndRecentComments.Keys.ToList()) { List <Comment> filteredComments = subredditsAndRecentComments[subreddit].Where(c => c.Body.Contains("mountainproject.com")).ToList(); filteredComments = BotUtilities.RemoveAlreadyRepliedTo(filteredComments); filteredComments.RemoveAll(c => c.IsArchived); filteredComments = BotUtilities.RemoveBlacklisted(filteredComments, new[] { BlacklistLevel.OnlyKeywordReplies, BlacklistLevel.Total }); //Remove comments from users who don't want the bot to automatically reply to them filteredComments = await BotUtilities.RemoveCommentsOnSelfPosts(subreddit, filteredComments); //Don't reply to self posts (aka text posts) subredditsAndRecentComments[subreddit] = filteredComments; } foreach (Comment comment in subredditsAndRecentComments.SelectMany(p => p.Value)) { try { Console.WriteLine($"\tGetting reply for comment: {comment.Id}"); string reply = BotReply.GetReplyForMPLinks(comment); if (string.IsNullOrEmpty(reply)) { BotUtilities.LogCommentBeenRepliedTo(comment); //Don't check this comment again continue; } if (!DryRun) { Comment botReplyComment = await RedditHelper.ReplyToComment(comment, reply); ConsoleHelper.Write($"\tReplied to comment {comment.Id}", ConsoleColor.Green); monitoredComments.Add(new CommentMonitor() { Parent = comment, BotResponseComment = botReplyComment }); } BotUtilities.LogCommentBeenRepliedTo(comment); } catch (RateLimitException) { Console.WriteLine("\tRate limit hit. Postponing reply until next iteration"); } catch (Exception e) { Console.WriteLine($"\tException occurred with comment {RedditHelper.GetFullLink(comment.Permalink)}"); Console.WriteLine($"\t{e.Message}\n{e.StackTrace}"); } } }
public static async Task RespondToRequests(List <Comment> recentComments) //Respond to comments that specifically called the bot (!MountainProject) { List <Comment> botRequestComments = recentComments.Where(c => Regex.IsMatch(c.Body, BOTKEYWORDREGEX)).ToList(); botRequestComments = BotUtilities.RemoveAlreadyRepliedTo(botRequestComments); botRequestComments.RemoveAll(c => c.IsArchived); botRequestComments = BotUtilities.RemoveBlacklisted(botRequestComments, new[] { BlacklistLevel.Total }); //Don't reply to bots foreach (Comment comment in botRequestComments) { try { Console.WriteLine($"\tGetting reply for comment: {comment.Id}"); string reply = BotReply.GetReplyForRequest(comment); if (!DryRun) { Comment botReplyComment = await RedditHelper.ReplyToComment(comment, reply); ConsoleHelper.Write($"\tReplied to comment {comment.Id}", ConsoleColor.Green); monitoredComments.Add(new CommentMonitor() { Parent = comment, BotResponseComment = botReplyComment }); } BotUtilities.LogCommentBeenRepliedTo(comment); } catch (RateLimitException) { Console.WriteLine("\tRate limit hit. Postponing reply until next iteration"); } catch (Exception e) { Console.WriteLine($"\tException occurred with comment {RedditHelper.GetFullLink(comment.Permalink)}"); Console.WriteLine($"\t{e.Message}\n{e.StackTrace}"); } } }