degesch: implement /join and /part

This commit is contained in:
Přemysl Eric Janouch 2015-04-19 21:34:11 +02:00
parent 392c2e7a5f
commit c946c46f1f
1 changed files with 77 additions and 2 deletions

View File

@ -1987,6 +1987,77 @@ handle_command_quit (struct app_context *ctx, char *arguments)
initiate_quit (ctx);
}
static void
handle_command_join (struct app_context *ctx, char *arguments)
{
if (ctx->current_buffer->type == BUFFER_GLOBAL)
{
buffer_send_error (ctx, ctx->current_buffer,
"Can't join from a global buffer");
return;
}
if (ctx->irc_fd == -1)
{
buffer_send_error (ctx, ctx->server_buffer, "Not connected");
return;
}
if (*arguments)
// TODO: check if the arguments are in the form of
// "channel(,channel)* key(,key)*"
irc_send (ctx, "JOIN %s", arguments);
else
{
if (ctx->current_buffer->type != BUFFER_CHANNEL)
buffer_send_error (ctx, ctx->current_buffer,
"%s: %s", "Can't join",
"no argument given and this buffer is not a channel");
// TODO: have a better way of checking if we're on the channel
else if (ctx->current_buffer->channel->users)
buffer_send_error (ctx, ctx->current_buffer,
"%s: %s", "Can't join",
"you already are on the channel");
else
// TODO: send the key if known
irc_send (ctx, "JOIN %s", ctx->current_buffer->channel->name);
}
}
static void
handle_command_part (struct app_context *ctx, char *arguments)
{
if (ctx->current_buffer->type == BUFFER_GLOBAL)
{
buffer_send_error (ctx, ctx->current_buffer,
"Can't part from a global buffer");
return;
}
if (ctx->irc_fd == -1)
{
buffer_send_error (ctx, ctx->server_buffer, "Not connected");
return;
}
if (*arguments)
// TODO: check if the arguments are in the form of "channel(,channel)*"
irc_send (ctx, "PART %s", arguments);
else
{
if (ctx->current_buffer->type != BUFFER_CHANNEL)
buffer_send_error (ctx, ctx->current_buffer,
"%s: %s", "Can't part",
"no argument given and this buffer is not a channel");
// TODO: have a better way of checking if we're on the channel
else if (!ctx->current_buffer->channel->users)
buffer_send_error (ctx, ctx->current_buffer,
"%s: %s", "Can't join", "you're not on the channel");
else
irc_send (ctx, "PART %s", ctx->current_buffer->channel->name);
}
}
static void
handle_command_quote (struct app_context *ctx, char *arguments)
{
@ -2014,9 +2085,13 @@ g_command_handlers[] =
{ "notice", NULL, "", "" },
{ "ctcp", NULL, "", "" },
{ "me", NULL, "", "" },
#endif
{ "join", NULL, "", "" },
{ "part", NULL, "", "" },
{ "join", handle_command_join, "Join channels",
"[channel...]" },
{ "part", handle_command_part, "Leave channels",
"[channel...]" },
#if 0
{ "cycle", NULL, "", "" },
{ "mode", NULL, "", "" },