degesch: naively implement the unimplemented
This commit is contained in:
parent
310b9c31d3
commit
4016c387f8
121
degesch.c
121
degesch.c
|
@ -4794,6 +4794,8 @@ server_command_check (struct app_context *ctx, const char *action,
|
|||
// as they may want to log buffer lines and use our current nickname
|
||||
|
||||
if (ctx->current_buffer->type == BUFFER_GLOBAL)
|
||||
// XXX: couldn't we just pass the name of the user command here?
|
||||
// That doesn't actually concern the function but rather its callers.
|
||||
buffer_send_error (ctx, ctx->current_buffer,
|
||||
"Can't do this from a global buffer (%s)", action);
|
||||
else
|
||||
|
@ -5498,6 +5500,91 @@ handle_command_list (struct app_context *ctx, char *arguments)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_names (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
if (!server_command_check (ctx, "names", true))
|
||||
return true;
|
||||
|
||||
struct server *s = ctx->current_buffer->server;
|
||||
char *channel_name = try_get_channel (ctx, &arguments);
|
||||
if (!channel_name)
|
||||
irc_send (s, "NAMES");
|
||||
else
|
||||
irc_send (s, "NAMES %s", channel_name);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_who (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
if (!server_command_check (ctx, "who", true))
|
||||
return true;
|
||||
|
||||
struct server *s = ctx->current_buffer->server;
|
||||
if (*arguments)
|
||||
irc_send (s, "WHO %s", arguments);
|
||||
else
|
||||
irc_send (s, "WHO");
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_whois (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
if (!server_command_check (ctx, "whois", true))
|
||||
return true;
|
||||
|
||||
struct server *s = ctx->current_buffer->server;
|
||||
if (*arguments)
|
||||
irc_send (s, "WHOIS %s", arguments);
|
||||
else
|
||||
irc_send (s, "WHOIS");
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_whowas (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
if (!server_command_check (ctx, "whowas", true))
|
||||
return true;
|
||||
|
||||
struct server *s = ctx->current_buffer->server;
|
||||
if (*arguments)
|
||||
irc_send (s, "WHOWAS %s", arguments);
|
||||
else
|
||||
irc_send (s, "WHOWAS");
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_motd (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
if (!server_command_check (ctx, "motd", true))
|
||||
return true;
|
||||
|
||||
struct server *s = ctx->current_buffer->server;
|
||||
if (*arguments)
|
||||
irc_send (s, "MOTD %s", arguments);
|
||||
else
|
||||
irc_send (s, "MOTD");
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_away (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
if (!server_command_check (ctx, "away", true))
|
||||
return true;
|
||||
|
||||
struct server *s = ctx->current_buffer->server;
|
||||
if (*arguments)
|
||||
irc_send (s, "AWAY %s", arguments);
|
||||
else
|
||||
irc_send (s, "AWAY");
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
handle_command_nick (struct app_context *ctx, char *arguments)
|
||||
{
|
||||
|
@ -5526,8 +5613,6 @@ handle_command_quote (struct app_context *ctx, char *arguments)
|
|||
|
||||
static bool handle_command_help (struct app_context *, char *);
|
||||
|
||||
#define NOT_IMPLEMENTED(name) { #name, "(Not implemented)", NULL, NULL },
|
||||
|
||||
static struct command_handler
|
||||
{
|
||||
const char *name;
|
||||
|
@ -5579,6 +5664,8 @@ g_command_handlers[] =
|
|||
"[<channel>[,<channel>...]] [<reason>]",
|
||||
handle_command_cycle },
|
||||
|
||||
// TODO: /op, /voice, /hop
|
||||
|
||||
{ "mode", "Change mode",
|
||||
"[<channel>] [<mode>...]",
|
||||
handle_command_mode },
|
||||
|
@ -5607,12 +5694,28 @@ g_command_handlers[] =
|
|||
{ "list", "List channels and their topic",
|
||||
"[<channel>[,<channel>...]] [<server>]",
|
||||
handle_command_list },
|
||||
NOT_IMPLEMENTED (names)
|
||||
NOT_IMPLEMENTED (who)
|
||||
NOT_IMPLEMENTED (whois)
|
||||
// XXX: for NAMES with no arguments, how do we tell the end of it all?
|
||||
// Maybe we just surf through all channels and process the lists
|
||||
// as they are.
|
||||
{ "names", "List users on channel",
|
||||
"[<channel>[,<channel>...]]",
|
||||
handle_command_names },
|
||||
{ "who", "List users",
|
||||
"[<mask>]",
|
||||
handle_command_who },
|
||||
{ "whois", "Get user information",
|
||||
"<mask>",
|
||||
handle_command_whois },
|
||||
{ "whowas", "Get user information",
|
||||
"<mask>",
|
||||
handle_command_whowas },
|
||||
|
||||
NOT_IMPLEMENTED (motd)
|
||||
NOT_IMPLEMENTED (away)
|
||||
{ "motd", "Get the Message of The Day",
|
||||
NULL,
|
||||
handle_command_motd },
|
||||
{ "away", "Set away status",
|
||||
"[<text>]",
|
||||
handle_command_away },
|
||||
{ "nick", "Change current nick",
|
||||
"<nickname>",
|
||||
handle_command_nick },
|
||||
|
@ -5754,10 +5857,6 @@ process_user_command (struct app_context *ctx, char *command)
|
|||
if (!handler)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"%s: %s", "No such command", name);
|
||||
// TODO: remove once everything is implemented
|
||||
else if (!handler->handler)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"%s: %s", "Not implemented", name);
|
||||
else if (!handler->handler (ctx, command))
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"%s: /%s %s", "Usage", handler->name, handler->usage);
|
||||
|
|
Loading…
Reference in New Issue