Ok so I’m using your method of using the same script.
However, with this code:
local dss = game:GetService("DataStoreService")
local cashDataStore = dss:GetOrderedDataStore("TotalCash3")
local crystalsDataStore = dss:GetOrderedDataStore("TotalCrystals3")
local cocoaDataStore = dss:GetOrderedDataStore("TotalCocoa3")
local levelDataStore = dss:GetOrderedDataStore("LevelLeaderboard3")
local moltenDataStore = dss:GetOrderedDataStore("MoltenCocoa3")
local http = game:GetService("HttpService")
local webhook = "https://discordapp.com/api/webhooks/728418584778375180/OkG0XcvD0svq8UrnmZjZyFpsFwZTajddAh4BK5WDeSyB9Zwal_Wz9jSnnQI_klt7IgPY"
local formatter = require(game.ReplicatedStorage.Modules.AbbreviationModule)
local ranksNumber = 100
local padding = 0.01
local function setColor(rank, label)
if rank == 1 then
label.TextColor3 = Color3.fromRGB(0,255,255)
elseif rank == 2 then
label.TextColor3 = Color3.fromRGB(203, 156, 50)
elseif rank == 3 then
label.TextColor3 = Color3.fromRGB(126, 130, 148)
elseif rank > 3 then
label.TextColor3 = Color3.fromRGB(255,255,255)
end
end
local function Update(dataStore, holder)
local success, err = pcall(function()
local Data = dataStore:GetSortedAsync(false, ranksNumber)
local page = Data:GetCurrentPage()
for Rank, data in ipairs(page) do
local succ, result = pcall(game.Players.GetNameFromUserIdAsync, game.Players, tonumber(data.key))
result = succ and result or "[Failed to load]"
local Name = result
local val = data.value
local isOnLeaderboard = false
for i, v in pairs(holder:GetChildren()) do
if v.Player.Text == Name then
isOnLeaderboard = true
break
end
end
if val and isOnLeaderboard == false then
local newFrame = game.ReplicatedStorage:WaitForChild("Template"):Clone()
newFrame.Player.Text = Name
newFrame.Rebirths.Text = formatter:format(val)
newFrame.Rank.Text = "#"..Rank
setColor(Rank, newFrame.Rank)
newFrame.Position = UDim2.new(0,0,newFrame.Position.Y.Scale + (0.01 * (#holder:GetChildren())),0)
newFrame.Parent = holder
end
end
end)
if not success then
warn(tostring(dataStore)..": "..err)
end
end
local function SetAsync(dataStore, player, value)
local success, err = pcall(function()
dataStore:SetAsync(player.UserId, value)
end)
if not success then
warn(err)
end
end
local function MainUpdate()
Update(cashDataStore, workspace.TotalCashLeaderboard.SurfaceGui.Holder)
Update(crystalsDataStore, workspace.TotalCrystalsLeaderboard.SurfaceGui.Holder)
Update(cocoaDataStore, workspace.TotalCocoaLeaderboard.SurfaceGui.Holder)
Update(moltenDataStore, workspace.MoltenLeaderboard.SurfaceGui.Holder)
Update(levelDataStore, workspace.LevelLeaderboard.SurfaceGui.Holder)
end
local function sendToDisc(dataStore)
local success, err = pcall(function()
local data = dataStore:GetSortedAsync(false, 10)
local page = data:GetCurrentPage()
for Rank, Data in ipairs(page) do
local succ, result = pcall(game.Players.GetNameFromUserIdAsync, game.Players, tostring(Data.key))
result = succ and result or "[Failed to load]"
local payload = http:JSONEncode({
content = "**#"..Rank.."** - "..result,
username = tostring(dataStore)
})
http:PostAsync(webhook, payload)
wait(1)
end
end)
if success then
print(tostring(dataStore)..": Success!")
else
warn(tostring(dataStore)..": "..err)
end
end
local date = os.date("!*t",os.time())
local CurrentSec = date.min * 60 + date.sec
local AlignMin = 1
local AlignMinSecs = 60 * AlignMin
local TimeToWait = AlignMinSecs - CurrentSec
print(TimeToWait)
for i = 1, math.floor(60 / AlignMin) - 1 do
if TimeToWait < 0 then
TimeToWait = (i + 1) * AlignMinSecs - CurrentSec
print(TimeToWait)
else warn("TimeToWait is not under 0") break
end
end
wait(TimeToWait)
while true do
coroutine.wrap(sendToDisc)(cashDataStore)
coroutine.wrap(sendToDisc)(crystalsDataStore)
coroutine.wrap(sendToDisc)(cocoaDataStore)
coroutine.wrap(sendToDisc)(levelDataStore)
coroutine.wrap(sendToDisc)(moltenDataStore)
for _, plr in pairs(game.Players:GetPlayers()) do
SetAsync(cashDataStore, plr, plr.TotalStats:WaitForChild("TotalCash").Value)
SetAsync(crystalsDataStore, plr, plr.TotalStats:WaitForChild("TotalCrystals").Value)
SetAsync(cocoaDataStore, plr, plr.TotalStats:WaitForChild("TotalCocoa").Value)
SetAsync(moltenDataStore, plr, plr.TotalStats:WaitForChild("TotalMolten").Value)
SetAsync(levelDataStore, plr, plr:WaitForChild("EXP").Level.Value)
end
for _, frame in pairs(workspace.TotalCashLeaderboard.SurfaceGui.Holder:GetChildren()) do
frame:Destroy()
end
for _, crystalFrame in pairs(workspace.TotalCrystalsLeaderboard.SurfaceGui.Holder:GetChildren()) do
crystalFrame:Destroy()
end
for _, cocoaFrame in pairs(workspace.TotalCocoaLeaderboard.SurfaceGui.Holder:GetChildren()) do
cocoaFrame:Destroy()
end
for _, levelFrame in pairs(workspace.LevelLeaderboard.SurfaceGui.Holder:GetChildren()) do
levelFrame:Destroy()
end
coroutine.wrap(MainUpdate)()
print("UPDATED")
wait(AlignMinSecs)
end
This happened:
HTTP 429 (Too Many Requests)
Of course I’m using 1 minute to test (i’m going to make it do it every 30 minutes and the leaderboards update every 5 minutes), but I need to find a way to make the loop keep continuing like this: