Get all users involved in threads.

        :param threads: models.Thread: List of threads to check for users
        :return: :class:`models.User` objects
        :rtype: list
        :raises: FBchatException if request failed

def fetchAllUsersFromThreads(self, threads):
        """
        Get all users involved in threads.

        :param threads: models.Thread: List of threads to check for users
        :return: :class:`models.User` objects
        :rtype: list
        :raises: FBchatException if request failed
        """
        users = []
        users_to_fetch = []  # It's more efficient to fetch all users in one request
        for thread in threads:
            if thread.type == ThreadType.USER:
                if thread.uid not in [user.uid for user in users]:
                    users.append(thread)
            elif thread.type == ThreadType.GROUP:
                for user_id in thread.participants:
                    if (
                        user_id not in [user.uid for user in users]
                        and user_id not in users_to_fetch
                    ):
                        users_to_fetch.append(user_id)
        for user_id, user in self.fetchUserInfo(*users_to_fetch).items():
            users.append(user)
        return users