Skip to main content

Leaderboard

Leaderboard allows you to create a leaderboard that can be used to store and retrieve data for a specific service key.

For example:

local Leaderboard = require(game:GetService("ReplicatedStorage").Leaderboard);
local MoneyLeaderboard = Leaderboard.new({
	Daily = "DailyMoneyKey1",
	Weekly = "WeeklyMoneyKey1"
});

Types

Leaderboard

type Leaderboard = () → Leaderboard

LeaderboardType

type LeaderboardType = "Hourly" | "Daily" | "Weekly" | "Monthly" | "Yearly" | "AllTime" | string;

LeaderboardArguments

interface LeaderboardArguments {
UpdatedSignal<{AllTopData}>
BoardUpdatedSignal<{
Data{TopData}
}>
_serviceKeystring
_boards{[LeaderboardType]Board}
_valueQueueValueQueueType
_isSaving{[LeaderboardType]boolean}
_lastSavednumber
_isFetchingboolean
_lastFetchnumber
_loggerLogger.Logger?
}

OperationType

type OperationType = "Set" | "Increment"

The type of operation to perform on the leaderboard value.

  • "Set": Sets the value to the specified amount or result of the transform function
  • "Increment": Adds the specified amount or result of the transform function to the current value

Board

interface Board {
GetRecords(
selfBoard,
amountnumber,
sortDirectionstring
) → Promise.TypedPromise<{TopData}>
Update(
selfBoard,
userIdnumber,
valuenumber | (number) → (number)
) → boolean
Destroy(selfBoard) → ()
}

Object

interface Object {
IncrementValues(
selfLeaderboard,
boardTypes{LeaderboardType} | string,
userIdnumber,
amountnumber
) → ()
SetValues(
selfLeaderboard,
boardTypes{LeaderboardType} | string,
userIdnumber,
valuenumber | (number) → (number)
) → ()
UpdateStoreValues(
selfLeaderboard,
boardTypes{LeaderboardType} | string,
userIdnumber,
valuenumber | (number) → (number)
) → ()
GetRecords(
selfLeaderboard,
boardTypes{LeaderboardType} | string,
optionalRange{[LeaderboardType | string]number} | number,
sortDirectionstring
) → Promise.TypedPromise<{AllTopData}>
SaveValues(
selfLeaderboard,
boardTypeLeaderboardType?
) → Promise.TypedPromise<number>
Destroy(selfLeaderboard) → ()
new(
leaderboardTypesLeaderboardTypeArgument,
debugModeboolean?
) → Leaderboard
}

BoardConfig

interface BoardConfig {
Namestring
Automationboolean?
MaxRecordsnumber?
DisplayCountnumber?
SaveIntervalnumber?
RefreshIntervalnumber?
Shardsnumber?
}

Properties

Updated

This item is read only and cannot be modified. Read Only
Leaderboard.Updated: Signal<{AllTopData}>

Fired when the leaderboard is updated.

BoardUpdated

This item is read only and cannot be modified. Read Only
Leaderboard.BoardUpdated: Signal<{
Data{TopData}
}>

Fired when a specific board is updated.

Functions

new

Leaderboard.new(
leaderboardTypesLeaderboardTypeArgument,
debugModeboolean?
) → Leaderboard

Types

type LeaderboardTypeArgument = {[LeaderboardType]BoardConfig | string | {number & string}}

Constructs a new leaderboard.

SaveValues

This is a yielding function. When called, it will pause the Lua thread that called the function until a result is ready to be returned, without interrupting other scripts. Yields
Leaderboard:SaveValues(
boardTypeLeaderboardType?--

Optional board type to filter by. If nil, processes all boards.

) → Promise.TypedPromise<number>--

Returns the number of items processed

Processes all items in the value queue for the specified board type (or all boards if nil). Continues processing until the queue is empty for that board type.

GetRecords

