Esempio n. 1
0
        public async Task CheckBanAction(RuleExceedCheckCommand command)
        {
            var suspensionsForUser = await suspensionRepository.GetSuspensionsForUser(command.TwitchUsername).ConfigureAwait(false);

            if (suspensionsForUser.Count == 0)
            {
                return;
            }

            var userReport = new UserReport(command.TwitchUsername, suspensionsForUser);
            var channels   = await channelRepository.GetChannels().ConfigureAwait(false);

            foreach (var channel in channels.Where(x => x.ChannelRules.Count > 0))
            {
                foreach (var rule in channel.ChannelRules.Where(x => x.ActionOnTrigger == ChannelRuleAction.Ban))
                {
                    if (userReport.Exceeds(rule))
                    {
                        if (channel.SystemIsModerator && channel.ShouldListen)
                        {
                            await SendBanCommandFor(command.TwitchUsername, channel.ChannelName, rule.RuleName).ConfigureAwait(false);
                        }
                        else
                        {
                            logger.LogInformation("Channel Rule triggered ban, but channel does not have moderation / listening enabled for: {arg}", channel.ChannelName);
                        }
                    }
                }
            }
        }
        private async Task PublishSuspensionAuditedEvent(Suspension suspension)
        {
            var ruleCheckCommand = new RuleExceedCheckCommand
            {
                TwitchUsername  = suspension.Username,
                ChannelOfOrigin = suspension.ChannelOfOrigin
            };

            await messageDispatcher.Send(ruleCheckCommand).ConfigureAwait(false);
        }
        public async Task InitiateManualRuleCheck(string channelName, string twitchUsername, IApplicationContext context)
        {
            var channel = await channelRepository.GetChannel(channelName).ConfigureAwait(false);

            if (!context.HaveAccessTo(channel))
            {
                return;
            }

            var command = new RuleExceedCheckCommand {
                ChannelOfOrigin = channelName, TwitchUsername = twitchUsername
            };
            await messageDispatcher.Send(command).ConfigureAwait(false);
        }