I am trying to make a player list GUI that shows a list of buttons and in each button is a player that is in the server. However, when a player is kicked or leaves the game, their button is not removed, despite the script recognizing that a player has been removed. What am I doing wrong?

Server:

playerAdded = game.ReplicatedStorage.PlayerAdded
playerRemoved = game.ReplicatedStorage.PlayerRemoved

game.Players.PlayerAdded:Connect(function(player) 
	playerAdded:FireAllClients(player) 
	print("Player Added")
end)

game.Players.PlayerRemoving:Connect(function(player)
	playerRemoved:FireAllClients(player)
	print("Player Removed")
end)

Client:

playerAdded = game.ReplicatedStorage.PlayerAdded
playerRemoved = game.ReplicatedStorage.PlayerRemoved
y = 0.178
frame = game.Players.LocalPlayer:WaitForChild("PlayerGui"):WaitForChild("AskAdmin").Players
children = frame.Buttons:GetChildren()
buttonSize = UDim2.new(1, 0, 0.178, 0)
local list

local function button(name, xPos, yPos, parent, textColor, backgroundColor)
	local button = Instance.new("TextButton")
	button.Parent = parent
	button.Text = name
	button.Position = UDim2.new(xPos, 0, yPos, 0)
	button.TextScaled = true
	button.Name = name
	button.Size = buttonSize
	button.BackgroundColor3 = backgroundColor

	return button
end

local function destroyAll(list)
	for i = 1, #list do
		list[i]:Destroy()
	end
end

local function createList(player)	
	destroyAll(frame.Buttons:GetChildren())
	
	y = 0.178
	frame.CanvasSize = UDim2.new(0, 0, 0, 0)
	
	wait(0.5)
	list = game.Players:GetPlayers()
	for i = 1, #list do
		button(list[i].Name, 0, y, frame.Buttons, Color3.fromRGB(0, 0, 0), Color3.fromRGB(255, 255, 255))
		y = y + 0.178
		frame.CanvasSize = UDim2.new(0, 0, y, 0)
	end
end

playerAdded.OnClientEvent:Connect(createList)
playerRemoved.OnClientEvent:Connect(createList)