diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index d63197de7..025faab0e 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -374,36 +374,37 @@ irc_command_allchan (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) - { - current_server = 0; - ptr_exclude_channels = NULL; - ptr_command = argv_eol[1]; - for (i = 1; i < argc; i++) - { - if (weechat_strcasecmp (argv[i], "-current") == 0) - { - current_server = 1; - ptr_command = argv_eol[i + 1]; - } - else if (weechat_strncasecmp (argv[i], "-exclude=", 9) == 0) - { - ptr_exclude_channels = argv[i] + 9; - ptr_command = argv_eol[i + 1]; - } - else - break; - } + if (argc < 2) + return WEECHAT_RC_ERROR; - if (ptr_command && ptr_command[0]) + current_server = 0; + ptr_exclude_channels = NULL; + ptr_command = argv_eol[1]; + for (i = 1; i < argc; i++) + { + if (weechat_strcasecmp (argv[i], "-current") == 0) { - weechat_buffer_set (NULL, "hotlist", "-"); - irc_command_exec_all_channels ((current_server) ? ptr_server : NULL, - ptr_exclude_channels, - ptr_command); - weechat_buffer_set (NULL, "hotlist", "+"); + current_server = 1; + ptr_command = argv_eol[i + 1]; } + else if (weechat_strncasecmp (argv[i], "-exclude=", 9) == 0) + { + ptr_exclude_channels = argv[i] + 9; + ptr_command = argv_eol[i + 1]; + } + else + break; } + + if (ptr_command && ptr_command[0]) + { + weechat_buffer_set (NULL, "hotlist", "-"); + irc_command_exec_all_channels ((current_server) ? ptr_server : NULL, + ptr_exclude_channels, + ptr_command); + weechat_buffer_set (NULL, "hotlist", "+"); + } + return WEECHAT_RC_OK; } @@ -493,28 +494,29 @@ irc_command_allserv (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) buffer; - if (argc > 1) - { - ptr_exclude_servers = NULL; - ptr_command = argv_eol[1]; - for (i = 1; i < argc; i++) - { - if (weechat_strncasecmp (argv[i], "-exclude=", 9) == 0) - { - ptr_exclude_servers = argv[i] + 9; - ptr_command = argv_eol[i + 1]; - } - else - break; - } + if (argc < 2) + return WEECHAT_RC_ERROR; - if (ptr_command && ptr_command[0]) + ptr_exclude_servers = NULL; + ptr_command = argv_eol[1]; + for (i = 1; i < argc; i++) + { + if (weechat_strncasecmp (argv[i], "-exclude=", 9) == 0) { - weechat_buffer_set (NULL, "hotlist", "-"); - irc_command_exec_all_servers (ptr_exclude_servers, ptr_command); - weechat_buffer_set (NULL, "hotlist", "+"); + ptr_exclude_servers = argv[i] + 9; + ptr_command = argv_eol[i + 1]; } + else + break; } + + if (ptr_command && ptr_command[0]) + { + weechat_buffer_set (NULL, "hotlist", "-"); + irc_command_exec_all_servers (ptr_exclude_servers, ptr_command); + weechat_buffer_set (NULL, "hotlist", "+"); + } + return WEECHAT_RC_OK; } @@ -800,14 +802,11 @@ irc_command_away (void *data, struct t_gui_buffer *buffer, int argc, } weechat_buffer_set (NULL, "hotlist", "+"); } - else + else if (ptr_server) { - if (ptr_server) - { - weechat_buffer_set (NULL, "hotlist", "-"); - irc_command_away_server (ptr_server, argv_eol[1], 1); - weechat_buffer_set (NULL, "hotlist", "+"); - } + weechat_buffer_set (NULL, "hotlist", "-"); + irc_command_away_server (ptr_server, argv_eol[1], 1); + weechat_buffer_set (NULL, "hotlist", "+"); } return WEECHAT_RC_OK; @@ -1184,14 +1183,11 @@ irc_command_connect (void *data, struct t_gui_buffer *buffer, int argc, } } - if (!connect_ok) - return WEECHAT_RC_ERROR; - - return WEECHAT_RC_OK; + return (connect_ok) ? WEECHAT_RC_OK : WEECHAT_RC_ERROR; } /* - * Callback for command "/ctcp": sends a ctcp message. + * Callback for command "/ctcp": sends a CTCP message. */ int @@ -1207,65 +1203,65 @@ irc_command_ctcp (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_cmd = strdup (argv[2]); + if (!irc_cmd) + return WEECHAT_RC_ERROR; + + weechat_string_toupper (irc_cmd); + + if ((weechat_strcasecmp (argv[2], "ping") == 0) && !argv_eol[3]) { - irc_cmd = strdup (argv[2]); - if (!irc_cmd) - return WEECHAT_RC_ERROR; - - weechat_string_toupper (irc_cmd); - - if ((weechat_strcasecmp (argv[2], "ping") == 0) && !argv_eol[3]) - { - gettimeofday (&tv, NULL); - snprintf (str_time, sizeof (str_time), "%ld %ld", - (long)tv.tv_sec, (long)tv.tv_usec); - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PRIVMSG %s :\01PING %s\01", - argv[1], str_time); - weechat_printf (irc_msgbuffer_get_target_buffer (ptr_server, - argv[1], - NULL, "ctcp", - NULL), - _("%sCTCP query to %s%s%s: %s%s%s%s%s"), - weechat_prefix ("network"), - irc_nick_color_for_message (ptr_server, - NULL, argv[1]), - argv[1], - IRC_COLOR_RESET, - IRC_COLOR_CHAT_CHANNEL, - irc_cmd, - IRC_COLOR_RESET, - " ", - str_time); - } - else - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PRIVMSG %s :\01%s%s%s\01", - argv[1], - irc_cmd, - (argv_eol[3]) ? " " : "", - (argv_eol[3]) ? argv_eol[3] : ""); - weechat_printf (irc_msgbuffer_get_target_buffer (ptr_server, - argv[1], - NULL, "ctcp", - NULL), - _("%sCTCP query to %s%s%s: %s%s%s%s%s"), - weechat_prefix ("network"), - irc_nick_color_for_message (ptr_server, NULL, - argv[1]), - argv[1], - IRC_COLOR_RESET, - IRC_COLOR_CHAT_CHANNEL, - irc_cmd, - IRC_COLOR_RESET, - (argv_eol[3]) ? " " : "", - (argv_eol[3]) ? argv_eol[3] : ""); - } - - free (irc_cmd); + gettimeofday (&tv, NULL); + snprintf (str_time, sizeof (str_time), "%ld %ld", + (long)tv.tv_sec, (long)tv.tv_usec); + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PRIVMSG %s :\01PING %s\01", + argv[1], str_time); + weechat_printf (irc_msgbuffer_get_target_buffer (ptr_server, + argv[1], + NULL, "ctcp", + NULL), + _("%sCTCP query to %s%s%s: %s%s%s%s%s"), + weechat_prefix ("network"), + irc_nick_color_for_message (ptr_server, + NULL, argv[1]), + argv[1], + IRC_COLOR_RESET, + IRC_COLOR_CHAT_CHANNEL, + irc_cmd, + IRC_COLOR_RESET, + " ", + str_time); } + else + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PRIVMSG %s :\01%s%s%s\01", + argv[1], + irc_cmd, + (argv_eol[3]) ? " " : "", + (argv_eol[3]) ? argv_eol[3] : ""); + weechat_printf (irc_msgbuffer_get_target_buffer (ptr_server, + argv[1], + NULL, "ctcp", + NULL), + _("%sCTCP query to %s%s%s: %s%s%s%s%s"), + weechat_prefix ("network"), + irc_nick_color_for_message (ptr_server, NULL, + argv[1]), + argv[1], + IRC_COLOR_RESET, + IRC_COLOR_CHAT_CHANNEL, + irc_cmd, + IRC_COLOR_RESET, + (argv_eol[3]) ? " " : "", + (argv_eol[3]) ? argv_eol[3] : ""); + } + + free (irc_cmd); return WEECHAT_RC_OK; } @@ -1395,97 +1391,84 @@ irc_command_dcc (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) - { - /* use the local interface, from the server socket */ - memset (&addr, 0, sizeof (addr)); - length = sizeof (addr); - getsockname (ptr_server->sock, (struct sockaddr *)&addr, &length); - rc = getnameinfo ((struct sockaddr *)&addr, length, str_address, - sizeof (str_address), NULL, 0, NI_NUMERICHOST); - if (rc != 0) - { - weechat_printf (ptr_server->buffer, - _("%s%s: unable to resolve local address of server " - "socket: error %d %s"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - rc, gai_strerror (rc)); - return WEECHAT_RC_OK; - } + if (argc < 3) + return WEECHAT_RC_ERROR; - /* DCC SEND file */ - if (weechat_strcasecmp (argv[1], "send") == 0) - { - if (argc < 4) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "dcc send"); - } - infolist = weechat_infolist_new (); - if (infolist) - { - item = weechat_infolist_new_item (infolist); - if (item) - { - weechat_infolist_new_var_string (item, "plugin_name", weechat_plugin->name); - weechat_infolist_new_var_string (item, "plugin_id", ptr_server->name); - weechat_infolist_new_var_string (item, "type_string", "file_send"); - weechat_infolist_new_var_string (item, "protocol_string", "dcc"); - weechat_infolist_new_var_string (item, "remote_nick", argv[2]); - weechat_infolist_new_var_string (item, "local_nick", ptr_server->nick); - weechat_infolist_new_var_string (item, "filename", argv_eol[3]); - weechat_infolist_new_var_string (item, "local_address", str_address); - weechat_infolist_new_var_integer (item, "socket", ptr_server->sock); - (void) weechat_hook_signal_send ("xfer_add", - WEECHAT_HOOK_SIGNAL_POINTER, - infolist); - } - weechat_infolist_free (infolist); - } - } - /* DCC CHAT */ - else if (weechat_strcasecmp (argv[1], "chat") == 0) - { - if (argc < 3) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "dcc chat"); - } - infolist = weechat_infolist_new (); - if (infolist) - { - item = weechat_infolist_new_item (infolist); - if (item) - { - weechat_infolist_new_var_string (item, "plugin_name", weechat_plugin->name); - weechat_infolist_new_var_string (item, "plugin_id", ptr_server->name); - weechat_infolist_new_var_string (item, "type_string", "chat_send"); - weechat_infolist_new_var_string (item, "remote_nick", argv[2]); - weechat_infolist_new_var_string (item, "local_nick", ptr_server->nick); - snprintf (charset_modifier, sizeof (charset_modifier), - "irc.%s.%s", ptr_server->name, argv[2]); - weechat_infolist_new_var_string (item, "charset_modifier", charset_modifier); - weechat_infolist_new_var_string (item, "local_address", str_address); - (void) weechat_hook_signal_send ("xfer_add", - WEECHAT_HOOK_SIGNAL_POINTER, - infolist); - } - weechat_infolist_free (infolist); - } - } - /* unknown DCC action */ - else - { - weechat_printf (ptr_server->buffer, - _("%s%s: wrong arguments for \"%s\" command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, "dcc"); - return WEECHAT_RC_OK; - } - } - else + /* use the local interface, from the server socket */ + memset (&addr, 0, sizeof (addr)); + length = sizeof (addr); + getsockname (ptr_server->sock, (struct sockaddr *)&addr, &length); + rc = getnameinfo ((struct sockaddr *)&addr, length, str_address, + sizeof (str_address), NULL, 0, NI_NUMERICHOST); + if (rc != 0) { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "dcc"); + weechat_printf (ptr_server->buffer, + _("%s%s: unable to resolve local address of server " + "socket: error %d %s"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + rc, gai_strerror (rc)); + return WEECHAT_RC_OK; } - return WEECHAT_RC_OK; + /* DCC SEND file */ + if (weechat_strcasecmp (argv[1], "send") == 0) + { + if (argc < 4) + return WEECHAT_RC_ERROR; + infolist = weechat_infolist_new (); + if (infolist) + { + item = weechat_infolist_new_item (infolist); + if (item) + { + weechat_infolist_new_var_string (item, "plugin_name", weechat_plugin->name); + weechat_infolist_new_var_string (item, "plugin_id", ptr_server->name); + weechat_infolist_new_var_string (item, "type_string", "file_send"); + weechat_infolist_new_var_string (item, "protocol_string", "dcc"); + weechat_infolist_new_var_string (item, "remote_nick", argv[2]); + weechat_infolist_new_var_string (item, "local_nick", ptr_server->nick); + weechat_infolist_new_var_string (item, "filename", argv_eol[3]); + weechat_infolist_new_var_string (item, "local_address", str_address); + weechat_infolist_new_var_integer (item, "socket", ptr_server->sock); + (void) weechat_hook_signal_send ("xfer_add", + WEECHAT_HOOK_SIGNAL_POINTER, + infolist); + } + weechat_infolist_free (infolist); + } + return WEECHAT_RC_OK; + } + + /* DCC CHAT */ + if (weechat_strcasecmp (argv[1], "chat") == 0) + { + if (argc < 3) + return WEECHAT_RC_ERROR; + infolist = weechat_infolist_new (); + if (infolist) + { + item = weechat_infolist_new_item (infolist); + if (item) + { + weechat_infolist_new_var_string (item, "plugin_name", weechat_plugin->name); + weechat_infolist_new_var_string (item, "plugin_id", ptr_server->name); + weechat_infolist_new_var_string (item, "type_string", "chat_send"); + weechat_infolist_new_var_string (item, "remote_nick", argv[2]); + weechat_infolist_new_var_string (item, "local_nick", ptr_server->nick); + snprintf (charset_modifier, sizeof (charset_modifier), + "irc.%s.%s", ptr_server->name, argv[2]); + weechat_infolist_new_var_string (item, "charset_modifier", charset_modifier); + weechat_infolist_new_var_string (item, "local_address", str_address); + (void) weechat_hook_signal_send ("xfer_add", + WEECHAT_HOOK_SIGNAL_POINTER, + infolist); + } + weechat_infolist_free (infolist); + } + return WEECHAT_RC_OK; + } + + return WEECHAT_RC_ERROR; } /* @@ -1504,22 +1487,7 @@ irc_command_dehalfop (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - if (argc < 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s -h %s", - ptr_channel->name, - ptr_server->nick); - } - else - { - irc_command_mode_nicks (ptr_server, ptr_channel, - "dehalfop", "-", "h", argc, argv); - } - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be executed in " @@ -1527,6 +1495,20 @@ irc_command_dehalfop (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), IRC_PLUGIN_NAME, "dehalfop"); return WEECHAT_RC_OK; } + + if (argc < 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s -h %s", + ptr_channel->name, + ptr_server->nick); + } + else + { + irc_command_mode_nicks (ptr_server, ptr_channel, + "dehalfop", "-", "h", argc, argv); + } + return WEECHAT_RC_OK; } @@ -1545,22 +1527,7 @@ irc_command_deop (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - if (argc < 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s -o %s", - ptr_channel->name, - ptr_server->nick); - } - else - { - irc_command_mode_nicks (ptr_server, ptr_channel, - "deop", "-", "o", argc, argv); - } - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be executed in " @@ -1568,6 +1535,20 @@ irc_command_deop (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), IRC_PLUGIN_NAME, "deop"); return WEECHAT_RC_OK; } + + if (argc < 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s -o %s", + ptr_channel->name, + ptr_server->nick); + } + else + { + irc_command_mode_nicks (ptr_server, ptr_channel, + "deop", "-", "o", argc, argv); + } + return WEECHAT_RC_OK; } @@ -1586,22 +1567,7 @@ irc_command_devoice (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - if (argc < 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s -v %s", - ptr_channel->name, - ptr_server->nick); - } - else - { - irc_command_mode_nicks (ptr_server, ptr_channel, - "devoice", "-", "v", argc, argv); - } - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be " @@ -1609,6 +1575,20 @@ irc_command_devoice (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), IRC_PLUGIN_NAME, "devoice"); return WEECHAT_RC_OK; } + + if (argc < 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s -v %s", + ptr_channel->name, + ptr_server->nick); + } + else + { + irc_command_mode_nicks (ptr_server, ptr_channel, + "devoice", "-", "v", argc, argv); + } + return WEECHAT_RC_OK; } @@ -1651,29 +1631,26 @@ irc_command_quit_server (struct t_irc_server *server, const char *arguments) const char *ptr_arg, *version, *msg_quit; char *buf; - if (!server) + if (!server || !server->is_connected) return; - if (server->is_connected) - { - msg_quit = IRC_SERVER_OPTION_STRING(server, - IRC_SERVER_OPTION_DEFAULT_MSG_QUIT); - ptr_arg = (arguments) ? arguments : - ((msg_quit && msg_quit[0]) ? msg_quit : NULL); + msg_quit = IRC_SERVER_OPTION_STRING(server, + IRC_SERVER_OPTION_DEFAULT_MSG_QUIT); + ptr_arg = (arguments) ? arguments : + ((msg_quit && msg_quit[0]) ? msg_quit : NULL); - if (ptr_arg) - { - version = weechat_info_get ("version", ""); - buf = weechat_string_replace (ptr_arg, "%v", - (version) ? version : ""); - irc_server_sendf (server, 0, NULL, "QUIT :%s", - (buf) ? buf : ptr_arg); - if (buf) - free (buf); - } - else - irc_server_sendf (server, 0, NULL, "QUIT"); + if (ptr_arg) + { + version = weechat_info_get ("version", ""); + buf = weechat_string_replace (ptr_arg, "%v", + (version) ? version : ""); + irc_server_sendf (server, 0, NULL, "QUIT :%s", + (buf) ? buf : ptr_arg); + if (buf) + free (buf); } + else + irc_server_sendf (server, 0, NULL, "QUIT"); } /* @@ -1735,7 +1712,9 @@ irc_command_disconnect (void *data, struct t_gui_buffer *buffer, int argc, reason = (argc > 2) ? argv_eol[2] : NULL; if (argc < 2) + { disconnect_ok = irc_command_disconnect_one_server (ptr_server, reason); + } else { disconnect_ok = 1; @@ -1786,10 +1765,7 @@ irc_command_disconnect (void *data, struct t_gui_buffer *buffer, int argc, } } - if (!disconnect_ok) - return WEECHAT_RC_ERROR; - - return WEECHAT_RC_OK; + return (disconnect_ok) ? WEECHAT_RC_OK : WEECHAT_RC_ERROR; } /* @@ -1808,22 +1784,7 @@ irc_command_halfop (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - if (argc < 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s +h %s", - ptr_channel->name, - ptr_server->nick); - } - else - { - irc_command_mode_nicks (ptr_server, ptr_channel, - "halfop", "+", "h", argc, argv); - } - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be " @@ -1831,6 +1792,20 @@ irc_command_halfop (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), IRC_PLUGIN_NAME, "halfop"); return WEECHAT_RC_OK; } + + if (argc < 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s +h %s", + ptr_channel->name, + ptr_server->nick); + } + else + { + irc_command_mode_nicks (ptr_server, ptr_channel, + "halfop", "+", "h", argc, argv); + } + return WEECHAT_RC_OK; } @@ -1894,7 +1869,6 @@ irc_command_ignore (void *data, struct t_gui_buffer *buffer, int argc, } else weechat_printf (NULL, _("%s: no ignore in list"), IRC_PLUGIN_NAME); - return WEECHAT_RC_OK; } @@ -1902,14 +1876,7 @@ irc_command_ignore (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "add") == 0) { if (argc < 3) - { - weechat_printf (NULL, - _("%s%s: missing arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "ignore add"); - return WEECHAT_RC_OK; - } + return WEECHAT_RC_ERROR; mask = argv[2]; server = (argc > 3) ? argv[3] : NULL; @@ -1976,14 +1943,7 @@ irc_command_ignore (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "del") == 0) { if (argc < 3) - { - weechat_printf (NULL, - _("%s%s: missing arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "ignore del"); - return WEECHAT_RC_OK; - } + return WEECHAT_RC_ERROR; if (weechat_strcasecmp (argv[2], "-all") == 0) { @@ -2036,11 +1996,7 @@ irc_command_ignore (void *data, struct t_gui_buffer *buffer, int argc, return WEECHAT_RC_OK; } - weechat_printf (NULL, - _("%s%s: unknown option for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, "ignore"); - return WEECHAT_RC_OK; + return WEECHAT_RC_ERROR; } /* @@ -2091,14 +2047,7 @@ irc_command_invite (void *data, struct t_gui_buffer *buffer, int argc, (void) argv_eol; if (argc < 2) - { - weechat_printf (NULL, - _("%s%s: missing arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "invite"); - return WEECHAT_RC_OK; - } + return WEECHAT_RC_ERROR; if (argc > 2) { @@ -2134,6 +2083,7 @@ irc_command_invite (void *data, struct t_gui_buffer *buffer, int argc, else goto error; } + return WEECHAT_RC_OK; error: @@ -2160,15 +2110,11 @@ irc_command_ison (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "ISON :%s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "ison"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "ISON :%s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -2336,10 +2282,7 @@ irc_command_join (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[i], "-server") == 0) { if (argc <= i + 1) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS((ptr_server) ? ptr_server->buffer : NULL, - "join"); - } + return WEECHAT_RC_ERROR; ptr_server = irc_server_search (argv[i + 1]); if (!ptr_server) return WEECHAT_RC_ERROR; @@ -2374,9 +2317,7 @@ irc_command_join (void *data, struct t_gui_buffer *buffer, int argc, 1, noswitch); } else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "join"); - } + return WEECHAT_RC_ERROR; } return WEECHAT_RC_OK; @@ -2433,49 +2374,36 @@ irc_command_kick (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + if (irc_channel_is_channel (ptr_server, argv[1])) { - if (irc_channel_is_channel (ptr_server, argv[1])) - { - if (argc < 3) - { - weechat_printf (ptr_server->buffer, - _("%s%s: wrong arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "kick"); - return WEECHAT_RC_OK; - } - pos_channel = argv[1]; - pos_nick = argv[2]; - pos_comment = argv_eol[3]; - } - else - { - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - pos_channel = ptr_channel->name; - pos_nick = argv[1]; - pos_comment = argv_eol[2]; - } - else - { - weechat_printf (ptr_server->buffer, - _("%s%s: \"%s\" command can only be " - "executed in a channel buffer"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "kick"); - return WEECHAT_RC_OK; - } - } - irc_command_kick_channel (ptr_server, pos_channel, pos_nick, - pos_comment); + if (argc < 3) + return WEECHAT_RC_ERROR; + pos_channel = argv[1]; + pos_nick = argv[2]; + pos_comment = argv_eol[3]; } else { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "kick"); + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) + { + weechat_printf (ptr_server->buffer, + _("%s%s: \"%s\" command can only be " + "executed in a channel buffer"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + "kick"); + return WEECHAT_RC_OK; + } + pos_channel = ptr_channel->name; + pos_nick = argv[1]; + pos_comment = argv_eol[2]; } + irc_command_kick_channel (ptr_server, pos_channel, pos_nick, + pos_comment); + return WEECHAT_RC_OK; } @@ -2497,95 +2425,82 @@ irc_command_kickban (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + if (irc_channel_is_channel (ptr_server, argv[1])) { - if (irc_channel_is_channel (ptr_server, argv[1])) + if (argc < 3) + return WEECHAT_RC_ERROR; + pos_channel = argv[1]; + pos_nick = argv[2]; + pos_comment = argv_eol[3]; + } + else + { + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { - if (argc < 3) - { - weechat_printf (ptr_server->buffer, - _("%s%s: wrong arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "kickban"); - return WEECHAT_RC_OK; - } - pos_channel = argv[1]; - pos_nick = argv[2]; - pos_comment = argv_eol[3]; + weechat_printf (ptr_server->buffer, + _("%s%s: \"%s\" command can only be " + "executed in a channel buffer"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + "kickban"); + return WEECHAT_RC_OK; } - else + pos_channel = ptr_channel->name; + pos_nick = argv[1]; + pos_comment = argv_eol[2]; + } + + /* kick nick from channel */ + nick_only = strdup (pos_nick); + if (!nick_only) + return WEECHAT_RC_ERROR; + + pos = strchr (nick_only, '@'); + if (pos) + pos[0] = '\0'; + pos = strchr (nick_only, '!'); + if (pos) + pos[0] = '\0'; + + if (strcmp (nick_only, "*") == 0) + { + weechat_printf (ptr_server->buffer, + _("%s%s: mask must begin with nick"), + weechat_prefix ("error"), IRC_PLUGIN_NAME); + free (nick_only); + return WEECHAT_RC_OK; + } + + /* set ban for nick(+host) on channel */ + if (strchr (pos_nick, '@')) + { + length = strlen (pos_nick) + 16; + mask = malloc (length + 1); + if (mask) { - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - pos_channel = ptr_channel->name; - pos_nick = argv[1]; - pos_comment = argv_eol[2]; - } - else - { - weechat_printf (ptr_server->buffer, - _("%s%s: \"%s\" command can only be " - "executed in a channel buffer"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "kickban"); - return WEECHAT_RC_OK; - } - } - - /* kick nick from channel */ - nick_only = strdup (pos_nick); - if (nick_only) - { - pos = strchr (nick_only, '@'); - if (pos) - pos[0] = '\0'; - pos = strchr (nick_only, '!'); - if (pos) - pos[0] = '\0'; - - if (strcmp (nick_only, "*") == 0) - { - weechat_printf (ptr_server->buffer, - _("%s%s: mask must begin with nick"), - weechat_prefix ("error"), IRC_PLUGIN_NAME); - return WEECHAT_RC_OK; - } - - /* set ban for nick(+host) on channel */ - if (strchr (pos_nick, '@')) - { - length = strlen (pos_nick) + 16; - mask = malloc (length + 1); - if (mask) - { - pos = strchr (pos_nick, '!'); - snprintf (mask, length, "*!%s", - (pos) ? pos + 1 : pos_nick); - irc_server_sendf (ptr_server, - IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s +b %s", - pos_channel, mask); - free (mask); - } - } - else - { - irc_command_send_ban (ptr_server, pos_channel, "+b", - pos_nick); - } - - /* kick nick */ - irc_command_kick_channel (ptr_server, pos_channel, nick_only, - pos_comment); - free (nick_only); + pos = strchr (pos_nick, '!'); + snprintf (mask, length, "*!%s", + (pos) ? pos + 1 : pos_nick); + irc_server_sendf (ptr_server, + IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s +b %s", + pos_channel, mask); + free (mask); } } else { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "kickban"); + irc_command_send_ban (ptr_server, pos_channel, "+b", + pos_nick); } + /* kick nick */ + irc_command_kick_channel (ptr_server, pos_channel, nick_only, pos_comment); + + free (nick_only); + return WEECHAT_RC_OK; } @@ -2603,15 +2518,11 @@ irc_command_kill (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "KILL %s :%s", argv[1], argv_eol[2]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "kill"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "KILL %s :%s", argv[1], argv_eol[2]); return WEECHAT_RC_OK; } @@ -2826,6 +2737,7 @@ irc_command_me (void *data, struct t_gui_buffer *buffer, int argc, char **argv, weechat_prefix ("error"), IRC_PLUGIN_NAME, "me"); return WEECHAT_RC_OK; } + irc_command_me_channel (ptr_server, ptr_channel, (argc > 1) ? argv_eol[1] : NULL); @@ -2959,11 +2871,8 @@ irc_command_msg (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc <= 2) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS((ptr_server) ? ptr_server->buffer : NULL, - "msg"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; arg_target = 1; arg_text = 2; @@ -2980,178 +2889,179 @@ irc_command_msg (void *data, struct t_gui_buffer *buffer, int argc, targets = weechat_string_split (argv[arg_target], ",", 0, 0, &num_targets); - if (targets) - { - for (i = 0; i < num_targets; i++) - { - if (strcmp (targets[i], "*") == 0) - { - if (!ptr_channel - || ((ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL) - && (ptr_channel->type != IRC_CHANNEL_TYPE_PRIVATE))) - { - weechat_printf (ptr_server->buffer, - _("%s%s: \"%s\" command can only be " - "executed in a channel or private " - "buffer"), - weechat_prefix ("error"), - IRC_PLUGIN_NAME, "msg *"); - return WEECHAT_RC_OK; - } - string = irc_color_decode (argv_eol[arg_text], - weechat_config_boolean (irc_config_network_colors_send)); - irc_input_user_message_display (ptr_channel->buffer, 0, - (string) ? string : argv_eol[arg_text]); - if (string) - free (string); + if (!targets) + return WEECHAT_RC_ERROR; - irc_server_sendf (ptr_server, - IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PRIVMSG %s :%s", - ptr_channel->name, argv_eol[arg_text]); + for (i = 0; i < num_targets; i++) + { + if (strcmp (targets[i], "*") == 0) + { + if (!ptr_channel + || ((ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL) + && (ptr_channel->type != IRC_CHANNEL_TYPE_PRIVATE))) + { + weechat_printf (ptr_server->buffer, + _("%s%s: \"%s\" command can only be " + "executed in a channel or private " + "buffer"), + weechat_prefix ("error"), + IRC_PLUGIN_NAME, "msg *"); + return WEECHAT_RC_OK; + } + string = irc_color_decode (argv_eol[arg_text], + weechat_config_boolean (irc_config_network_colors_send)); + irc_input_user_message_display (ptr_channel->buffer, 0, + (string) ? string : argv_eol[arg_text]); + if (string) + free (string); + + irc_server_sendf (ptr_server, + IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PRIVMSG %s :%s", + ptr_channel->name, argv_eol[arg_text]); + } + else + { + is_channel = 0; + ptr_channel = NULL; + status_msg = 0; + if (irc_server_prefix_char_statusmsg (ptr_server, + targets[i][0]) + && irc_channel_is_channel (ptr_server, targets[i] + 1)) + { + ptr_channel = irc_channel_search (ptr_server, targets[i] + 1); + is_channel = 1; + status_msg = 1; } else { - is_channel = 0; - ptr_channel = NULL; - status_msg = 0; - if (irc_server_prefix_char_statusmsg (ptr_server, - targets[i][0]) - && irc_channel_is_channel (ptr_server, targets[i] + 1)) - { - ptr_channel = irc_channel_search (ptr_server, targets[i] + 1); + ptr_channel = irc_channel_search (ptr_server, targets[i]); + if (ptr_channel) is_channel = 1; - status_msg = 1; - } - else + } + if (is_channel) + { + if (ptr_channel) { - ptr_channel = irc_channel_search (ptr_server, targets[i]); - if (ptr_channel) - is_channel = 1; - } - if (is_channel) - { - if (ptr_channel) + string = irc_color_decode (argv_eol[arg_text], + weechat_config_boolean (irc_config_network_colors_send)); + if (status_msg) { - string = irc_color_decode (argv_eol[arg_text], - weechat_config_boolean (irc_config_network_colors_send)); - if (status_msg) - { - /* - * message to channel ops/voiced - * (to "@#channel" or "+#channel") - */ - weechat_printf_tags (ptr_channel->buffer, - "notify_none,no_highlight", - "%s%s%s -> %s%s%s: %s", - weechat_prefix ("network"), - "Msg", - IRC_COLOR_RESET, - IRC_COLOR_CHAT_CHANNEL, - targets[i], - IRC_COLOR_RESET, - (string) ? string : argv_eol[arg_text]); - } - else - { - /* standard message (to "#channel") */ - irc_input_user_message_display (ptr_channel->buffer, - 0, - (string) ? string : argv_eol[arg_text]); - } - if (string) - free (string); - } - irc_server_sendf (ptr_server, - IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PRIVMSG %s :%s", - targets[i], argv_eol[arg_text]); - } - else - { - /* check if the password must be hidden for this nick */ - hide_password = 0; - if (irc_config_nicks_hide_password) - { - for (j = 0; j < irc_config_num_nicks_hide_password; j++) - { - if (weechat_strcasecmp (irc_config_nicks_hide_password[j], - targets[i]) == 0) - { - hide_password = 1; - break; - } - } - } - if (hide_password) - { - /* hide password in message displayed using modifier */ - msg_pwd_hidden = weechat_hook_modifier_exec ("irc_message_auth", - ptr_server->name, - argv_eol[arg_text]); - string = irc_color_decode ( - (msg_pwd_hidden) ? msg_pwd_hidden : argv_eol[arg_text], - weechat_config_boolean (irc_config_network_colors_send)); - weechat_printf (ptr_server->buffer, - "%sMSG%s(%s%s%s)%s: %s", - weechat_prefix ("network"), - IRC_COLOR_CHAT_DELIMITERS, - irc_nick_color_for_message (ptr_server, - NULL, - targets[i]), - targets[i], - IRC_COLOR_CHAT_DELIMITERS, - IRC_COLOR_RESET, - (string) ? - string : ((msg_pwd_hidden) ? - msg_pwd_hidden : argv_eol[arg_text])); - if (string) - free (string); - if (msg_pwd_hidden) - free (msg_pwd_hidden); + /* + * message to channel ops/voiced + * (to "@#channel" or "+#channel") + */ + weechat_printf_tags (ptr_channel->buffer, + "notify_none,no_highlight", + "%s%s%s -> %s%s%s: %s", + weechat_prefix ("network"), + "Msg", + IRC_COLOR_RESET, + IRC_COLOR_CHAT_CHANNEL, + targets[i], + IRC_COLOR_RESET, + (string) ? string : argv_eol[arg_text]); } else { - string = irc_color_decode (argv_eol[arg_text], - weechat_config_boolean (irc_config_network_colors_send)); - ptr_channel = irc_channel_search (ptr_server, - targets[i]); - if (ptr_channel) - { - irc_input_user_message_display (ptr_channel->buffer, - 0, - (string) ? string : argv_eol[arg_text]); - } - else - { - weechat_printf_tags (ptr_server->buffer, - irc_protocol_tags ("privmsg", - "notify_none,no_highlight", - ptr_server->nick), - "%sMSG%s(%s%s%s)%s: %s", - weechat_prefix ("network"), - IRC_COLOR_CHAT_DELIMITERS, - irc_nick_color_for_message (ptr_server, - NULL, - targets[i]), - targets[i], - IRC_COLOR_CHAT_DELIMITERS, - IRC_COLOR_RESET, - (string) ? string : argv_eol[arg_text]); - } - if (string) - free (string); + /* standard message (to "#channel") */ + irc_input_user_message_display (ptr_channel->buffer, + 0, + (string) ? string : argv_eol[arg_text]); } - irc_server_sendf (ptr_server, - IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PRIVMSG %s :%s", - targets[i], argv_eol[arg_text]); + if (string) + free (string); } + irc_server_sendf (ptr_server, + IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PRIVMSG %s :%s", + targets[i], argv_eol[arg_text]); + } + else + { + /* check if the password must be hidden for this nick */ + hide_password = 0; + if (irc_config_nicks_hide_password) + { + for (j = 0; j < irc_config_num_nicks_hide_password; j++) + { + if (weechat_strcasecmp (irc_config_nicks_hide_password[j], + targets[i]) == 0) + { + hide_password = 1; + break; + } + } + } + if (hide_password) + { + /* hide password in message displayed using modifier */ + msg_pwd_hidden = weechat_hook_modifier_exec ("irc_message_auth", + ptr_server->name, + argv_eol[arg_text]); + string = irc_color_decode ( + (msg_pwd_hidden) ? msg_pwd_hidden : argv_eol[arg_text], + weechat_config_boolean (irc_config_network_colors_send)); + weechat_printf (ptr_server->buffer, + "%sMSG%s(%s%s%s)%s: %s", + weechat_prefix ("network"), + IRC_COLOR_CHAT_DELIMITERS, + irc_nick_color_for_message (ptr_server, + NULL, + targets[i]), + targets[i], + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_RESET, + (string) ? + string : ((msg_pwd_hidden) ? + msg_pwd_hidden : argv_eol[arg_text])); + if (string) + free (string); + if (msg_pwd_hidden) + free (msg_pwd_hidden); + } + else + { + string = irc_color_decode (argv_eol[arg_text], + weechat_config_boolean (irc_config_network_colors_send)); + ptr_channel = irc_channel_search (ptr_server, + targets[i]); + if (ptr_channel) + { + irc_input_user_message_display (ptr_channel->buffer, + 0, + (string) ? string : argv_eol[arg_text]); + } + else + { + weechat_printf_tags (ptr_server->buffer, + irc_protocol_tags ("privmsg", + "notify_none,no_highlight", + ptr_server->nick), + "%sMSG%s(%s%s%s)%s: %s", + weechat_prefix ("network"), + IRC_COLOR_CHAT_DELIMITERS, + irc_nick_color_for_message (ptr_server, + NULL, + targets[i]), + targets[i], + IRC_COLOR_CHAT_DELIMITERS, + IRC_COLOR_RESET, + (string) ? string : argv_eol[arg_text]); + } + if (string) + free (string); + } + irc_server_sendf (ptr_server, + IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PRIVMSG %s :%s", + targets[i], argv_eol[arg_text]); } } - weechat_string_free_split (targets); } + weechat_string_free_split (targets); + return WEECHAT_RC_OK; } @@ -3177,12 +3087,7 @@ irc_command_names (void *data, struct t_gui_buffer *buffer, int argc, } else { - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "NAMES %s", ptr_channel->name); - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be " @@ -3191,6 +3096,8 @@ irc_command_names (void *data, struct t_gui_buffer *buffer, int argc, "names"); return WEECHAT_RC_OK; } + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "NAMES %s", ptr_channel->name); } return WEECHAT_RC_OK; @@ -3230,15 +3137,13 @@ irc_command_nick (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; + if (argc < 2) + return WEECHAT_RC_ERROR; + if (argc > 2) { if (weechat_strcasecmp (argv[1], "-all") != 0) - { - weechat_printf (ptr_server->buffer, - _("%s%s: wrong arguments for \"%s\" command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, "nick"); - return WEECHAT_RC_OK; - } + return WEECHAT_RC_ERROR; for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server) { @@ -3246,14 +3151,7 @@ irc_command_nick (void *data, struct t_gui_buffer *buffer, int argc, } } else - { - if (argc > 1) - irc_send_nick_server (ptr_server, argv[1]); - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "nick"); - } - } + irc_send_nick_server (ptr_server, argv[1]); return WEECHAT_RC_OK; } @@ -3276,74 +3174,69 @@ irc_command_notice (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - arg_target = 1; - arg_text = 2; - if ((argc >= 5) && (weechat_strcasecmp (argv[1], "-server") == 0)) - { - ptr_server = irc_server_search (argv[2]); - arg_target = 3; - arg_text = 4; - } + if (argc < 3) + return WEECHAT_RC_ERROR; - IRC_COMMAND_CHECK_SERVER("notice", 1); - is_channel = 0; - if (irc_server_prefix_char_statusmsg (ptr_server, argv[arg_target][0]) - && irc_channel_is_channel (ptr_server, argv[arg_target] + 1)) - { - ptr_channel = irc_channel_search (ptr_server, argv[arg_target] + 1); - is_channel = 1; - } - else - { - ptr_channel = irc_channel_search (ptr_server, argv[arg_target]); - if (ptr_channel) - is_channel = 1; - } - hashtable = irc_server_sendf (ptr_server, - IRC_SERVER_SEND_OUTQ_PRIO_HIGH | IRC_SERVER_SEND_RETURN_HASHTABLE, - NULL, - "NOTICE %s :%s", - argv[arg_target], argv_eol[arg_text]); - if (hashtable) - { - number = 1; - while (1) - { - snprintf (hash_key, sizeof (hash_key), "args%d", number); - str_args = weechat_hashtable_get (hashtable, hash_key); - if (!str_args) - break; - string = irc_color_decode (str_args, - weechat_config_boolean (irc_config_network_colors_send)); - weechat_printf_tags (irc_msgbuffer_get_target_buffer (ptr_server, - argv[arg_target], - "notice", - NULL, - (ptr_channel) ? ptr_channel->buffer : NULL), - "notify_none,no_highlight", - "%s%s%s%s -> %s%s%s: %s", - weechat_prefix ("network"), - IRC_COLOR_NOTICE, - /* TRANSLATORS: "Notice" is command name in IRC protocol (translation is frequently the same word) */ - _("Notice"), - IRC_COLOR_RESET, - (is_channel) ? IRC_COLOR_CHAT_CHANNEL : irc_nick_color_for_message (ptr_server, NULL, argv[arg_target]), - argv[arg_target], - IRC_COLOR_RESET, - (string) ? string : str_args); - if (string) - free (string); - number++; - } - weechat_hashtable_free (hashtable); - } + arg_target = 1; + arg_text = 2; + if ((argc >= 5) && (weechat_strcasecmp (argv[1], "-server") == 0)) + { + ptr_server = irc_server_search (argv[2]); + arg_target = 3; + arg_text = 4; + } + + IRC_COMMAND_CHECK_SERVER("notice", 1); + is_channel = 0; + if (irc_server_prefix_char_statusmsg (ptr_server, argv[arg_target][0]) + && irc_channel_is_channel (ptr_server, argv[arg_target] + 1)) + { + ptr_channel = irc_channel_search (ptr_server, argv[arg_target] + 1); + is_channel = 1; } else { - IRC_COMMAND_TOO_FEW_ARGUMENTS((ptr_server) ? ptr_server->buffer : NULL, - "notice"); + ptr_channel = irc_channel_search (ptr_server, argv[arg_target]); + if (ptr_channel) + is_channel = 1; + } + hashtable = irc_server_sendf (ptr_server, + IRC_SERVER_SEND_OUTQ_PRIO_HIGH | IRC_SERVER_SEND_RETURN_HASHTABLE, + NULL, + "NOTICE %s :%s", + argv[arg_target], argv_eol[arg_text]); + if (hashtable) + { + number = 1; + while (1) + { + snprintf (hash_key, sizeof (hash_key), "args%d", number); + str_args = weechat_hashtable_get (hashtable, hash_key); + if (!str_args) + break; + string = irc_color_decode (str_args, + weechat_config_boolean (irc_config_network_colors_send)); + weechat_printf_tags (irc_msgbuffer_get_target_buffer (ptr_server, + argv[arg_target], + "notice", + NULL, + (ptr_channel) ? ptr_channel->buffer : NULL), + "notify_none,no_highlight", + "%s%s%s%s -> %s%s%s: %s", + weechat_prefix ("network"), + IRC_COLOR_NOTICE, + /* TRANSLATORS: "Notice" is command name in IRC protocol (translation is frequently the same word) */ + _("Notice"), + IRC_COLOR_RESET, + (is_channel) ? IRC_COLOR_CHAT_CHANNEL : irc_nick_color_for_message (ptr_server, NULL, argv[arg_target]), + argv[arg_target], + IRC_COLOR_RESET, + (string) ? string : str_args); + if (string) + free (string); + number++; + } + weechat_hashtable_free (hashtable); } return WEECHAT_RC_OK; @@ -3378,14 +3271,7 @@ irc_command_notify (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "add") == 0) { if (argc < 3) - { - weechat_printf (NULL, - _("%s%s: missing arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "notify add"); - return WEECHAT_RC_OK; - } + return WEECHAT_RC_ERROR; check_away = 0; @@ -3465,14 +3351,7 @@ irc_command_notify (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "del") == 0) { if (argc < 3) - { - weechat_printf (NULL, - _("%s%s: missing arguments for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "notify del"); - return WEECHAT_RC_OK; - } + return WEECHAT_RC_ERROR; if (argc > 3) { @@ -3539,11 +3418,7 @@ irc_command_notify (void *data, struct t_gui_buffer *buffer, int argc, return WEECHAT_RC_OK; } - weechat_printf (NULL, - _("%s%s: unknown option for \"%s\" " - "command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, "notify"); - return WEECHAT_RC_OK; + return WEECHAT_RC_ERROR; } /* @@ -3561,22 +3436,7 @@ irc_command_op (void *data, struct t_gui_buffer *buffer, int argc, char **argv, (void) data; (void) argv_eol; - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - if (argc < 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s +o %s", - ptr_channel->name, - ptr_server->nick); - } - else - { - irc_command_mode_nicks (ptr_server, ptr_channel, - "op", "+", "o", argc, argv); - } - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be " @@ -3584,6 +3444,20 @@ irc_command_op (void *data, struct t_gui_buffer *buffer, int argc, char **argv, weechat_prefix ("error"), IRC_PLUGIN_NAME, "op"); return WEECHAT_RC_OK; } + + if (argc < 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s +o %s", + ptr_channel->name, + ptr_server->nick); + } + else + { + irc_command_mode_nicks (ptr_server, ptr_channel, + "op", "+", "o", argc, argv); + } + return WEECHAT_RC_OK; } @@ -3602,15 +3476,11 @@ irc_command_oper (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "OPER %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "oper"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "OPER %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -3728,15 +3598,11 @@ irc_command_ping (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PING %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "ping"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PING %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -3756,15 +3622,11 @@ irc_command_pong (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "PONG %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "pong"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "PONG %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -3785,70 +3647,66 @@ irc_command_query (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + arg_nick = 1; + arg_text = 2; + if ((argc >= 4) && (weechat_strcasecmp (argv[1], "-server") == 0)) { - arg_nick = 1; - arg_text = 2; - if ((argc >= 4) && (weechat_strcasecmp (argv[1], "-server") == 0)) - { - ptr_server = irc_server_search (argv[2]); - arg_nick = 3; - arg_text = 4; - } + ptr_server = irc_server_search (argv[2]); + arg_nick = 3; + arg_text = 4; + } - IRC_COMMAND_CHECK_SERVER("query", 1); + IRC_COMMAND_CHECK_SERVER("query", 1); - nicks = weechat_string_split (argv[arg_nick], ",", 0, 0, &num_nicks); - if (nicks) + nicks = weechat_string_split (argv[arg_nick], ",", 0, 0, &num_nicks); + if (!nicks) + return WEECHAT_RC_ERROR; + + for (i = 0; i < num_nicks; i++) + { + /* create private window if not already opened */ + ptr_channel = irc_channel_search (ptr_server, nicks[i]); + if (!ptr_channel) { - for (i = 0; i < num_nicks; i++) + ptr_channel = irc_channel_new (ptr_server, + IRC_CHANNEL_TYPE_PRIVATE, + nicks[i], 1, 0); + if (!ptr_channel) { - /* create private window if not already opened */ - ptr_channel = irc_channel_search (ptr_server, nicks[i]); - if (!ptr_channel) - { - ptr_channel = irc_channel_new (ptr_server, - IRC_CHANNEL_TYPE_PRIVATE, - nicks[i], 1, 0); - if (!ptr_channel) - { - weechat_printf (ptr_server->buffer, - _("%s%s: cannot create new private " - "buffer \"%s\""), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - nicks[i]); - } - } - - if (ptr_channel) - { - /* switch to buffer */ - weechat_buffer_set (ptr_channel->buffer, "display", "1"); - - /* display text if given */ - if (argv_eol[arg_text]) - { - string = irc_color_decode (argv_eol[arg_text], - weechat_config_boolean (irc_config_network_colors_send)); - irc_input_user_message_display (ptr_channel->buffer, 0, - (string) ? string : argv_eol[arg_text]); - if (string) - free (string); - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, - NULL, - "PRIVMSG %s :%s", - nicks[i], argv_eol[arg_text]); - } - } + weechat_printf (ptr_server->buffer, + _("%s%s: cannot create new private " + "buffer \"%s\""), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + nicks[i]); + } + } + + if (ptr_channel) + { + /* switch to buffer */ + weechat_buffer_set (ptr_channel->buffer, "display", "1"); + + /* display text if given */ + if (argv_eol[arg_text]) + { + string = irc_color_decode (argv_eol[arg_text], + weechat_config_boolean (irc_config_network_colors_send)); + irc_input_user_message_display (ptr_channel->buffer, 0, + (string) ? string : argv_eol[arg_text]); + if (string) + free (string); + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, + NULL, + "PRIVMSG %s :%s", + nicks[i], argv_eol[arg_text]); } - weechat_string_free_split (nicks); } } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS((ptr_server) ? ptr_server->buffer : NULL, - "query"); - } + + weechat_string_free_split (nicks); return WEECHAT_RC_OK; } @@ -3948,28 +3806,23 @@ irc_command_quote (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + if ((argc >= 4) && (weechat_strcasecmp (argv[1], "-server") == 0)) { - if ((argc >= 4) && (weechat_strcasecmp (argv[1], "-server") == 0)) - { - ptr_server = irc_server_search (argv[2]); - if (!ptr_server || (ptr_server->sock < 0)) - return WEECHAT_RC_ERROR; - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "%s", argv_eol[3]); - } - else - { - if (!ptr_server || (ptr_server->sock < 0)) - return WEECHAT_RC_ERROR; - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "%s", argv_eol[1]); - } + ptr_server = irc_server_search (argv[2]); + if (!ptr_server || (ptr_server->sock < 0)) + return WEECHAT_RC_ERROR; + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "%s", argv_eol[3]); } else { - IRC_COMMAND_TOO_FEW_ARGUMENTS((ptr_server) ? ptr_server->buffer : NULL, - "quote"); + if (!ptr_server || (ptr_server->sock < 0)) + return WEECHAT_RC_ERROR; + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "%s", argv_eol[1]); } return WEECHAT_RC_OK; @@ -4104,10 +3957,7 @@ irc_command_reconnect (void *data, struct t_gui_buffer *buffer, int argc, } } - if (!reconnect_ok) - return WEECHAT_RC_ERROR; - - return WEECHAT_RC_OK; + return (reconnect_ok) ? WEECHAT_RC_OK : WEECHAT_RC_ERROR; } /* @@ -4182,15 +4032,11 @@ irc_command_sajoin (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SAJOIN %s %s", argv[1], argv_eol[2]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "sajoin"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SAJOIN %s %s", argv[1], argv_eol[2]); return WEECHAT_RC_OK; } @@ -4210,15 +4056,11 @@ irc_command_samode (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SAMODE %s %s", argv[1], argv_eol[2]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "samode"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SAMODE %s %s", argv[1], argv_eol[2]); return WEECHAT_RC_OK; } @@ -4237,15 +4079,11 @@ irc_command_sanick (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SANICK %s %s", argv[1], argv_eol[2]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "sanick"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SANICK %s %s", argv[1], argv_eol[2]); return WEECHAT_RC_OK; } @@ -4264,15 +4102,11 @@ irc_command_sapart (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SAPART %s %s", argv[1], argv_eol[2]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "sapart"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SAPART %s %s", argv[1], argv_eol[2]); return WEECHAT_RC_OK; } @@ -4291,15 +4125,11 @@ irc_command_saquit (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SAQUIT %s :%s", argv[1], argv_eol[2]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "saquit"); - } + if (argc < 3) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SAQUIT %s :%s", argv[1], argv_eol[2]); return WEECHAT_RC_OK; } @@ -4689,7 +4519,6 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; (void) buffer; - (void) argv_eol; if ((argc == 1) || (weechat_strcasecmp (argv[1], "list") == 0) @@ -4749,16 +4578,13 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, _("No server found with \"%s\""), server_name); } - return WEECHAT_RC_OK; } if (weechat_strcasecmp (argv[1], "add") == 0) { if (argc < 4) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server add"); - } + return WEECHAT_RC_ERROR; ptr_server2 = irc_server_casesearch (argv[2]); if (ptr_server2) { @@ -4802,9 +4628,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "copy") == 0) { if (argc < 4) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server copy"); - } + return WEECHAT_RC_ERROR; /* look for server by name */ server_found = irc_server_search (argv[2]); @@ -4853,9 +4677,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "rename") == 0) { if (argc < 4) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server rename"); - } + return WEECHAT_RC_ERROR; /* look for server by name */ server_found = irc_server_search (argv[2]); @@ -4903,9 +4725,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "keep") == 0) { if (argc < 3) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server keep"); - } + return WEECHAT_RC_ERROR; /* look for server by name */ server_found = irc_server_search (argv[2]); @@ -4945,9 +4765,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "del") == 0) { if (argc < 3) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server del"); - } + return WEECHAT_RC_ERROR; /* look for server by name */ server_found = irc_server_search (argv[2]); @@ -5019,9 +4837,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, if (weechat_strcasecmp (argv[1], "fakerecv") == 0) { if (argc < 3) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server fakerecv"); - } + return WEECHAT_RC_ERROR; IRC_COMMAND_CHECK_SERVER("server fakerecv", 1); length = strlen (argv_eol[2]); if (length > 0) @@ -5040,11 +4856,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc, return WEECHAT_RC_OK; } - weechat_printf (NULL, - _("%s%s: unknown option for \"%s\" command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, "server"); - - return WEECHAT_RC_OK; + return WEECHAT_RC_ERROR; } /* @@ -5062,15 +4874,11 @@ irc_command_service (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SERVICE %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "service"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SERVICE %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -5119,22 +4927,18 @@ irc_command_squery (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + if (argc > 2) { - if (argc > 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SQUERY %s :%s", argv[1], argv_eol[2]); - } - else - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SQUERY %s", argv_eol[1]); - } + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SQUERY %s :%s", argv[1], argv_eol[2]); } else { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "squery"); + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SQUERY %s", argv_eol[1]); } return WEECHAT_RC_OK; @@ -5155,12 +4959,10 @@ irc_command_squit (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - irc_server_sendf (ptr_server, 0, NULL, "SQUIT %s", argv_eol[1]); - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "squit"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, 0, NULL, "SQUIT %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -5210,15 +5012,11 @@ irc_command_summon (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "SUMMON %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "summon"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "SUMMON %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -5287,7 +5085,9 @@ irc_command_topic (void *data, struct t_gui_buffer *buffer, int argc, if (!channel_name) { if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) + { channel_name = ptr_channel->name; + } else { weechat_printf (ptr_server->buffer, @@ -5302,8 +5102,10 @@ irc_command_topic (void *data, struct t_gui_buffer *buffer, int argc, if (new_topic) { if (weechat_strcasecmp (new_topic, "-delete") == 0) + { irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, "TOPIC %s :", channel_name); + } else { new_topic_color = irc_color_encode (new_topic, @@ -5317,8 +5119,10 @@ irc_command_topic (void *data, struct t_gui_buffer *buffer, int argc, } } else + { irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, "TOPIC %s", channel_name); + } return WEECHAT_RC_OK; } @@ -5370,49 +5174,42 @@ irc_command_unban (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + if (irc_channel_is_channel (ptr_server, argv[1])) { - if (irc_channel_is_channel (ptr_server, argv[1])) - { - pos_channel = argv[1]; - pos_args = 2; - } - else - { - pos_channel = NULL; - pos_args = 1; - } - - /* channel not given, use default buffer */ - if (!pos_channel) - { - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - pos_channel = ptr_channel->name; - else - { - weechat_printf (ptr_server->buffer, - _("%s%s: \"%s\" command can only be " - "executed in a channel buffer"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "unban"); - return WEECHAT_RC_OK; - } - } - - /* loop on users */ - while (argv[pos_args]) - { - irc_command_send_ban (ptr_server, pos_channel, "-b", - argv[pos_args]); - pos_args++; - } + pos_channel = argv[1]; + pos_args = 2; } else { - weechat_printf (ptr_server->buffer, - _("%s%s: wrong argument count for \"%s\" command"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, "unban"); - return WEECHAT_RC_OK; + pos_channel = NULL; + pos_args = 1; + } + + /* channel not given, use default buffer */ + if (!pos_channel) + { + if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) + pos_channel = ptr_channel->name; + else + { + weechat_printf (ptr_server->buffer, + _("%s%s: \"%s\" command can only be " + "executed in a channel buffer"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + "unban"); + return WEECHAT_RC_OK; + } + } + + /* loop on users */ + while (argv[pos_args]) + { + irc_command_send_ban (ptr_server, pos_channel, "-b", + argv[pos_args]); + pos_args++; } return WEECHAT_RC_OK; @@ -5434,15 +5231,11 @@ irc_command_userhost (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "USERHOST %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "userhost"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "USERHOST %s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -5530,20 +5323,7 @@ irc_command_voice (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv_eol; - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - { - if (argc < 2) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "MODE %s +v %s", - ptr_channel->name, - ptr_server->nick); - } - else - irc_command_mode_nicks (ptr_server, ptr_channel, - "voice", "+", "v", argc, argv); - } - else + if (!ptr_channel || (ptr_channel->type != IRC_CHANNEL_TYPE_CHANNEL)) { weechat_printf (ptr_server->buffer, _("%s%s: \"%s\" command can only be " @@ -5552,6 +5332,19 @@ irc_command_voice (void *data, struct t_gui_buffer *buffer, int argc, return WEECHAT_RC_OK; } + if (argc < 2) + { + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "MODE %s +v %s", + ptr_channel->name, + ptr_server->nick); + } + else + { + irc_command_mode_nicks (ptr_server, ptr_channel, + "voice", "+", "v", argc, argv); + } + return WEECHAT_RC_OK; } @@ -5574,97 +5367,93 @@ irc_command_wallchops (void *data, struct t_gui_buffer *buffer, int argc, /* make C compiler happy */ (void) data; - if (argc > 1) + if (argc < 2) + return WEECHAT_RC_ERROR; + + if (irc_channel_is_channel (ptr_server, argv[1])) { - if (irc_channel_is_channel (ptr_server, argv[1])) - { - pos_channel = argv[1]; - pos_args = 2; - } - else - { - pos_channel = NULL; - pos_args = 1; - } - - /* channel not given, use default buffer */ - if (!pos_channel) - { - if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) - pos_channel = ptr_channel->name; - else - { - weechat_printf (ptr_server->buffer, - _("%s%s: \"%s\" command can only be " - "executed in a channel buffer"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "wallchops"); - return WEECHAT_RC_OK; - } - } - - ptr_channel = irc_channel_search (ptr_server, pos_channel); - if (!ptr_channel) - { - weechat_printf (ptr_server->buffer, - _("%s%s: you are not on channel \"%s\""), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - pos_channel); - return WEECHAT_RC_OK; - } - - weechat_printf (ptr_channel->buffer, - "%s%s%sOp%s -> %s%s%s: %s", - weechat_prefix ("network"), - IRC_COLOR_NOTICE, - /* TRANSLATORS: "Notice" is command name in IRC protocol (translation is frequently the same word) */ - _("Notice"), - IRC_COLOR_RESET, - IRC_COLOR_CHAT_CHANNEL, - ptr_channel->name, - IRC_COLOR_RESET, - argv_eol[pos_args]); - - support_wallchops = irc_server_get_isupport_value (ptr_server, - "WALLCHOPS"); - support_statusmsg = irc_server_get_isupport_value (ptr_server, - "STATUSMSG"); - if (support_wallchops - || (support_statusmsg && strchr (support_statusmsg, '@'))) - { - /* - * if WALLCHOPS is supported, or if STATUSMSG includes '@', - * then send a notice to @#channel - */ - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "NOTICE @%s :%s", - ptr_channel->name, argv_eol[pos_args]); - } - else - { - /* - * if WALLCHOPS is not supported and '@' not in STATUSMSG, - * then send a notice to each op of channel - */ - for (ptr_nick = ptr_channel->nicks; ptr_nick; - ptr_nick = ptr_nick->next_nick) - { - if (irc_nick_is_op (ptr_server, ptr_nick) - && (irc_server_strcasecmp (ptr_server, - ptr_nick->name, - ptr_server->nick) != 0)) - { - irc_server_sendf (ptr_server, - IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "NOTICE %s :%s", - ptr_nick->name, argv_eol[pos_args]); - } - } - } + pos_channel = argv[1]; + pos_args = 2; } else { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "wallchops"); + pos_channel = NULL; + pos_args = 1; + } + + /* channel not given, use default buffer */ + if (!pos_channel) + { + if (ptr_channel && (ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL)) + pos_channel = ptr_channel->name; + else + { + weechat_printf (ptr_server->buffer, + _("%s%s: \"%s\" command can only be " + "executed in a channel buffer"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + "wallchops"); + return WEECHAT_RC_OK; + } + } + + ptr_channel = irc_channel_search (ptr_server, pos_channel); + if (!ptr_channel) + { + weechat_printf (ptr_server->buffer, + _("%s%s: you are not on channel \"%s\""), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + pos_channel); + return WEECHAT_RC_OK; + } + + weechat_printf (ptr_channel->buffer, + "%s%s%sOp%s -> %s%s%s: %s", + weechat_prefix ("network"), + IRC_COLOR_NOTICE, + /* TRANSLATORS: "Notice" is command name in IRC protocol (translation is frequently the same word) */ + _("Notice"), + IRC_COLOR_RESET, + IRC_COLOR_CHAT_CHANNEL, + ptr_channel->name, + IRC_COLOR_RESET, + argv_eol[pos_args]); + + support_wallchops = irc_server_get_isupport_value (ptr_server, + "WALLCHOPS"); + support_statusmsg = irc_server_get_isupport_value (ptr_server, + "STATUSMSG"); + if (support_wallchops + || (support_statusmsg && strchr (support_statusmsg, '@'))) + { + /* + * if WALLCHOPS is supported, or if STATUSMSG includes '@', + * then send a notice to @#channel + */ + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "NOTICE @%s :%s", + ptr_channel->name, argv_eol[pos_args]); + } + else + { + /* + * if WALLCHOPS is not supported and '@' not in STATUSMSG, + * then send a notice to each op of channel + */ + for (ptr_nick = ptr_channel->nicks; ptr_nick; + ptr_nick = ptr_nick->next_nick) + { + if (irc_nick_is_op (ptr_server, ptr_nick) + && (irc_server_strcasecmp (ptr_server, + ptr_nick->name, + ptr_server->nick) != 0)) + { + irc_server_sendf (ptr_server, + IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "NOTICE %s :%s", + ptr_nick->name, argv_eol[pos_args]); + } + } } return WEECHAT_RC_OK; @@ -5686,15 +5475,11 @@ irc_command_wallops (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "WALLOPS :%s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "wallops"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "WALLOPS :%s", argv_eol[1]); return WEECHAT_RC_OK; } @@ -5769,9 +5554,7 @@ irc_command_whois (void *data, struct t_gui_buffer *buffer, int argc, } if (!ptr_nick) - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "whois"); - } + return WEECHAT_RC_ERROR; irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, "WHOIS %s%s%s", @@ -5798,15 +5581,11 @@ irc_command_whowas (void *data, struct t_gui_buffer *buffer, int argc, (void) data; (void) argv; - if (argc > 1) - { - irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, - "WHOWAS %s", argv_eol[1]); - } - else - { - IRC_COMMAND_TOO_FEW_ARGUMENTS(ptr_server->buffer, "whowas"); - } + if (argc < 2) + return WEECHAT_RC_ERROR; + + irc_server_sendf (ptr_server, IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL, + "WHOWAS %s", argv_eol[1]); return WEECHAT_RC_OK; } diff --git a/src/plugins/irc/irc-command.h b/src/plugins/irc/irc-command.h index 7a2d7fb08..8f76fb034 100644 --- a/src/plugins/irc/irc-command.h +++ b/src/plugins/irc/irc-command.h @@ -23,13 +23,6 @@ struct t_irc_server; struct t_irc_channel; -#define IRC_COMMAND_TOO_FEW_ARGUMENTS(__buffer, __command) \ - weechat_printf (__buffer, \ - _("%s%s: too few arguments for \"%s\" command"), \ - weechat_prefix ("error"), IRC_PLUGIN_NAME, \ - __command); \ - return WEECHAT_RC_OK; - #define IRC_COMMAND_CHECK_SERVER(__command, __check_connection) \ if (!ptr_server) \ { \