From 5755bd50ac805ccbea47839097ee9e8f605f4020 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sat, 20 Mar 2010 23:42:21 +0100 Subject: [PATCH] Add IRC commands /omode and /forcejoin (patch #7126) --- ChangeLog | 1 + src/plugins/irc/irc-command.c | 71 +++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/ChangeLog b/ChangeLog index 07d8b026a..55e3212cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -61,6 +61,7 @@ Version 0.3.2 (under dev!) * irc: add option irc.look.item_channel_modes_hide_key to hide channel key in channel modes (bug #23961) * irc: add option irc.look.item_nick_prefix +* irc: add commands /omode and /forcejoin (patch #7126) * irc: add command /map * irc: add missing commands 276, 343 * irc: fix compilation with old GnuTLS versions (bug #28723) diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index 40594f014..d9b4e0489 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -1366,6 +1366,34 @@ irc_command_disconnect (void *data, struct t_gui_buffer *buffer, int argc, return WEECHAT_RC_OK; } +/* + * irc_command_forcejoin: forces a user to join channel(s) + * (this is the equivalent to /sajoin on some IRCd's) + */ + +int +irc_command_forcejoin (void *data, struct t_gui_buffer *buffer, int argc, + char **argv, char **argv_eol) +{ + IRC_BUFFER_GET_SERVER_CHANNEL(buffer); + IRC_COMMAND_CHECK_SERVER("forcejoin", 1); + + /* make C compiler happy */ + (void) data; + + if (argc > 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_OUTQUEUE_PRIO_HIGH, + "FORCEJOIN %s %s", argv[1], argv_eol[2]); + } + else + { + IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "forcejoin"); + } + + return WEECHAT_RC_OK; +} + /* * irc_command_halfop: give half operator privileges to nickname(s) */ @@ -2552,6 +2580,34 @@ irc_command_notice (void *data, struct t_gui_buffer *buffer, int argc, return WEECHAT_RC_OK; } +/* + * irc_command_omode: change mode on channel, without having operator status + * (this is the equivalent to /sajoin on some IRCd's) + */ + +int +irc_command_omode (void *data, struct t_gui_buffer *buffer, int argc, + char **argv, char **argv_eol) +{ + IRC_BUFFER_GET_SERVER_CHANNEL(buffer); + IRC_COMMAND_CHECK_SERVER("omode", 1); + + /* make C compiler happy */ + (void) data; + + if (argc > 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_OUTQUEUE_PRIO_HIGH, + "OMODE %s %s", argv[1], argv_eol[2]); + } + else + { + IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "omode"); + } + + return WEECHAT_RC_OK; +} + /* * irc_command_op: give operator privileges to nickname(s) */ @@ -4276,6 +4332,12 @@ irc_command_init () "-all" " || %(irc_servers)|%*", &irc_command_disconnect, NULL); + weechat_hook_command ("forcejoin", + N_("forces a user to join channel(s)"), + N_("nickname channel[,channel]"), + N_("nickname: nickname\n" + " channel: channel name"), + "%(nicks) %(irc_server_channels)", &irc_command_forcejoin, NULL); weechat_hook_command ("halfop", N_("give half channel operator status to " "nickname(s)"), @@ -4456,6 +4518,15 @@ irc_command_init () "nickname: user to send notice to\n" " text: text to send"), "%(nicks) %-", &irc_command_notice, NULL); + weechat_hook_command ("omode", + N_("change mode on channel, without having operator " + "status"), + /* TRANSLATORS: "channel" and "mode" are arguments + for command, translate them separately */ + N_("channel mode"), + N_("channel: channel name\n" + " mode: mode for channel"), + "%(irc_server_channels)", &irc_command_omode, NULL); weechat_hook_command ("op", N_("give channel operator status to nickname(s)"), N_("nickname [nickname]"),