'Get all online players from our cache
Returns:
subscribers (list): Subscribers who are online or
are puppeted by an online player.'

def online(self):

    subs = []
    recache_needed = False
    for obj in self.all():
        from django.core.exceptions import ObjectDoesNotExist
        try:
            if hasattr(obj, 'player'):
                if (not obj.player):
                    continue
                obj = obj.player
            if (not obj.is_connected):
                continue
        except ObjectDoesNotExist:
            recache_needed = True
            continue
        subs.append(obj)
    if recache_needed:
        self._recache()
    return subs
