Compare 2 List to get a List with active players
Please use conventional naming of properties. Chatters instead of chatters for example.

Also, why do you use for instead of foreach if you use index only to get an element of collection? Use foreach and your code will be much clearer.

First thing that should come into your mind when you encounter many Contains and !Contains calls which need to determine if an element should be added into a collection is to use HashSet. Use HashSet&lt;string&gt; for TotalPlayerNames and TC.Chatters.Viewers.

Main problem of your code is a lot of repeating loops and duplications like TC.chatters.viewers[i]. Please learn programming basics and particularly C# basics.

All your code can be rewritten like:

var viewers = TC.Chatters.Viewers;

TotalPlayers.AddRange(viewers.Where(v =&gt; TotalPlayerNames.Add(v))
                             .Select(v =&gt; new PlayerReal(v)));

var activePlayers = new List&lt;PlayerReal&gt;();
foreach (var player in TotalPlayers)
{
    player.Active = viewers.Contains(player.DisplayName);
    if (player.Active)
        activePlayers.Add(player);
}

ActivePlayers = activePlayers;