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); }