Maybe im doing something wrong, but this is something i've got:

local badges = {{2124546429, game.Lighting["ItsTimeToStop"]}};
local function Clone(tool, plr)
	pcall(function()
		tool:Clone().Parent = plr.Backpack;
	end);
	return not not tool;
end
game.Players.PlayerAdded:connect(function(plr)
	for i,v in pairs(badges) do
		if game:GetService("BadgeService"):UserHasBadge(plr.UserId, v[1]) then
			Clone(v[2], plr);
		end
	end
	plr.Changed:connect(function(prop)
		if prop == "Character" then
			for i,v in pairs(badges) do
				if game:GetService("BadgeService"):UserHasBadge(plr.UserId, v[1]) then
					Clone(v[2], plr);
				end
			end
		end
	end)
end)