Exemplo n.º 1
0
        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
            });
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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
            });
Exemplo n.º 5
0
        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
            });