From 11e963aa78da62877fe2df95977ae01d0274a17d Mon Sep 17 00:00:00 2001 From: Evgeny Khramtsov Date: Tue, 30 Apr 2019 10:05:06 +0300 Subject: [PATCH] Provide a suggestion when unknown command is detected --- src/ejabberd_ctl.erl | 11 ++++++++--- 1 file 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) -> -- 2.50.1