From c946c46f1fd3c4b3c24136a111839577629823a2 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Sun, 19 Apr 2015 21:34:11 +0200 Subject: degesch: implement /join and /part --- degesch.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/degesch.c b/degesch.c index e017e8b..5bb6b7d 100644 --- a/degesch.c +++ b/degesch.c @@ -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, "", "" }, -- cgit v1.2.3-70-g09d2