// Process a given message and pass it down the correct channels
    private void OnChatMsg(TwitchIRC.TwitchMessage message)
    {
        var cmd      = message.Message.Split(' ');
        var nickname = cmd[0].Split('!')[0].Substring(1);
        var mode     = cmd[1];
        var channel  = cmd[2].Substring(1);
        var len      = cmd[0].Length + cmd[1].Length + cmd[2].Length + 4;
        var chat     = message.Message.Substring(len);

        switch (mode)
        {
        case "NOTICE":
            // Compatability with real Twitch System messages
            if (nickname == "tmi.twitch.tv")
            {
                nickname = "Twitch";
                if (chat.StartsWith("Error"))
                {
                    channel = "System-Red";
                }
                else if (chat == "Login unsuccessful")
                {
                    channel = "System-Red";
                }
            }
            // Convert Notice to Name Color
            switch (channel)
            {
            case "System-Green":
                AddMsg(nickname, TwitchIRC.ColorToHex(new Color(0f, 1f, 0f)), chat);
                break;

            case "System-Red":
                AddMsg(nickname, TwitchIRC.ColorToHex(new Color(1f, 0f, 0f)), chat);
                break;

            case "System-Blue":
                AddMsg(nickname, TwitchIRC.ColorToHex(new Color(0f, 0.4f, 1f)), chat);
                break;

            case "System-Yellow":
                AddMsg(nickname, TwitchIRC.ColorToHex(new Color(1f, 1f, 0f)), chat);
                break;

            case "System-Purple":
                AddMsg(nickname, TwitchIRC.ColorToHex(new Color(1f, 0f, 1f)), chat);
                break;

            default:
                AddMsg(nickname, TwitchIRC.ColorToHex(new Color(1f, 1f, 1f)), chat);
                break;
            }
            break;

        case "PRIVMSG":
            AddMsg(FirstLetterToUpper(nickname), TwitchIRC.GetUserColor(nickname), chat, message.Emotes);
            PlayMessageSound();
            break;
        }
    }