Пример #1
0
        public void TestReportSpammerSameUser()
        {
            // No reports.

            var spammer = new Spammer {
                UserId = Guid.NewGuid()
            };

            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report once.

            var reportedById = Guid.NewGuid();

            _spamCommand.ReportSpammer(reportedById, spammer);
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report twice.

            _spamCommand.ReportSpammer(reportedById, spammer);
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report thrice.

            _spamCommand.ReportSpammer(reportedById, spammer);
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Different users.

            _spamCommand.ReportSpammer(Guid.NewGuid(), spammer);
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            _spamCommand.ReportSpammer(Guid.NewGuid(), spammer);
            Assert.IsTrue(_spamQuery.IsSpammer(spammer));
        }
Пример #2
0
 bool ISpamRepository.IsSpammer(Spammer possibleSpammer)
 {
     using (var dc = CreateContext().AsReadOnly())
     {
         return(SpammerExists(dc, possibleSpammer.UserId, possibleSpammer.FirstName, possibleSpammer.LastName));
     }
 }
Пример #3
0
        public void TestReportSpammer()
        {
            // No reports.

            var spammer = new Spammer {
                UserId = Guid.NewGuid()
            };

            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report once.

            _spamCommand.ReportSpammer(Guid.NewGuid(), spammer);
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report twice.

            _spamCommand.ReportSpammer(Guid.NewGuid(), spammer);
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report thrice.

            _spamCommand.ReportSpammer(Guid.NewGuid(), spammer);
            Assert.IsTrue(_spamQuery.IsSpammer(spammer));
        }
Пример #4
0
 public static SpammerEntity Map(this Spammer spammer)
 {
     return(new SpammerEntity
     {
         id = Guid.NewGuid(),
         userId = spammer.UserId,
         firstName = spammer.FirstName,
         lastName = spammer.LastName,
     });
 }
Пример #5
0
        public async Task NoResponseWhenLargerTriggerCount()
        {
            var spammer = new Spammer(2, 1);
            var channel = new Mock <IMessageChannel>();
            var msg     = CreateMessage(channel.Object, "123");

            await spammer.CheckSpamAsync(msg.Object);

            channel.Verify(c => c.SendMessageAsync("123", false, null, null),
                           Times.Never());
        }
Пример #6
0
        public async Task RespondAlwaysToFullProbability()
        {
            var spammer = new Spammer(1, 1);
            var channel = new Mock <IMessageChannel>();
            var msg     = CreateMessage(channel.Object, "123");

            await spammer.CheckSpamAsync(msg.Object);

            channel.Verify(c => c.SendMessageAsync("123", false, null, null),
                           Times.Once());
        }
Пример #7
0
        private bool IsReportedSpammer(Spammer spammer)
        {
            // To be classifed as a spammer it requires 3 reports from different users
            // within the last month, and they must be specified by id.

            if (spammer.UserId == null)
            {
                return(false);
            }

            var sinceTime = DateTime.Now.Date.AddDays(-1 * ReportIntervalDays);
            var reports   = _repository.GetSpammerReports(spammer.UserId.Value, sinceTime);

            return((from r in reports select r.ReportedByUserId).Distinct().Count() >= ReportDistinctUsers);
        }
