summaryrefslogtreecommitdiff
path: root/src/irc
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2005-03-16 21:49:49 +0000
committerSebastien Helleu <flashcode@flashtux.org>2005-03-16 21:49:49 +0000
commit0b78294f1a745484d1756d3f0757127587b2be8b (patch)
treedd6ce2b16c7336388a2660592ea4b6510030b186 /src/irc
parent2580406aa703588753008f81a49e03087fdcc5aa (diff)
downloadweechat-0b78294f1a745484d1756d3f0757127587b2be8b.zip
Added /halfop & /dehalfop commands, fixed halfop display bug in nicklist
Diffstat (limited to 'src/irc')
-rw-r--r--src/irc/irc-commands.c6
-rw-r--r--src/irc/irc-recv.c35
-rw-r--r--src/irc/irc-send.c53
-rw-r--r--src/irc/irc.h2
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 *);