mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
Multiple fixes for role commands
- Fix server being 'Guest' for commands - Make autocomplete of arguments more intuitive - Fix usage text for commands
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
[exp-commands]
|
[exp-commands]
|
||||||
help=__1__- __2____3__
|
help=__1__- __2____3__
|
||||||
|
usage=/__1__ __2__
|
||||||
aliases=\n Aliaies: __1__
|
aliases=\n Aliaies: __1__
|
||||||
argument=<__1__>
|
argument=<__1__>
|
||||||
optional=[__1__]
|
optional=[__1__]
|
||||||
@@ -10,7 +11,7 @@ error=Command failed to run: __1__
|
|||||||
error-default=Please check you gave the correct arguments.
|
error-default=Please check you gave the correct arguments.
|
||||||
unauthorized=Unauthorized: __1__
|
unauthorized=Unauthorized: __1__
|
||||||
unauthorized-default=Access is denied due to insufficient permissions.
|
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-input=Invalid input: Please ensure everything is formated correctly.
|
||||||
invalid-argument=Invalid argument "__1__"; __2__
|
invalid-argument=Invalid argument "__1__"; __2__
|
||||||
internal-error=Internal Error, Please contact an admin: __1__
|
internal-error=Internal Error, Please contact an admin: __1__
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
[exp-commands]
|
[exp-commands]
|
||||||
help=__1__- __2____3__
|
help=__1__- __2____3__
|
||||||
|
usage=/__1__ __2__
|
||||||
aliases=\n 別名: __1__
|
aliases=\n 別名: __1__
|
||||||
argument=<__1__>
|
argument=<__1__>
|
||||||
optional=[__1__]
|
optional=[__1__]
|
||||||
@@ -10,7 +11,7 @@ error=指令運行失敗: __1__
|
|||||||
error-default=檢查指令參數。
|
error-default=檢查指令參數。
|
||||||
unauthorized=未授權: __1__
|
unauthorized=未授權: __1__
|
||||||
unauthorized-default=由於權限不足,存取被拒絕。
|
unauthorized-default=由於權限不足,存取被拒絕。
|
||||||
invalid-usage=參數數量和用法錯誤,參考: /__1__ __2__
|
invalid-usage=參數數量和用法錯誤,參考: __1__
|
||||||
invalid-input=輸入錯誤: 確保格式正確。
|
invalid-input=輸入錯誤: 確保格式正確。
|
||||||
invalid-argument=參數錯誤 "__1__"; __2__
|
invalid-argument=參數錯誤 "__1__"; __2__
|
||||||
internal-error=內部錯誤,請聯絡管理員: __1__
|
internal-error=內部錯誤,請聯絡管理員: __1__
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
[exp-commands]
|
[exp-commands]
|
||||||
help=__1__- __2____3__
|
help=__1__- __2____3__
|
||||||
|
usage=/__1__ __2__
|
||||||
aliases=\n 別名: __1__
|
aliases=\n 別名: __1__
|
||||||
argument=<__1__>
|
argument=<__1__>
|
||||||
optional=[__1__]
|
optional=[__1__]
|
||||||
@@ -10,7 +11,7 @@ error=指令運行失敗: __1__
|
|||||||
error-default=檢查指令參數。
|
error-default=檢查指令參數。
|
||||||
unauthorized=未授權: __1__
|
unauthorized=未授權: __1__
|
||||||
unauthorized-default=由於權限不足,存取被拒絕。
|
unauthorized-default=由於權限不足,存取被拒絕。
|
||||||
invalid-usage=參數數量和用法錯誤,參考: /__1__ __2__
|
invalid-usage=參數數量和用法錯誤,參考: __1__
|
||||||
invalid-input=輸入錯誤: 確保格式正確。
|
invalid-input=輸入錯誤: 確保格式正確。
|
||||||
invalid-argument=參數錯誤 "__1__"; __2__
|
invalid-argument=參數錯誤 "__1__"; __2__
|
||||||
internal-error=內部錯誤,請聯絡管理員: __1__
|
internal-error=內部錯誤,請聯絡管理員: __1__
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ end
|
|||||||
--- @class Commands.Command
|
--- @class Commands.Command
|
||||||
--- @field name string The name of the command
|
--- @field name string The name of the command
|
||||||
--- @field description LocalisedString The description 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 help_text LocalisedString The full help text for the command
|
||||||
--- @field aliases string[] Aliases that the command will also be registered under
|
--- @field aliases string[] Aliases that the command will also be registered under
|
||||||
--- @field defined_at? string If present then this is an ExpCommand
|
--- @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
|
-- Generates a description to be used
|
||||||
local argument_names = { "" } --- @type LocalisedString
|
local argument_names = { "" } --- @type LocalisedString
|
||||||
local argument_verbose = { "" } --- @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
|
self.help_text = { "exp-commands.help", argument_names, self.description, argument_verbose } --- @type LocalisedString
|
||||||
if next(self.aliases) then
|
if next(self.aliases) then
|
||||||
argument_verbose[2] = { "exp-commands.aliases", table.concat(self.aliases, ", ") }
|
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
|
-- Check the edge case of parameter being nil
|
||||||
if command.min_arg_count > 0 and event.parameter == nil then
|
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 })
|
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
|
end
|
||||||
|
|
||||||
-- Get the arguments for the command, returns nil if there are too many arguments
|
-- 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)
|
local raw_arguments = extract_arguments(event.parameter, command.max_arg_count, command.auto_concat)
|
||||||
if raw_arguments == nil then
|
if raw_arguments == nil then
|
||||||
log_command("Too many arguments", command, player, event.parameter, { minimum = command.min_arg_count, maximum = command.max_arg_count })
|
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
|
end
|
||||||
|
|
||||||
-- Check the minimum number of arguments is fulfilled
|
-- Check the minimum number of arguments is fulfilled
|
||||||
if #raw_arguments < command.min_arg_count then
|
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 })
|
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
|
end
|
||||||
|
|
||||||
-- Parse the arguments, optional arguments will attempt to use a default if provided
|
-- Parse the arguments, optional arguments will attempt to use a default if provided
|
||||||
|
|||||||
@@ -329,7 +329,7 @@ local roles = Roles.get_player_roles(game.player)
|
|||||||
|
|
||||||
]]
|
]]
|
||||||
function Roles.get_player_roles(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 roles = Roles.config.players[player.name] or {}
|
||||||
local default = Roles.config.roles[Roles.config.internal.default]
|
local default = Roles.config.roles[Roles.config.internal.default]
|
||||||
local rtn = { default }
|
local rtn = { default }
|
||||||
|
|||||||
@@ -167,6 +167,24 @@ function ExpUtil.get_function_name(func, raw)
|
|||||||
return "<" .. file_name .. ":" .. func_name .. ">"
|
return "<" .. file_name .. ":" .. func_name .. ">"
|
||||||
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
|
||||||
|
--- @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
|
--- Attempt a simple autocomplete search from a set of options
|
||||||
--- @param options table The table representing the possible options which can be selected
|
--- @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 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)
|
function ExpUtil.auto_complete(options, input, use_key, rtn_key, use_pattern)
|
||||||
input = input:lower()
|
input = input:lower()
|
||||||
local plain = use_pattern ~= true
|
local plain = use_pattern ~= true
|
||||||
if use_key then
|
local found = {} --- @type { length: number, index: number, start: boolean, value: any }
|
||||||
for k, v in pairs(options) do
|
for k, v in pairs(options) do
|
||||||
if k:lower():find(input, nil, plain) then
|
local str = use_key and k or v
|
||||||
if rtn_key then return k else return v end
|
local index = str:lower():find(input, nil, plain)
|
||||||
end
|
if index then
|
||||||
end
|
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
|
else
|
||||||
for k, v in pairs(options) do
|
found.value = v
|
||||||
if v:lower():find(input, nil, plain) then
|
|
||||||
if rtn_key then return k else return v end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
return found.value
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Formats any value into a safe representation, useful with inspect
|
--- Formats any value into a safe representation, useful with inspect
|
||||||
|
|||||||
Reference in New Issue
Block a user