On spawn, most of the time, the donation board thinks that the player donated 5 robux even though there is no "5 Robux" donation button and the player didn't donate anything? What? What is happening here? Also sometimes the leaderboard would say the player didn't donate anything if didn't donate but when it updates it says the player donated 5 robux, but anyways here are the scripts:

The leaderstats (or hiddenstats) script: (ServerScriptService)

local DataStoreService = game:GetService("DataStoreService")
local DonationDataStore = DataStoreService:GetDataStore("Donation")

game.Players.PlayerAdded:Connect(function(player)
	local hiddenstats = Instance.new("Folder") 
	hiddenstats.Name = "hiddenstats" 
	hiddenstats.Parent = player

	local Donation = Instance.new("IntValue", hiddenstats)
	Donation.Name = "Donation"
	Donation.Value = DonationDataStore:GetAsync(player.UserId) or 0

end)

game.Players.PlayerRemoving:Connect(function(Player)
	DonationDataStore:SetAsync(Player.UserId, Player.hiddenstats.Donation.Value)
end)

The donation board script: (StarterGui)

local lbData = game:GetService("DataStoreService"):GetOrderedDataStore("Board")

function AddCommas(num)
	return tostring(math.floor(num)):reverse():gsub("(%d%d%d)","%1,"):gsub(",(%-?)$","%1"):reverse()
end

function Update()
	local frames = script.Parent.ScrollingFrame:GetChildren()
	for v,v in pairs(frames) do
		if v:IsA("Frame") then
			v:Destroy()
		end
	end
	for _,plr in next, game:GetService("Players"):GetPlayers() do
		pcall(function()
			lbData:UpdateAsync(plr.UserId, function() return plr:FindFirstChild("hiddenstats"):WaitForChild("Donation").Value end) 
		end)
	end

	local data = lbData:GetSortedAsync(false,10)
	local page = data:GetCurrentPage()

	for rank, info in next, page do
		local frame = script.Parent.Sample:Clone()
		frame.Visible = true
		local plrName = game:GetService("Players"):GetNameFromUserIdAsync(info.key)		
		frame:WaitForChild("Place").Text = "#"..rank
		if rank == 1 then
			print("gold")
			frame.BackgroundColor3 = Color3.new(0.941176, 0.737255, 0)
		elseif rank == 2 then
			print("silver")
			frame.BackgroundColor3 = Color3.new(0.784314, 0.784314, 0.784314)
		elseif rank == 3 then
			print("bronze")
			frame.BackgroundColor3 = Color3.new(0.764706, 0.560784, 0.313725)
		else
			print("white")
			frame.BackgroundColor3 = Color3.new(1, 1, 1)
		end
		frame.Username.Text = plrName
		frame.Amount.Text = AddCommas(info.value)
		frame.Visible = true
		frame.Parent = script.Parent.ScrollingFrame
	end
end

while true do
	Update()
	wait(15)
end

The robux button script: (10 robux button as an example) (LocalScript) (StarterGui)

local TService = game:GetService("TweenService")
local Part = script.Parent
local TInfo = TweenInfo.new(
	2,
	Enum.EasingStyle.Sine,
	Enum.EasingDirection.InOut,
	math.huge,
	true,
	0
)
local ButtonInfo = {
	ImageColor3 = Color3.fromRGB(99, 122, 255) 
}
local Tween = TService:Create(Part, TInfo, ButtonInfo)

Tween:Play()

local Player = game.Players.LocalPlayer
local MarketPlaceService = game:GetService("MarketplaceService")
local PurchaseButton = script.Parent.Parent

PurchaseButton.MouseButton1Click:Connect(function()
	MarketPlaceService:PromptProductPurchase(Player, 1193184814)
end)

Process Receipt script: (ServerScriptService)

local MarketplaceService = game:GetService("MarketplaceService")
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")

local purchaseHistoryStore = DataStoreService:GetDataStore("PurchaseHistory")

local productFunctions = {}

productFunctions[1193184814] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 10
		return true
	end

end

productFunctions[1193184916] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 25
		return true
	end

end

productFunctions[1193185042] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 50
		return true
	end

end

productFunctions[1193185371] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 100
		return true
	end

end

productFunctions[1193185511] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 200
		return true
	end

end

productFunctions[1193185552] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 500
		return true
	end

end

productFunctions[1193185580] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 1000
		return true
	end

end

productFunctions[1193185622] = function(receipt, player)
	local stats = player:FindFirstChild("hiddenstats")
	local donation = stats and stats:FindFirstChild("Donation")
	if donation then
		donation.Value = donation.Value + 2000
		return true
	end

end

local function processReceipt(receiptInfo)

	local playerProductKey = receiptInfo.PlayerId .. "_" .. receiptInfo.PurchaseId
	local purchased = false
	local success, errorMessage = pcall(function()
		purchased = purchaseHistoryStore:GetAsync(playerProductKey)
	end)

	if success and purchased then
		return Enum.ProductPurchaseDecision.PurchaseGranted
	elseif not success then
		error("Data store error:" .. errorMessage)
	end

	local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
	if not player then
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end

	local handler = productFunctions[receiptInfo.ProductId]

	local success, result = pcall(handler, receiptInfo, player)
	if not success or not result then
		warn("Error occurred while processing a product purchase")
		print("\nProductId:", receiptInfo.ProductId)
		print("\nPlayer:", player)
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end

	local success, errorMessage = pcall(function()
		purchaseHistoryStore:SetAsync(playerProductKey, true)
	end)
	if not success then
		error("Cannot save purchase data: " .. errorMessage)
	end

	return Enum.ProductPurchaseDecision.PurchaseGranted
end


MarketplaceService.ProcessReceipt = processReceipt

For anyone thinking that there is some code that adds 5 donation points, I tried my hardest to find it and there are NO signs of it.