diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2005-03-16 21:49:49 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2005-03-16 21:49:49 +0000 |
commit | 0b78294f1a745484d1756d3f0757127587b2be8b (patch) | |
tree | dd6ce2b16c7336388a2660592ea4b6510030b186 /src/irc | |
parent | 2580406aa703588753008f81a49e03087fdcc5aa (diff) | |
download | weechat-0b78294f1a745484d1756d3f0757127587b2be8b.zip |
Added /halfop & /dehalfop commands, fixed halfop display bug in nicklist
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/irc-commands.c | 6 | ||||
-rw-r--r-- | src/irc/irc-recv.c | 35 | ||||
-rw-r--r-- | src/irc/irc-send.c | 53 | ||||
-rw-r--r-- | src/irc/irc.h | 2 |
4 files changed, 96 insertions, 0 deletions
diff --git a/src/irc/irc-commands.c b/src/irc/irc-commands.c index b490e0f02..f17592e74 100644 --- a/src/irc/irc-commands.c +++ b/src/irc/irc-commands.c @@ -54,6 +54,9 @@ t_irc_command irc_commands[] = "nickname: nickname to send file or chat\n" "file: filename (on local host)"), 1, MAX_ARGS, 1, NULL, irc_cmd_send_dcc, NULL }, + { "dehalfop", N_("removes half channel operator status from nickname(s)"), + N_("nickname [nickname]"), "", + 1, MAX_ARGS, 1, irc_cmd_send_dehalfop, NULL, NULL }, { "deop", N_("removes channel operator status from nickname(s)"), N_("nickname [nickname]"), "", 1, MAX_ARGS, 1, irc_cmd_send_deop, NULL, NULL }, @@ -64,6 +67,9 @@ t_irc_command irc_commands[] = "", "", 0, 0, 1, NULL, irc_cmd_send_die, NULL }, { "error", N_("error received from IRC server"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_error }, + { "halfop", N_("gives half channel operator status to nickname(s)"), + N_("nickname [nickname]"), "", + 1, MAX_ARGS, 1, irc_cmd_send_halfop, NULL, NULL }, { "info", N_("get information describing the server"), N_("[target]"), N_("target: server name"), diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c index 57eac32b4..eb0976a36 100644 --- a/src/irc/irc-recv.c +++ b/src/irc/irc-recv.c @@ -391,6 +391,41 @@ void irc_get_channel_modes (t_irc_channel *ptr_channel, char *channel_name, parm = pos; } break; + case 'h': + pos = NULL; + if (parm) + { + pos = strchr (parm, ' '); + if (pos) + pos[0] = '\0'; + } + if (nick_host) + irc_display_mode (ptr_channel->buffer, + channel_name, set_flag, "o", nick_host, + (set_flag == '+') ? + _("gives half channel operator status to") : + _("removes half channel operator status from"), + (parm) ? parm : NULL); + if (parm) + { + ptr_nick = nick_search (ptr_channel, parm); + if (ptr_nick) + { + ptr_nick->is_halfop = (set_flag == '+') ? 1 : 0; + nick_resort (ptr_channel, ptr_nick); + gui_draw_buffer_nick (ptr_channel->buffer, 1); + } + } + + /* look for next parameter */ + if (parm && pos) + { + pos++; + while (pos[0] == ' ') + pos++; + parm = pos; + } + break; case 'i': if (nick_host) irc_display_mode (ptr_channel->buffer, diff --git a/src/irc/irc-send.c b/src/irc/irc-send.c index d4ca36f1d..25d3e5aea 100644 --- a/src/irc/irc-send.c +++ b/src/irc/irc-send.c @@ -402,6 +402,32 @@ irc_cmd_send_dcc (t_irc_server *server, char *arguments) } /* + * irc_cmd_send_dehalfop: remove half operator privileges from nickname(s) + */ + +int +irc_cmd_send_dehalfop (t_irc_server *server, int argc, char **argv) +{ + int i; + + if (BUFFER_IS_CHANNEL(gui_current_window->buffer)) + { + for (i = 0; i < argc; i++) + server_sendf (server, "MODE %s -h %s\r\n", + CHANNEL(gui_current_window->buffer)->name, + argv[i]); + } + else + { + irc_display_prefix (server->buffer, PREFIX_ERROR); + gui_printf_nolog (server->buffer, + _("%s \"%s\" command can only be executed in a channel window\n"), + WEECHAT_ERROR, "dehalfop"); + } + return 0; +} + +/* * irc_cmd_send_deop: remove operator privileges from nickname(s) */ @@ -469,6 +495,33 @@ irc_cmd_send_die (t_irc_server *server, char *arguments) } /* + * irc_cmd_send_halfop: give half operator privileges to nickname(s) + */ + +int +irc_cmd_send_halfop (t_irc_server *server, int argc, char **argv) +{ + int i; + + if (BUFFER_IS_CHANNEL(gui_current_window->buffer)) + { + for (i = 0; i < argc; i++) + server_sendf (server, "MODE %s +h %s\r\n", + CHANNEL(gui_current_window->buffer)->name, + argv[i]); + } + else + { + irc_display_prefix (server->buffer, PREFIX_ERROR); + gui_printf_nolog (server->buffer, + _("%s \"%s\" command can only be executed in a channel window\n"), + WEECHAT_ERROR, "halfop"); + return -1; + } + return 0; +} + +/* * irc_cmd_send_info: get information describing the server */ diff --git a/src/irc/irc.h b/src/irc/irc.h index d9b3d979f..34362a611 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -322,9 +322,11 @@ extern int irc_cmd_send_away (t_irc_server *, char *); extern int irc_cmd_send_ban (t_irc_server *, char *); extern int irc_cmd_send_ctcp (t_irc_server *, char *); extern int irc_cmd_send_dcc (t_irc_server *, char *); +extern int irc_cmd_send_dehalfop (t_irc_server *, int, char **); extern int irc_cmd_send_deop (t_irc_server *, int, char **); extern int irc_cmd_send_devoice (t_irc_server *, int, char **); extern int irc_cmd_send_die (t_irc_server *, char *); +extern int irc_cmd_send_halfop (t_irc_server *, int, char **); extern int irc_cmd_send_info (t_irc_server *, char *); extern int irc_cmd_send_invite (t_irc_server *, int, char **); extern int irc_cmd_send_ison (t_irc_server *, char *); |