protected override RuleOutcome EvaluateRule(VoatRuleContext context) { ChatMessage message = context.PropertyBag.ChatMessage; var currentDate = Data.Repository.CurrentDate; if (message == null) { return(CreateOutcome(RuleResult.Denied, "Rule needs chat message contexarstt")); } if (BanningUtility.ContentContainsBannedDomain(null, message.Message)) { return(CreateOutcome(RuleResult.Denied, "Content contains banned domain")); } var history = ChatHistory.History(message.RoomID); var historyArray = history.ToArray(); //Copy Pasta //check full history var duplicateFound = false; //duplicateFound = historyArray.Any(x => x.UserName == message.UserName && x.Message.IsEqual(message.Message.TrimSafe())); var lastMessage = historyArray.LastOrDefault(x => x.User.UserName == message.User.UserName); if (lastMessage != null) { duplicateFound = lastMessage.Message.IsEqual(message.Message.TrimSafe()); } if (duplicateFound) { return(CreateOutcome(RuleResult.Denied, "Chat message considered copy/paste spam")); } ////Spammer var countInWindow = historyArray.Count(x => x.User.UserName == message.User.UserName && currentDate.Subtract(x.CreationDate) <= _timeSpanWindow); if (countInWindow >= _count) { return(CreateOutcome(RuleResult.Denied, "Chat message considered spamming by user")); } return(base.EvaluateRule(context)); }