public SpamProbability GetSpamProbability(ServerMessagesCacheService serverMessagesCacheService, Contexts contexts) { var userId = contexts.User.Id; var serverId = contexts.Server.Id; var lastFewMessages = serverMessagesCacheService.GetLastUserMessages(userId, serverId) .TakeLast(5) .ToList(); if (lastFewMessages.Count < 2) { return(SpamProbability.None); } var percentOfSimilarityToSuspectSpam = this._configurationService.GetConfigurationItem <PercentOfSimilarityBetweenMessagesToSuspectSpam>(serverId).Value; var content = lastFewMessages.Last().Content; var similarMessagesCount = lastFewMessages .SkipLast(1) // because I'm comparing all the other messages to the last message .Count(x => this.GetDifferencePercent(x.Content, content) < percentOfSimilarityToSuspectSpam); var isUserSafe = this._userSafetyChecker.IsUserSafe(userId, serverId); return(similarMessagesCount switch { 0 => SpamProbability.None, 1 => SpamProbability.Low, 2 when isUserSafe => SpamProbability.Low, 2 => SpamProbability.Medium, _ when isUserSafe => SpamProbability.Medium, _ => SpamProbability.Sure });
public SpamProbability GetSpamProbability(ServerMessagesCacheService serverMessagesCacheService, DiscordRequest request, Contexts contexts) { var userId = contexts.User.Id; var serverId = contexts.Server.Id; var lastFewMessages = serverMessagesCacheService.GetLastUserMessages(userId, serverId) .TakeLast(4) .ToList(); if (lastFewMessages.Count < 2) { return(SpamProbability.None); } var content = request.OriginalMessage; var percentOfSimilarityToSuspectSpam = this._configurationService.GetConfigurationItem <PercentOfSimilarityBetweenMessagesToSuspectSpam>(serverId).Value; var similarMessagesCount = lastFewMessages.Count(x => this.GetDifferencePercent(x.Content, content) < percentOfSimilarityToSuspectSpam); var isUserSafe = this.UserSafetyChecker.IsUserSafe(userId, serverId); return(similarMessagesCount switch { 0 => SpamProbability.None, 1 => SpamProbability.Low, 2 when isUserSafe => SpamProbability.Low, 2 => SpamProbability.Medium, _ when isUserSafe => SpamProbability.Medium, _ => SpamProbability.Sure });
public SpamProbability GetSpamProbability(ServerMessagesCacheService serverMessagesCacheService, Contexts contexts) { var content = serverMessagesCacheService.GetLastUserMessages(contexts.User.Id, contexts.Server.Id).Last().Content; if (!this._linkRegex.IsMatch(content)) { return(SpamProbability.None); } var userId = contexts.User.Id; var serverId = contexts.Server.Id; return(this._userSafetyChecker.IsUserSafe(userId, serverId) ? SpamProbability.Low : SpamProbability.Medium); }
public SpamProbability GetSpamProbability(ServerMessagesCacheService serverMessagesCacheService, Contexts contexts) { var lastFewMessages = serverMessagesCacheService.GetLastUserMessages(contexts.User.Id, contexts.Server.Id) .TakeLast(7) .ToList(); if (!this.IsMessageWithMuchCapslock(lastFewMessages.Last().Content, contexts.Server.Id)) { return(SpamProbability.None); } var capslockedMessagesCount = lastFewMessages.Count(x => this.IsMessageWithMuchCapslock(x.Content, contexts.Server.Id)); return(capslockedMessagesCount switch { 1 => SpamProbability.Low, 2 => SpamProbability.Medium, _ => SpamProbability.Sure });
public SpamProbability GetSpamProbability(ServerMessagesCacheService serverMessagesCacheService, Contexts contexts) { var howManyMessagesCount = this._configurationService.GetConfigurationItem <HowManyMessagesInShortTimeToBeSpam>(contexts.Server.Id).Value; var howManySeconds = this._configurationService.GetConfigurationItem <HowLongIsShortTimeInSeconds>(contexts.Server.Id).Value; var minDate = DateTime.UtcNow.AddSeconds(-howManySeconds); var messagesCount = serverMessagesCacheService.GetLastUserMessages(contexts.User.Id, contexts.Server.Id) .TakeLast(howManyMessagesCount) .Count(x => x.SentAt >= minDate); if (messagesCount <= howManyMessagesCount / 3) { return(SpamProbability.None); } var userIsSafe = this._userSafetyChecker.IsUserSafe(contexts.User.Id, contexts.Server.Id); return(userIsSafe switch //todo: rewrite this switch when we'll switch to c# 9 { true when messagesCount < howManyMessagesCount => SpamProbability.None, false when messagesCount <= howManyMessagesCount / 2 => SpamProbability.Low, false when messagesCount < howManyMessagesCount => SpamProbability.Medium, _ => SpamProbability.Sure });