private void ClearChat(WinterBot sender, TwitchUser user, string clearReason) { bool shouldMessage = !string.IsNullOrEmpty(clearReason); var now = DateTime.Now; TimeoutCount timeout; if (!m_timeouts.TryGetValue(user, out timeout)) { timeout = m_timeouts[user] = new TimeoutCount(now); } else { shouldMessage &= (DateTime.Now > timeout.LastTimeout) && (DateTime.Now - timeout.LastTimeout).TotalMinutes > 60; int curr = timeout.Count; int diff = (int)(now - timeout.LastTimeout).TotalMinutes / 15; if (diff > 0) curr -= diff; if (curr < 0) curr = 0; timeout.Count = curr + 1; } timeout.LastTimeout = now; if (!m_chatOptions.ShouldTimeout(user)) timeout.Count = 1; int duration = 0; switch (timeout.Count) { case 1: case 2: if (shouldMessage) sender.Send(MessageType.Timeout, "{0}: {1} (This is not a timeout.)", user.Name, clearReason); sender.ClearChat(user); break; case 3: duration = 5; sender.Send(MessageType.Timeout, "{0}: {1} ({2} minute timeout.)", user.Name, clearReason, duration); sender.Timeout(user, duration * 60); timeout.LastTimeout = now.AddMinutes(duration); break; case 4: duration = 10; sender.Send(MessageType.Timeout, "{0}: {1} ({2} minute timeout.)", user.Name, clearReason, duration); sender.Timeout(user, duration * 60); timeout.LastTimeout = now.AddMinutes(duration); break; default: Debug.Assert(timeout.Count > 0); sender.Send(MessageType.Timeout, "{0}: {1} (8 hour timeout.)", user.Name, clearReason); sender.Timeout(user, 8 * 60 * 60); timeout.LastTimeout = now.AddHours(8); break; } }