Пример #8
0
        public async Task InstallAsync(DiscordSocketClient discordClient,
                                       CommandService commandService)
        {
            _client         = discordClient;
            _commandService = commandService;
            var server = new Server(_client);

            server.Start();

            var drinkDao = await DrinkDao.CreateAsync();

            _services = new ServiceCollection();

            var messageService = new MessageService(_client);
            var eventService   = new EventService(messageService, new EventDao());

            // Add services to the ServiceCollection
            _services.AddSingleton(await CommentService.Create());
            _services.AddSingleton(new CommandDao());
            _services.AddSingleton(new QuoteService());
            _services.AddSingleton(new WeatherService());
            _services.AddSingleton(new UrbanService());
            _services.AddSingleton(new NHLService());
            _services.AddSingleton(new AromaService(new AromaDao()));
            _services.AddSingleton(new EPClient(BotSettings.Instance.EPAPIKey));
            _services.AddSingleton(messageService);
            _services.AddSingleton(eventService);
            _services.AddSingleton(new WolframService());
            _services.AddSingleton(new StartupTime());
            _services.AddSingleton(new F1Service());
            if (drinkDao != null)
            {
                _services.AddSingleton(drinkDao);
            }
            _oldLinkService      = new OldLinkService();
            _forbiddenMsgService = new ForbiddenMsgService();
            _spammer             = new Spammer();

            JobManager.Initialize(eventService);

            // Build ServiceProvider and add modules
            _serviceProvider = _services.BuildServiceProvider();
            await _commandService.AddModulesAsync(Assembly.GetEntryAssembly(), _serviceProvider);

            _client.MessageReceived += HandleCommandAsync;
            Log.Debug("CommandHandler installed.");
        }
Пример #9
0
        void ISpamRepository.CreateSpammer(Spammer spammer)
        {
            using (var dc = CreateContext())
            {
                // Check whether the spammer already exists.

                var exists = spammer.UserId != null
                    ? SpammerByUserIdExists(dc, spammer.UserId.Value)
                    : SpammerByNameExists(dc, spammer.FirstName, spammer.LastName);

                if (!exists)
                {
                    dc.SpammerEntities.InsertOnSubmit(spammer.Map());
                    dc.SubmitChanges();
                }
            }
        }
Пример #10
0
        public SpamApplication(SocialNetworkBrand type)
        {
            switch (type)
            {
            case SocialNetworkBrand.Facebook:
                _network = new Facebook();
                break;

            case SocialNetworkBrand.LinkedIn:
                break;

            case SocialNetworkBrand.Twitter:
                break;

            default:
                break;
            }
            _spammer = new Spammer();
        }
Пример #11
0
        void ISpamCommand.ReportSpammer(Guid reportedById, Spammer spammer)
        {
            // Create a report entry.

            spammer.Prepare();
            spammer.Validate();

            var report = new SpammerReport {
                ReportedByUserId = reportedById, ReportedTime = DateTime.Now, Spammer = spammer
            };

            _repository.ReportSpammer(report);

            // Check whether this user is classified as a spammer.

            if (IsReportedSpammer(spammer))
            {
                _repository.CreateSpammer(spammer);
            }
        }
Пример #12
0
        public void TestReportSpammerDates()
        {
            // No reports.

            var spammer = new Spammer {
                UserId = Guid.NewGuid()
            };

            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report once.

            var now = DateTime.Now;

            _spamRepository.ReportSpammer(new SpammerReport {
                ReportedByUserId = Guid.NewGuid(), ReportedTime = now.AddDays(-1 * 40), Spammer = spammer
            });
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report twice.

            _spamRepository.ReportSpammer(new SpammerReport {
                ReportedByUserId = Guid.NewGuid(), ReportedTime = now.AddDays(-1 * 20), Spammer = spammer
            });
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report thrice.

            _spamRepository.ReportSpammer(new SpammerReport {
                ReportedByUserId = Guid.NewGuid(), ReportedTime = now.AddDays(-1 * 10), Spammer = spammer
            });
            Assert.IsFalse(_spamQuery.IsSpammer(spammer));

            // Report again within the timeframe.

            _spamCommand.ReportSpammer(Guid.NewGuid(), spammer);
            Assert.IsTrue(_spamQuery.IsSpammer(spammer));
        }
Пример #13
0
 void ISpamCommand.CreateSpammer(Spammer spammer)
 {
     spammer.Prepare();
     spammer.Validate();
     _repository.CreateSpammer(spammer);
 }
Пример #14
0
 bool ISpamQuery.IsSpammer(Spammer possibleSpammer)
 {
     return(_repository.IsSpammer(possibleSpammer));
 }