This is a yielding function. When called, it will pause the Lua thread that called the function until a result is ready to be returned, without interrupting other scripts. Yields
Leaderboard:GetRecords(
boardTypes{LeaderboardType} | "All",
optionalRange{[string]number} | number,
sortDirectionstring
) → Promise.TypedPromise<{AllTopData}>

Types

interface TopData {
Ranknumber
UserIdnumber
Valuenumber
Usernamestring
DisplayNamestring
}

interface AllTopData {
Data{TopData}
}

Gets the data for all the top boards (should only be used every 90-120 seconds)

IncrementValues

Leaderboard:IncrementValues(
boardTypes{LeaderboardType} | "All",
userIdnumber,
amountnumber
) → ()

Increments the queued value(s)

Increments the queued value(s)

SetValues

Leaderboard:SetValues(
boardTypes{LeaderboardType} | "All",
userIdnumber,
valuenumber | (number) → (number)
) → ()

Updates the queued value(s)

Updates the queued value(s)

UpdateStoreValues

This is a yielding function. When called, it will pause the Lua thread that called the function until a result is ready to be returned, without interrupting other scripts. Yields
Leaderboard:UpdateStoreValues(
boardTypes{LeaderboardType} | "All",
userIdnumber,
valuenumber | (number) → (number)
) → ()

Updates the actual store value(s) (should only be used every 90-120 seconds)

Updates the actual store value(s) (should only be used every 90-120 seconds)

Destroy

Leaderboard:Destroy() → ()

Destroys the leaderboard

