Пример #1
0
        private void IrcManager_Connected(object sender, EventArgs e)
        {
            lock (MessageLock)
            {
                if (Messages.Length != 0 && Messages[Messages.Length - 1].HighlightType.HasFlag(HighlightType.Disconnected))
                {
                    Messages[Messages.Length - 1] = new Message("reconnected to chat",
                                                                HSLColor.Gray, true)
                    {
                        HighlightTab  = false,
                        HighlightType = HighlightType.Connected,
                    };

                    Task.Run(() => ChatCleared?.Invoke(this, new ChatClearedEventArgs("", "", 0)));

                    return;
                }
            }

            AddMessage(new Message("connected to chat", HSLColor.Gray, true)
            {
                HighlightTab  = false,
                HighlightType = HighlightType.Disconnected,
            });
        }
Пример #2
0
        public void ClearChat(string user, string reason, int duration)
        {
            if (string.IsNullOrWhiteSpace(user))
            {
                ClearChat(false);
                return;
            }

            Monitor.Enter(MessageLock);

            foreach (var msg in Messages)
            {
                if (!msg.HasAnyHighlightType(HighlightType.Whisper) && msg.Username == user)
                {
                    msg.Disabled = true;
                }
            }

            for (var i = Messages.Length - 1; i >= 0; i--)
            {
                var m = Messages[i];

                if (m.ParseTime > DateTime.Now - TimeSpan.FromSeconds(30))
                {
                    if (m.TimeoutUser != user)
                    {
                        continue;
                    }

                    Messages[i] =
                        new Message(
                            $"{user} was timed out for {duration} second{(duration != 1 ? "s" : "")}: \"{reason}\" (multiple times)",
                            HSLColor.Gray, true)
                    {
                        TimeoutUser = user, Id = Messages[i].Id
                    };
                    Monitor.Exit(MessageLock);

                    ChatCleared?.Invoke(this, new ChatClearedEventArgs(user, reason, duration));
                    return;
                }

                break;
            }

            Monitor.Exit(MessageLock);

            AddMessage(
                new Message($"{user} was timed out for {duration} second{(duration != 1 ? "s" : "")}: \"{reason}\"",
                            HSLColor.Gray, true)
            {
                TimeoutUser = user
            });

            ChatCleared?.Invoke(this, new ChatClearedEventArgs(user, reason, duration));
        }
Пример #3
0
 protected virtual void OnChatCleared(string channel)
 {
     ChatCleared?.Invoke(this, new ChatClearedEventArgs(channel));
 }