refactor(server/addCommand): use single command handler for aliases

This commit is contained in:
Linden
2023-02-22 01:24:23 +11:00
parent 189a8a451f
commit b47ae9d4fa

View File

@@ -1,6 +1,12 @@
---@class OxCommandParams
---@field name string
---@field help? string
---@field type? 'number' | 'playerId' | 'string'
---@field optional? boolean
---@class OxCommandProperties ---@class OxCommandProperties
---@field help string? ---@field help string?
---@field params { name: string, type?: 'number' | 'playerId' | 'string', help?: string }[] ---@field params OxCommandParams[]
---@field restricted boolean | string | string[]? ---@field restricted boolean | string | string[]?
---@type OxCommandProperties[] ---@type OxCommandProperties[]
@@ -14,12 +20,12 @@ AddEventHandler('playerJoining', function(source)
TriggerClientEvent('chat:addSuggestions', source, registeredCommands) TriggerClientEvent('chat:addSuggestions', source, registeredCommands)
end) end)
---@param commandName string
---@param source number ---@param source number
---@param args table ---@param args table
---@param params table ---@param raw string
---@param params OxCommandParams[]
---@return table? ---@return table?
local function parseArguments(commandName, source, args, params) local function parseArguments(source, args, raw, params)
if not params then return args end if not params then return args end
for i = 1, #params do for i = 1, #params do
@@ -41,7 +47,7 @@ local function parseArguments(commandName, source, args, params)
end end
if not value and (not param.optional or param.optional and arg) then if not value and (not param.optional or param.optional and arg) then
return Citizen.Trace(("^1command '%s' received an invalid %s for argument %s (%s), received '%s'^0"):format(commandName, param.type, i, param.name, arg)) return Citizen.Trace(("^1command '%s' received an invalid %s for argument %s (%s), received '%s'^0"):format(raw:match('/([^ ]+) '), param.type, i, param.name, arg))
end end
arg = value arg = value
@@ -89,17 +95,19 @@ function lib.addCommand(commandName, properties, cb, ...)
local numCommands = #commands local numCommands = #commands
local totalCommands = #registeredCommands local totalCommands = #registeredCommands
local function commandHandler(source, args, raw)
args = parseArguments(source, args, raw, params)
if not args then return end
cb(source, args, raw)
end
for i = 1, numCommands do for i = 1, numCommands do
totalCommands += 1 totalCommands += 1
commandName = commands[i] commandName = commands[i]
RegisterCommand(commandName, function(source, args, raw) RegisterCommand(commandName, commandHandler, restricted and true)
args = parseArguments(commandName, source, args, params)
if not args then return end
cb(source, args, raw)
end, restricted and true)
if restricted then if restricted then
local ace = ('command.%s'):format(commandName) local ace = ('command.%s'):format(commandName)