Help with Shared

Why doesn’t this work? The console writes attempt to call a nil value about the local script.
Local Script:

local Players = game:GetService("Players")
local Player = Players.LocalPlayer
function Click()
	if shared.is_banned_in_team(Player, Team) then
		script.Parent.TextScaled = false
		script.Parent.TextSize = 25
		script.Parent.Text = "Faction blocked for violations"
		return
	end
end

Server Script:

local bans_default = {}
local ban_info = {}


local function shallow_copy(original)
	local copy = {}

	for key, value in pairs(original) do
		copy[key] = value
	end

	return copy
end


for _, Team in pairs(game.Teams:GetChildren()) do
	bans_default[Team.Name] = false
end


shared.ban_in_team = function(Player, Team) : nil
	ban_info[Player.UserId][Team.Name] = true
end


shared.is_banned_in_team = function(Player, Team) : boolean
	print(ban_info)
	return ban_info[Player.UserId][Team.Name]
end


game.Players.PlayerAdded:Connect(function(Player)
	ban_info[Player.UserId] = shallow_copy(bans_default)
	if Player.UserId == -1 then
		print("banning first player in researcher")
		shared.ban_in_team(Player, game.Teams.Researcher)
	end
end)

Just expose the function to the client by creating an function and calling onClientInvoke and remove the plr argument from the client side

The first script is an excerpt. If the player is not in shared.is_banned_in_team then the script continues.

The server-side shared and the client-side shared are different.