This commit is contained in:
2025-01-26 13:50:46 +09:00
6 changed files with 51 additions and 17 deletions

View File

@@ -1,5 +1,6 @@
[exp-commands]
help=__1__- __2____3__
usage=/__1__ __2__
aliases=\n Aliaies: __1__
argument=<__1__>
optional=[__1__]
@@ -10,7 +11,7 @@ error=Command failed to run: __1__
error-default=Please check you gave the correct arguments.
unauthorized=Unauthorized: __1__
unauthorized-default=Access is denied due to insufficient permissions.
invalid-usage=Wrong number of arguments, usage: /__1__ __2__
invalid-usage=Wrong number of arguments, usage: __1__
invalid-input=Invalid input: Please ensure everything is formated correctly.
invalid-argument=Invalid argument "__1__"; __2__
internal-error=Internal Error, Please contact an admin: __1__

View File

@@ -1,5 +1,6 @@
[exp-commands]
help=__1__- __2____3__
usage=/__1__ __2__
aliases=\n 別名: __1__
argument=<__1__>
optional=[__1__]
@@ -10,7 +11,7 @@ error=指令運行失敗: __1__
error-default=檢查指令參數。
unauthorized=未授權: __1__
unauthorized-default=由於權限不足,存取被拒絕。
invalid-usage=參數數量和用法錯誤,參考: /__1__ __2__
invalid-usage=參數數量和用法錯誤,參考: __1__
invalid-input=輸入錯誤: 確保格式正確。
invalid-argument=參數錯誤 "__1__"; __2__
internal-error=內部錯誤,請聯絡管理員: __1__

View File

@@ -1,5 +1,6 @@
[exp-commands]
help=__1__- __2____3__
usage=/__1__ __2__
aliases=\n 別名: __1__
argument=<__1__>
optional=[__1__]
@@ -10,7 +11,7 @@ error=指令運行失敗: __1__
error-default=檢查指令參數。
unauthorized=未授權: __1__
unauthorized-default=由於權限不足,存取被拒絕。
invalid-usage=參數數量和用法錯誤,參考: /__1__ __2__
invalid-usage=參數數量和用法錯誤,參考: __1__
invalid-input=輸入錯誤: 確保格式正確。
invalid-argument=參數錯誤 "__1__"; __2__
internal-error=內部錯誤,請聯絡管理員: __1__

View File

@@ -106,6 +106,7 @@ end
--- @class Commands.Command
--- @field name string The name of the command
--- @field description LocalisedString The description of the command
--- @field usage LocalisedString The usage of the command
--- @field help_text LocalisedString The full help text for the command
--- @field aliases string[] Aliases that the command will also be registered under
--- @field defined_at? string If present then this is an ExpCommand
@@ -536,6 +537,7 @@ function Commands._prototype:register(callback)
-- Generates a description to be used
local argument_names = { "" } --- @type LocalisedString
local argument_verbose = { "" } --- @type LocalisedString
self.usage = { "exp-commands.usage", self.name, argument_names }
self.help_text = { "exp-commands.help", argument_names, self.description, argument_verbose } --- @type LocalisedString
if next(self.aliases) then
argument_verbose[2] = { "exp-commands.aliases", table.concat(self.aliases, ", ") }
@@ -670,20 +672,20 @@ function Commands._event_handler(event)
-- Check the edge case of parameter being nil
if command.min_arg_count > 0 and event.parameter == nil then
log_command("Too few arguments", command, player, event.parameter, { minimum = command.min_arg_count, maximum = command.max_arg_count })
return Commands.error{ "exp-commands.invalid-usage", command.name, command.description }
return Commands.error{ "exp-commands.invalid-usage", command.usage }
end
-- Get the arguments for the command, returns nil if there are too many arguments
local raw_arguments = extract_arguments(event.parameter, command.max_arg_count, command.auto_concat)
if raw_arguments == nil then
log_command("Too many arguments", command, player, event.parameter, { minimum = command.min_arg_count, maximum = command.max_arg_count })
return Commands.error{ "exp-commands.invalid-usage", command.name, command.description }
return Commands.error{ "exp-commands.invalid-usage", command.usage }
end
-- Check the minimum number of arguments is fulfilled
if #raw_arguments < command.min_arg_count then
log_command("Too few arguments", command, player, event.parameter, { minimum = command.min_arg_count, maximum = command.max_arg_count })
return Commands.error{ "exp-commands.invalid-usage", command.name, command.description }
return Commands.error{ "exp-commands.invalid-usage", command.usage }
end
-- Parse the arguments, optional arguments will attempt to use a default if provided

View File

@@ -329,7 +329,7 @@ local roles = Roles.get_player_roles(game.player)
]]
function Roles.get_player_roles(player)
if not player then return { Roles.config.roles[Roles.config.internal.root] } end
if not player or player.index == 0 then return { Roles.config.roles[Roles.config.internal.root] } end
local roles = Roles.config.players[player.name] or {}
local default = Roles.config.roles[Roles.config.internal.default]
local rtn = { default }

View File

@@ -167,6 +167,24 @@ function ExpUtil.get_function_name(func, raw)
return "<" .. file_name .. ":" .. func_name .. ">"
end
--- Attempt a simple autocomplete search from a set of options
--- @param options table The table representing the possible options which can be selected
--- @param input string The user input string which should be matched to an option
--- @param use_key boolean? When true the keys will be searched, when false the values will be searched
--- @param rtn_key boolean? When true the selected key will be returned, when false the selected value will be returned
--- @param use_pattern boolean? When true the input will be treated as a lua pattern string
--- @return any # The selected key or value which first matches the input text
function ExpUtil.auto_complete_first(options, input, use_key, rtn_key, use_pattern)
input = input:lower()
local plain = use_pattern ~= true
for k, v in pairs(options) do
local str = use_key and k or v
if str:lower():find(input, nil, plain) then
if rtn_key then return k else return v end
end
end
end
--- Attempt a simple autocomplete search from a set of options
--- @param options table The table representing the possible options which can be selected
--- @param input string The user input string which should be matched to an option
@@ -177,19 +195,30 @@ end
function ExpUtil.auto_complete(options, input, use_key, rtn_key, use_pattern)
input = input:lower()
local plain = use_pattern ~= true
if use_key then
for k, v in pairs(options) do
if k:lower():find(input, nil, plain) then
if rtn_key then return k else return v end
end
end
else
for k, v in pairs(options) do
if v:lower():find(input, nil, plain) then
if rtn_key then return k else return v end
local found = {} --- @type { length: number, index: number, start: boolean, value: any }
for k, v in pairs(options) do
local str = use_key and k or v
local index = str:lower():find(input, nil, plain)
if index then
local length = #str
local start = index == 1 or str:sub(index - 1, index - 1) == " "
if found.value == nil -- None found yet
or not found.start and start -- Prefer matches at the start of words
or found.length > length -- Prefer shorter matches
or found.index > index -- Prefer earlier matches
then
found.length = length
found.index = index
found.start = start
if rtn_key then
found.value = k
else
found.value = v
end
end
end
end
return found.value
end
--- Formats any value into a safe representation, useful with inspect