fix command syntax

This commit is contained in:
Tilka 2012-04-21 06:08:36 +02:00
parent c525e59fa5
commit 832277f653
2 changed files with 26 additions and 24 deletions

View File

@ -384,32 +384,36 @@ command_parse_cleanup:
void command_get_syntax(struct command_handle* handler, struct cbuffer* buf) void command_get_syntax(struct command_handle* handler, struct cbuffer* buf)
{ {
size_t n = 0; size_t n, arg_count;
int opt = 0; int opt = 0;
char arg_code, last_arg = -1;
cbuf_append_format(buf, "!%s", handler->prefix);
if (handler->args) if (handler->args)
{ {
for (n = 0; n < strlen(handler->args); n++) arg_count = strlen(handler->args);
for (n = 0; n < arg_count; n++)
{ {
if (n > 0) if (!strchr("?+", last_arg))
cbuf_append(buf, " "); cbuf_append(buf, " ");
if (opt) arg_code = handler->args[n];
cbuf_append(buf, "["); switch (arg_code)
switch (handler->args[n])
{ {
case '?': opt = 1; continue; case '?': cbuf_append(buf, "["); opt++; break;
case 'n': cbuf_append(buf, "<nick>"); break; case '+': /* ignore */ break;
case 'u': cbuf_append(buf, "<user>"); break; case 'n': cbuf_append(buf, "<nick>"); break;
case 'i': cbuf_append(buf, "<cid>"); break; case 'u': cbuf_append(buf, "<user>"); break;
case 'a': cbuf_append(buf, "<addr>"); break; case 'i': cbuf_append(buf, "<cid>"); break;
case 'r': cbuf_append(buf, "<addr range>"); break; case 'a': cbuf_append(buf, "<addr>"); break;
case 'm': cbuf_append(buf, "<message>"); break; case 'r': cbuf_append(buf, "<addr range>"); break;
case 'p': cbuf_append(buf, "<password>"); break; case 'm': cbuf_append(buf, "<message>"); break;
case 'p': cbuf_append(buf, "<password>"); break;
case 'C': cbuf_append(buf, "<credentials>"); break; case 'C': cbuf_append(buf, "<credentials>"); break;
case 'c': cbuf_append(buf, "<command>"); break; case 'c': cbuf_append(buf, "<command>"); break;
case 'N': cbuf_append(buf, "<number>"); break; case 'N': cbuf_append(buf, "<number>"); break;
default: LOG_ERROR("unknown argument code '%c'", arg_code);
} }
if (opt) last_arg = arg_code;
opt++;
} }
while (opt--) while (opt--)
cbuf_append(buf, "]"); cbuf_append(buf, "]");
@ -501,14 +505,11 @@ int command_invoke(struct command_base* cbase, struct hub_user* user, const char
ret = send_command_access_denied(cbase, user, cmd->prefix); ret = send_command_access_denied(cbase, user, cmd->prefix);
break; break;
case cmd_status_syntax_error:
ret = send_command_syntax_error(cbase, user);
break;
case cmd_status_missing_args: case cmd_status_missing_args:
ret = send_command_missing_arguments(cbase, user, cmd); ret = send_command_missing_arguments(cbase, user, cmd);
break; break;
case cmd_status_syntax_error:
case cmd_status_arg_nick: case cmd_status_arg_nick:
case cmd_status_arg_cid: case cmd_status_arg_cid:
case cmd_status_arg_address: case cmd_status_arg_address:
@ -579,7 +580,7 @@ static int command_help(struct command_base* cbase, struct hub_user* user, struc
command = data->data.command; command = data->data.command;
if (command_is_available(command, user)) if (command_is_available(command, user))
{ {
cbuf_append_format(buf, "Usage: !%s ", command->prefix); cbuf_append_format(buf, "Usage: ");
command_get_syntax(command, buf); command_get_syntax(command, buf);
cbuf_append_format(buf, "\n%s\n", command->description); cbuf_append_format(buf, "\n%s\n", command->description);
} }

View File

@ -136,7 +136,8 @@ extern struct hub_command_arg_data* hub_command_arg_next(struct hub_command* cmd
* Example: * Example:
* "nia" means "nick cid ip" * "nia" means "nick cid ip"
* "n?p" means "nick [password]" where password is optional. * "n?p" means "nick [password]" where password is optional.
* "?N?N" means two optional integers, this can also be expressed as "?NN". * "?N?N" means zero, one, or two integers.
* "?NN" means zero or two integers.
* "?+m" means an optional string which may contain spaces that would otherwise be split into separate arguments. * "?+m" means an optional string which may contain spaces that would otherwise be split into separate arguments.
*/ */
struct command_handle struct command_handle