private async Task CompositeChatClient_OnUserTimedOut(UserTimedoutEvent userTimedoutEvent) { if (userTimedoutEvent.TimeoutDuration <= suspensionLogSettings.MinimumDurationForTimeouts) { return; } var timeOfSuspension = datetimeProvider.UtcNow; var chatlogForUser = await chatRepository.GetMessagesFor(userTimedoutEvent.Username, userTimedoutEvent.Channel, suspensionLogSettings.TimeoutChatLogRecordTime, timeOfSuspension).ConfigureAwait(false); var userForChannel = await userRepository.GetByTwitchUsername(userTimedoutEvent.Channel).ConfigureAwait(false); var isUnconfirmedSource = userForChannel == null; //// This is probably going to be followed shortly by better event. //if (!isUnconfirmedSource && userTimedoutEvent.Source == EventSource.IRC) // return; var suspension = Suspension.CreateTimeout(userTimedoutEvent.Username, userTimedoutEvent.Channel, userTimedoutEvent.TimeoutDuration, timeOfSuspension, chatlogForUser, isUnconfirmedSource); if (suspension.InvalidSuspension) { await suspensionRepository.Save(suspension).ConfigureAwait(false); return; } var messageDispatcher = serviceProvider.GetService(typeof(IMessageDispatcher)) as IMessageDispatcher; await MarkActiveSuspensionsForUserAsOverwritten(userTimedoutEvent.Username, userTimedoutEvent.Channel, $"{suspension.SuspensionType} of duration: {suspension.Duration} seconds.", timeOfSuspension, messageDispatcher).ConfigureAwait(false); var analysedSuspension = await dataAnalyser.AttemptToTagSuspension(suspension).ConfigureAwait(false); await SaveAndPublishNewSuspension(analysedSuspension, messageDispatcher).ConfigureAwait(false); }
private void PublishUserTimedoutEvent(UserTimedoutEvent e) => OnUserTimedOut?.Invoke(e);
private void PubSub_OnUserTimedout(object sender, UserTimedoutEvent e) { e.Source = EventSource.PubSub; PublishUserTimedoutEvent(e); }
private void Client_OnUserTimedout(object sender, UserTimedoutEvent e) { e.Source = EventSource.IRC; PublishUserTimedoutEvent(e); }
private void NewConnection_OnUserTimedout(object sender, UserTimedoutEvent e) { logger.LogInformation("Received Timedout on {arg}, issued by {arg2} in channel {arg3} for {arg4} seconds", e.Username, e.TimedoutBy, e.Channel, e.TimeoutDuration); OnUserTimedout?.Invoke(this, e); }