Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 private void PublishUserTimedoutEvent(UserTimedoutEvent e) => OnUserTimedOut?.Invoke(e);
Esempio n. 3
0
 private void PubSub_OnUserTimedout(object sender, UserTimedoutEvent e)
 {
     e.Source = EventSource.PubSub;
     PublishUserTimedoutEvent(e);
 }
Esempio n. 4
0
 private void Client_OnUserTimedout(object sender, UserTimedoutEvent e)
 {
     e.Source = EventSource.IRC;
     PublishUserTimedoutEvent(e);
 }
Esempio n. 5
0
 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);
 }