Show raw api
{
    "functions": [
        {
            "name": "new",
            "desc": "Constructs a new leaderboard.",
            "params": [
                {
                    "name": "leaderboardTypes",
                    "desc": "",
                    "lua_type": "LeaderboardTypeArgument"
                },
                {
                    "name": "debugMode",
                    "desc": "",
                    "lua_type": "boolean?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "Leaderboard"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 236,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "SaveValues",
            "desc": "Processes all items in the value queue for the specified board type (or all boards if nil).\nContinues processing until the queue is empty for that board type.",
            "params": [
                {
                    "name": "boardType",
                    "desc": "Optional board type to filter by. If nil, processes all boards.",
                    "lua_type": "LeaderboardType?"
                }
            ],
            "returns": [
                {
                    "desc": "Returns the number of items processed",
                    "lua_type": "Promise.TypedPromise<number>"
                }
            ],
            "function_type": "method",
            "yields": true,
            "source": {
                "line": 437,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "GetRecords",
            "desc": "Gets the data for all the top boards (should only be used every 90-120 seconds)",
            "params": [
                {
                    "name": "boardTypes",
                    "desc": "",
                    "lua_type": "{LeaderboardType} | \"All\""
                },
                {
                    "name": "optionalRange",
                    "desc": "",
                    "lua_type": "{[string]: number} | number"
                },
                {
                    "name": "sortDirection",
                    "desc": "",
                    "lua_type": "string"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "Promise.TypedPromise<{AllTopData}>"
                }
            ],
            "function_type": "method",
            "yields": true,
            "source": {
                "line": 584,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "IncrementValues",
            "desc": "Increments the queued value(s)\n\nIncrements the queued value(s)",
            "params": [
                {
                    "name": "boardTypes",
                    "desc": "",
                    "lua_type": "{LeaderboardType} | \"All\""
                },
                {
                    "name": "userId",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "amount",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [],
            "function_type": "method",
            "source": {
                "line": 643,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "SetValues",
            "desc": "Updates the queued value(s)\n\nUpdates the queued value(s)",
            "params": [
                {
                    "name": "boardTypes",
                    "desc": "",
                    "lua_type": "{LeaderboardType} | \"All\""
                },
                {
                    "name": "userId",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "value",
                    "desc": "",
                    "lua_type": "number | (number) -> (number)"
                }
            ],
            "returns": [],
            "function_type": "method",
            "source": {
                "line": 684,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "UpdateStoreValues",
            "desc": "Updates the actual store value(s) (should only be used every 90-120 seconds)\n\nUpdates the actual store value(s) (should only be used every 90-120 seconds)",
            "params": [
                {
                    "name": "boardTypes",
                    "desc": "",
                    "lua_type": "{LeaderboardType} | \"All\""
                },
                {
                    "name": "userId",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "value",
                    "desc": "",
                    "lua_type": "number | (number) -> (number)"
                }
            ],
            "returns": [],
            "function_type": "method",
            "yields": true,
            "source": {
                "line": 723,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "Destroy",
            "desc": "Destroys the leaderboard",
            "params": [],
            "returns": [],
            "function_type": "method",
            "source": {
                "line": 749,
                "path": "lib/Leaderboard/init.luau"
            }
        }
    ],
    "properties": [
        {
            "name": "Updated",
            "desc": "Fired when the leaderboard is updated.",
            "lua_type": "Signal<{AllTopData}>",
            "readonly": true,
            "source": {
                "line": 186,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "BoardUpdated",
            "desc": "Fired when a specific board is updated.",
            "lua_type": "Signal<{Type: LeaderboardType, Data: {TopData}}>",
            "readonly": true,
            "source": {
                "line": 193,
                "path": "lib/Leaderboard/init.luau"
            }
        }
    ],
    "types": [
        {
            "name": "TopData",
            "desc": "",
            "fields": [
                {
                    "name": "Rank",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "UserId",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "Value",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "Username",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "DisplayName",
                    "lua_type": "string",
                    "desc": ""
                }
            ],
            "source": {
                "line": 37,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "AllTopData",
            "desc": "",
            "fields": [
                {
                    "name": "Type",
                    "lua_type": "LeaderboardType",
                    "desc": ""
                },
                {
                    "name": "Data",
                    "lua_type": "{TopData}",
                    "desc": ""
                }
            ],
            "source": {
                "line": 51,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "Leaderboard",
            "desc": "",
            "lua_type": "() -> Leaderboard",
            "source": {
                "line": 61,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "LeaderboardType",
            "desc": "",
            "lua_type": "\"Hourly\" | \"Daily\" | \"Weekly\" | \"Monthly\" | \"Yearly\" | \"AllTime\" | string;",
            "source": {
                "line": 67,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "LeaderboardTypeArgument",
            "desc": "",
            "lua_type": "{[LeaderboardType]: BoardConfig | string | {number & string}}",
            "source": {
                "line": 73,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "LeaderboardArguments",
            "desc": "",
            "fields": [
                {
                    "name": "Updated",
                    "lua_type": "Signal<{AllTopData}>",
                    "desc": ""
                },
                {
                    "name": "BoardUpdated",
                    "lua_type": "Signal<{Type: LeaderboardType, Data: {TopData}}>",
                    "desc": ""
                },
                {
                    "name": "_serviceKey",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "_types",
                    "lua_type": "LeaderboardTypeArgument",
                    "desc": ""
                },
                {
                    "name": "_boards",
                    "lua_type": "{[LeaderboardType]: Board}",
                    "desc": ""
                },
                {
                    "name": "_valueQueue",
                    "lua_type": "ValueQueueType",
                    "desc": ""
                },
                {
                    "name": "_isSaving",
                    "lua_type": "{[LeaderboardType]: boolean}",
                    "desc": ""
                },
                {
                    "name": "_lastSaved",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "_isFetching",
                    "lua_type": "boolean",
                    "desc": ""
                },
                {
                    "name": "_lastFetch",
                    "lua_type": "number",
                    "desc": ""
                },
                {
                    "name": "_logger",
                    "lua_type": "Logger.Logger?",
                    "desc": ""
                }
            ],
            "source": {
                "line": 92,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "OperationType",
            "desc": "The type of operation to perform on the leaderboard value.\n- \"Set\": Sets the value to the specified amount or result of the transform function\n- \"Increment\": Adds the specified amount or result of the transform function to the current value",
            "lua_type": "\"Set\" | \"Increment\"",
            "source": {
                "line": 115,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "Board",
            "desc": "",
            "fields": [
                {
                    "name": "GetRecords",
                    "lua_type": "(self: Board, amount: number, sortDirection: string) -> Promise.TypedPromise<{TopData}>",
                    "desc": ""
                },
                {
                    "name": "Update",
                    "lua_type": "(self: Board, userId: number, value: number | (number) -> (number)) -> boolean",
                    "desc": ""
                },
                {
                    "name": "Destroy",
                    "lua_type": "(self: Board) -> ()",
                    "desc": ""
                }
            ],
            "source": {
                "line": 124,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "Object",
            "desc": "",
            "fields": [
                {
                    "name": "IncrementValues",
                    "lua_type": "(self: Leaderboard, boardTypes: {LeaderboardType} | string, userId: number, amount: number) -> ()",
                    "desc": ""
                },
                {
                    "name": "SetValues",
                    "lua_type": "(self: Leaderboard, boardTypes: {LeaderboardType} | string, userId: number, value: number | (number) -> (number)) -> ()",
                    "desc": ""
                },
                {
                    "name": "UpdateStoreValues",
                    "lua_type": "(self: Leaderboard, boardTypes: {LeaderboardType} | string, userId: number, value: number | (number) -> (number)) -> ()",
                    "desc": ""
                },
                {
                    "name": "GetRecords",
                    "lua_type": "(self: Leaderboard, boardTypes: {LeaderboardType} | string, optionalRange: {[LeaderboardType | string]: number} | number, sortDirection: string) -> Promise.TypedPromise<{AllTopData}>",
                    "desc": ""
                },
                {
                    "name": "SaveValues",
                    "lua_type": "(self: Leaderboard, boardType: LeaderboardType?) -> Promise.TypedPromise<number>",
                    "desc": ""
                },
                {
                    "name": "Destroy",
                    "lua_type": "(self: Leaderboard) -> ()",
                    "desc": ""
                },
                {
                    "name": "new",
                    "lua_type": "(leaderboardTypes: LeaderboardTypeArgument, debugMode: boolean?) -> Leaderboard",
                    "desc": ""
                }
            ],
            "source": {
                "line": 145,
                "path": "lib/Leaderboard/init.luau"
            }
        },
        {
            "name": "BoardConfig",
            "desc": "",
            "fields": [
                {
                    "name": "Name",
                    "lua_type": "string",
                    "desc": ""
                },
                {
                    "name": "Automation",
                    "lua_type": "boolean?",
                    "desc": ""
                },
                {
                    "name": "MaxRecords",
                    "lua_type": "number?",
                    "desc": ""
                },
                {
                    "name": "DisplayCount",
                    "lua_type": "number?",
                    "desc": ""
                },
                {
                    "name": "SaveInterval",
                    "lua_type": "number?",
                    "desc": ""
                },
                {
                    "name": "RefreshInterval",
                    "lua_type": "number?",
                    "desc": ""
                },
                {
                    "name": "Shards",
                    "lua_type": "number?",
                    "desc": ""
                }
            ],
            "source": {
                "line": 169,
                "path": "lib/Leaderboard/init.luau"
            }
        }
    ],
    "name": "Leaderboard",
    "desc": "Leaderboard allows you to create a leaderboard that can be used to store and retrieve data for a specific service key.\n\nFor example:\n```lua\nlocal Leaderboard = require(game:GetService(\"ReplicatedStorage\").Leaderboard);\nlocal MoneyLeaderboard = Leaderboard.new({\n\tDaily = \"DailyMoneyKey1\",\n\tWeekly = \"WeeklyMoneyKey1\"\n});\n```",
    "source": {
        "line": 210,
        "path": "lib/Leaderboard/init.luau"
    }
}