How to make an invisible players script?

I want to make an invisible players script. How it works is:
You can make people that aren’t friends invisible
You can make everyone else but you invisible
You can make yourself invisible

(from a GUI)
I know how to implement functionality into GUIs, I just don’t know how to make a script like this. Can someone help?

--variables

local players = game:GetService("Players")
local localplayer = players.LocalPlayer
local character = localplayer.Character or localplayer.CharacterAdded:Wait()


--local player only

for _, part in ipairs(character:GetDescendants()) do
	if part:IsA("BasePart") then
		part.Transparency = 1
	end
end


--all players but local player

for _, player in ipairs(players:GetPlayers()) do
	if player ~= localplayer then
		local char = player.Character
		for _, part in ipairs(char:GetDescendants()) do
			if part:IsA("BasePart") then
				part.Transparency = 1
			end
		end
	end
end


--all friends of local player in server

local friendpages = players:GetFriendsAsync(localplayer.UserId)

for _, page in ipairs(friendpages:GetCurrentPage()) do
	while task.wait() do
		for _, item in ipairs(page) do
			local friend = players:FindFirstChild(item.Username)
			if friend then
				local friendchar = friend.Character
				for _, part in ipairs(friendchar:GetDescendants()) do
					if part:IsA("BasePart") then
						part.Transparency = 1
					end
				end
			end
			if page.IsFinished then
				break
			end
			page:AdvanceToNextPageAsync()
		end
	end
end