diff options
author | Evgeny Khramtsov <ekhramtsov@process-one.net> | 2019-04-30 10:05:06 +0300 |
---|---|---|
committer | Evgeny Khramtsov <ekhramtsov@process-one.net> | 2019-04-30 10:05:06 +0300 |
commit | 11e963aa78da62877fe2df95977ae01d0274a17d (patch) | |
tree | b22b56f1831fc56c1150090b90247bce5ce90e53 | |
parent | Rename ejabberd_config:similar_option/2 -> misc:best_match/2 (diff) |
Provide a suggestion when unknown command is detected
-rw-r--r-- | src/ejabberd_ctl.erl | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ejabberd_ctl.erl b/src/ejabberd_ctl.erl index 73a98827c..9cc4f83c0 100644 --- a/src/ejabberd_ctl.erl +++ b/src/ejabberd_ctl.erl @@ -319,13 +319,18 @@ try_run_ctp(Args, Auth, AccessCommands, Version) -> %% @spec (Args::[string()], Auth, AccessCommands) -> string() | integer() | {string(), integer()} try_call_command(Args, Auth, AccessCommands, Version) -> try call_command(Args, Auth, AccessCommands, Version) of - {error, command_unknown} -> - {io_lib:format("Error: command ~p not known.", [hd(Args)]), ?STATUS_ERROR}; {error, wrong_command_arguments} -> {"Error: wrong arguments", ?STATUS_ERROR}; Res -> Res catch + throw:{error, unknown_command} -> + KnownCommands = [Cmd || {Cmd, _, _} <- ejabberd_commands:list_commands(Version)], + UnknownCommand = list_to_atom(hd(Args)), + {io_lib:format( + "Error: unknown command '~s'. Did you mean '~s'?", + [hd(Args), misc:best_match(UnknownCommand, KnownCommands)]), + ?STATUS_ERROR}; throw:Error -> {io_lib:format("~p", [Error]), ?STATUS_ERROR}; ?EX_RULE(A, Why, Stack) -> @@ -340,7 +345,7 @@ call_command([CmdString | Args], Auth, _AccessCommands, Version) -> Command = list_to_atom(binary_to_list(CmdStringU)), case ejabberd_commands:get_command_format(Command, Auth, Version) of {error, command_unknown} -> - {error, command_unknown}; + throw({error, unknown_command}); {ArgsFormat, ResultFormat} -> case (catch format_args(Args, ArgsFormat)) of ArgsFormatted when is_list(ArgsFormatted) -> |