mirror of
https://github.com/weechat/weechat.git
synced 2026-07-06 09:43:13 +02:00
Added /ban, /unban and /kickban commands, fixed /kick command
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2005-03-12
|
||||
ChangeLog - 2005-03-14
|
||||
|
||||
|
||||
Version 0.1.1 (under dev!):
|
||||
@@ -9,6 +9,7 @@ Version 0.1.1 (under dev!):
|
||||
* added crash dump when WeeChat receives SIGSEGV (Segmentation fault)
|
||||
* added new display engine: doesn't cut words at end of lines
|
||||
* added DCC send and DCC chat
|
||||
* added /ban, /unban and /kickban commands
|
||||
* added spanish translation
|
||||
* added --irc-commands and --weechat-commands command line options
|
||||
* connection to IRC server is now made by child process (non blocking)
|
||||
@@ -17,6 +18,7 @@ Version 0.1.1 (under dev!):
|
||||
* on server buffer, only server messages are logged
|
||||
* improved /help command output
|
||||
* plugins messages are logged with new config option (log_plugin_msg)
|
||||
* fixed /kick command
|
||||
* fixed /invite command (and now invite requests are displayed)
|
||||
* fixed /buffer close command (now ok when disconnected from server)
|
||||
* fixed display bugs when many windows are opened
|
||||
|
||||
+418
-360
File diff suppressed because it is too large
Load Diff
@@ -1234,6 +1234,10 @@ weechat_cmd_help (int argc, char **argv)
|
||||
_(weechat_commands[i].arguments));
|
||||
else
|
||||
gui_printf (NULL, "\n");
|
||||
if (weechat_commands[i].command_description &&
|
||||
weechat_commands[i].command_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
_(weechat_commands[i].command_description));
|
||||
if (weechat_commands[i].arguments_description &&
|
||||
weechat_commands[i].arguments_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
@@ -1256,6 +1260,10 @@ weechat_cmd_help (int argc, char **argv)
|
||||
_(irc_commands[i].arguments));
|
||||
else
|
||||
gui_printf (NULL, "\n");
|
||||
if (irc_commands[i].command_description &&
|
||||
irc_commands[i].command_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
_(irc_commands[i].command_description));
|
||||
if (irc_commands[i].arguments_description &&
|
||||
irc_commands[i].arguments_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
|
||||
@@ -40,6 +40,10 @@ t_irc_command irc_commands[] =
|
||||
N_("-all: toggle away status on all connected servers\n"
|
||||
"message: message for away (if no message is given, away status is removed)"),
|
||||
0, MAX_ARGS, 1, NULL, irc_cmd_send_away, NULL },
|
||||
{ "ban", N_("bans nicks or hosts"),
|
||||
N_("[channel] [nickname [nickname ...]]"),
|
||||
N_("channel: channel for ban\nnickname: user or host to ban"),
|
||||
0, MAX_ARGS, 1, NULL, irc_cmd_send_ban, NULL },
|
||||
{ "ctcp", N_("send a ctcp message"),
|
||||
N_("nickname type"),
|
||||
N_("nickname: user to send ctcp to\ntype: \"action\" or \"version\""),
|
||||
@@ -80,6 +84,10 @@ t_irc_command irc_commands[] =
|
||||
N_("[channel] nickname [comment]"),
|
||||
N_("channel: channel where user is\nnickname: nickname to kick\ncomment: comment for kick"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_kick, irc_cmd_recv_kick },
|
||||
{ "kickban", N_("kicks and bans a nick from a channel"),
|
||||
N_("[channel] nickname [comment]"),
|
||||
N_("channel: channel where user is\nnickname: nickname to kick and ban\ncomment: comment for kick"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_kickban, NULL },
|
||||
{ "kill", N_("close client-server connection"),
|
||||
N_("nickname comment"),
|
||||
N_("nickname: nickname\ncomment: comment for kill"),
|
||||
@@ -218,6 +226,10 @@ t_irc_command irc_commands[] =
|
||||
{ "trace", N_("find the route to specific server"),
|
||||
N_("[target]"), N_("target: server"),
|
||||
0, 1, 1, NULL, irc_cmd_send_trace, NULL },
|
||||
{ "unban", N_("unbans nicks or hosts"),
|
||||
N_("[channel] nickname [nickname ...]"),
|
||||
N_("channel: channel for unban\nnickname: user or host to unban"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_unban, NULL },
|
||||
{ "userhost", N_("return a list of information about nicknames"),
|
||||
N_("nickname [nickname ...]"), N_("nickname: nickname"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_userhost, NULL },
|
||||
@@ -311,6 +323,8 @@ t_irc_command irc_commands[] =
|
||||
{ "364", N_("links"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "365", N_("end of /links list"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "366", N_("end of /names list"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_366 },
|
||||
{ "367", N_("banlist"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_367 },
|
||||
{ "368", N_("end of banlist"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_368 },
|
||||
{ "369", N_("end of /whowas list"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "371", N_("a server message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "372", N_("a server message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
@@ -363,6 +377,8 @@ t_irc_command irc_commands[] =
|
||||
"", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_433 },
|
||||
{ "436", N_("nickname collision"),
|
||||
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "438", N_("not authorized to change nickname"),
|
||||
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_438 },
|
||||
{ "441", N_("user not in channel"),
|
||||
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "442", N_("not on channel"),
|
||||
|
||||
@@ -3200,6 +3200,172 @@ irc_cmd_recv_366 (t_irc_server *server, char *host, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_367: '367' command received (banlist)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_367 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos_ban, *pos_user, *pos_date, *pos;
|
||||
t_irc_channel *ptr_channel;
|
||||
t_gui_buffer *buffer;
|
||||
time_t datetime;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
/* look for channel */
|
||||
pos_channel = strchr (arguments, ' ');
|
||||
if (!pos_channel)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_channel[0] = '\0';
|
||||
pos_channel++;
|
||||
while (pos_channel[0] == ' ')
|
||||
pos_channel++;
|
||||
|
||||
/* look for ban mask */
|
||||
pos_ban = strchr (pos_channel, ' ');
|
||||
if (!pos_ban)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_ban[0] = '\0';
|
||||
pos_ban++;
|
||||
while (pos_ban[0] == ' ')
|
||||
pos_ban++;
|
||||
|
||||
/* look for user who set ban */
|
||||
pos_user = strchr (pos_ban, ' ');
|
||||
if (!pos_user)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_user[0] = '\0';
|
||||
pos_user++;
|
||||
while (pos_user[0] == ' ')
|
||||
pos_user++;
|
||||
|
||||
/* look for date/time */
|
||||
pos_date = strchr (pos_user, ' ');
|
||||
if (!pos_date)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_date[0] = '\0';
|
||||
pos_date++;
|
||||
while (pos_date[0] == ' ')
|
||||
pos_date++;
|
||||
|
||||
if (!pos_date || !pos_date[0])
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ptr_channel = channel_search (server, pos_channel);
|
||||
buffer = (ptr_channel) ? ptr_channel->buffer : server->buffer;
|
||||
|
||||
irc_display_prefix (buffer, PREFIX_INFO);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "[");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_CHANNEL, "%s", pos_channel);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "] ");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_HOST, "%s ", pos_ban);
|
||||
gui_printf (buffer, _("banned by"));
|
||||
pos = strchr (pos_user, '!');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_NICK, " %s ", pos_user);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "(");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_HOST, "%s", pos + 1);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, ")");
|
||||
}
|
||||
else
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_NICK, " %s", pos_user);
|
||||
datetime = (time_t)(atol (pos_date));
|
||||
gui_printf_nolog (buffer, ", %s", ctime (&datetime));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_368: '368' command received (end of banlist)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_368 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos_msg;
|
||||
t_irc_channel *ptr_channel;
|
||||
t_gui_buffer *buffer;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
pos_channel = strchr (arguments, ' ');
|
||||
if (!pos_channel)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "368");
|
||||
return -1;
|
||||
}
|
||||
pos_channel[0] = '\0';
|
||||
pos_channel++;
|
||||
while (pos_channel[0] == ' ')
|
||||
pos_channel++;
|
||||
|
||||
pos_msg = strchr (pos_channel, ' ');
|
||||
if (!pos_msg)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "368");
|
||||
return -1;
|
||||
}
|
||||
pos_msg[0] = '\0';
|
||||
pos_msg++;
|
||||
while (pos_msg[0] == ' ')
|
||||
pos_msg++;
|
||||
if (pos_msg[0] == ':')
|
||||
pos_msg++;
|
||||
|
||||
ptr_channel = channel_search (server, pos_channel);
|
||||
buffer = (ptr_channel) ? ptr_channel->buffer : server->buffer;
|
||||
|
||||
irc_display_prefix (buffer, PREFIX_INFO);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "[");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_CHANNEL, "%s", pos_channel);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "] ");
|
||||
gui_printf_nolog (buffer, "%s\n", pos_msg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_433: '433' command received (nickname already in use)
|
||||
*/
|
||||
@@ -3270,3 +3436,39 @@ irc_cmd_recv_433 (t_irc_server *server, char *host, char *arguments)
|
||||
return irc_cmd_recv_error (server, host, arguments);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_438: '438' command received (not authorized to change nickname)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_438 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
char *pos, *pos2;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) server;
|
||||
(void) host;
|
||||
|
||||
pos = strchr (arguments, ' ');
|
||||
irc_display_prefix (server->buffer, PREFIX_SERVER);
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
pos++;
|
||||
|
||||
pos2 = strstr (pos, " :");
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
pos2 += 2;
|
||||
gui_printf (server->buffer, "%s (%s => %s)\n", pos2, arguments, pos);
|
||||
}
|
||||
else
|
||||
gui_printf (server->buffer, "%s (%s)\n", pos, arguments);
|
||||
}
|
||||
else
|
||||
gui_printf (server->buffer, "%s\n", arguments);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+245
-19
@@ -187,6 +187,84 @@ irc_cmd_send_away (t_irc_server *server, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_ban: bans nicks or hosts
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_send_ban (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos, *pos2;
|
||||
|
||||
if (arguments)
|
||||
{
|
||||
pos_channel = NULL;
|
||||
pos = strchr (arguments, ' ');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos++;
|
||||
while (pos[0] == ' ')
|
||||
pos++;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos[0] = ' ';
|
||||
pos = arguments;
|
||||
}
|
||||
}
|
||||
else
|
||||
pos = arguments;
|
||||
|
||||
/* channel not given, use default buffer */
|
||||
if (!pos_channel)
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "ban");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
}
|
||||
|
||||
/* loop on users */
|
||||
while (pos && pos[0])
|
||||
{
|
||||
pos2 = strchr (pos, ' ');
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
pos2++;
|
||||
while (pos2[0] == ' ')
|
||||
pos2++;
|
||||
}
|
||||
server_sendf (server, "MODE %s +b %s\r\n", pos_channel, pos);
|
||||
pos = pos2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "ban");
|
||||
return -1;
|
||||
}
|
||||
server_sendf (server, "MODE %s +b\r\n", CHANNEL(gui_current_window->buffer)->name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_ctcp: send a ctcp message
|
||||
*/
|
||||
@@ -458,29 +536,28 @@ irc_cmd_send_join (t_irc_server *server, char *arguments)
|
||||
int
|
||||
irc_cmd_send_kick (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *args, *pos;
|
||||
char *pos_channel, *pos_nick, *pos_comment;
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
server_sendf (server, "KICK %s\r\n", arguments);
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos_nick = strchr (arguments, ' ');
|
||||
if (!pos_nick)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s wrong arguments for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "kick");
|
||||
return -1;
|
||||
}
|
||||
pos_nick[0] = '\0';
|
||||
pos_nick++;
|
||||
while (pos_nick[0] == ' ')
|
||||
pos_nick++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (BUFFER_IS_CHANNEL (gui_current_window->buffer))
|
||||
{
|
||||
args = strdup (arguments);
|
||||
pos = strchr (args, ' ');
|
||||
if (pos)
|
||||
pos[0] = '\0';
|
||||
if (pos)
|
||||
server_sendf (server,
|
||||
"KICK %s %s :%s\r\n",
|
||||
CHANNEL(gui_current_window->buffer)->name, args, pos + 1);
|
||||
else
|
||||
server_sendf (server,
|
||||
"KICK %s %s\r\n",
|
||||
CHANNEL(gui_current_window->buffer)->name, args);
|
||||
free (args);
|
||||
}
|
||||
else
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
@@ -488,7 +565,82 @@ irc_cmd_send_kick (t_irc_server *server, char *arguments)
|
||||
WEECHAT_ERROR, "kick");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
pos_nick = arguments;
|
||||
}
|
||||
|
||||
pos_comment = strchr (pos_nick, ' ');
|
||||
if (pos_comment)
|
||||
{
|
||||
pos_comment[0] = '\0';
|
||||
pos_comment++;
|
||||
while (pos_comment[0] == ' ')
|
||||
pos_comment++;
|
||||
}
|
||||
|
||||
if (pos_comment)
|
||||
server_sendf (server, "KICK %s %s :%s\r\n", pos_channel, pos_nick, pos_comment);
|
||||
else
|
||||
server_sendf (server, "KICK %s %s\r\n", pos_channel, pos_nick);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_kickban: forcibly remove a user from a channel and ban it
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_send_kickban (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos_nick, *pos_comment;
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos_nick = strchr (arguments, ' ');
|
||||
if (!pos_nick)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s wrong arguments for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "kickban");
|
||||
return -1;
|
||||
}
|
||||
pos_nick[0] = '\0';
|
||||
pos_nick++;
|
||||
while (pos_nick[0] == ' ')
|
||||
pos_nick++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "kickban");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
pos_nick = arguments;
|
||||
}
|
||||
|
||||
pos_comment = strchr (pos_nick, ' ');
|
||||
if (pos_comment)
|
||||
{
|
||||
pos_comment[0] = '\0';
|
||||
pos_comment++;
|
||||
while (pos_comment[0] == ' ')
|
||||
pos_comment++;
|
||||
}
|
||||
|
||||
server_sendf (server, "MODE %s +b %s\r\n", pos_channel, pos_nick);
|
||||
if (pos_comment)
|
||||
server_sendf (server, "KICK %s %s :%s\r\n", pos_channel, pos_nick, pos_comment);
|
||||
else
|
||||
server_sendf (server, "KICK %s %s\r\n", pos_channel, pos_nick);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1314,6 +1466,80 @@ irc_cmd_send_trace (t_irc_server *server, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_unban: unbans nicks or hosts
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_send_unban (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos, *pos2;
|
||||
|
||||
if (arguments)
|
||||
{
|
||||
pos_channel = NULL;
|
||||
pos = strchr (arguments, ' ');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos++;
|
||||
while (pos[0] == ' ')
|
||||
pos++;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos[0] = ' ';
|
||||
pos = arguments;
|
||||
}
|
||||
}
|
||||
else
|
||||
pos = arguments;
|
||||
|
||||
/* channel not given, use default buffer */
|
||||
if (!pos_channel)
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "unban");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
}
|
||||
|
||||
/* loop on users */
|
||||
while (pos && pos[0])
|
||||
{
|
||||
pos2 = strchr (pos, ' ');
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
pos2++;
|
||||
while (pos2[0] == ' ')
|
||||
pos2++;
|
||||
}
|
||||
server_sendf (server, "MODE %s -b %s\r\n", pos_channel, pos);
|
||||
pos = pos2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s wrong argument count for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "unban");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_userhost: return a list of information about nicknames
|
||||
*/
|
||||
|
||||
@@ -318,6 +318,7 @@ extern void irc_login (t_irc_server *);
|
||||
/* IRC commands issued by user */
|
||||
extern int irc_cmd_send_admin (t_irc_server *, char *);
|
||||
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_deop (t_irc_server *, int, char **);
|
||||
@@ -328,6 +329,7 @@ extern int irc_cmd_send_invite (t_irc_server *, int, char **);
|
||||
extern int irc_cmd_send_ison (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_join (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_kick (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_kickban (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_kill (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_links (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_list (t_irc_server *, char *);
|
||||
@@ -360,6 +362,7 @@ extern int irc_cmd_send_summon (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_time (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_topic (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_trace (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_unban (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_userhost (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_users (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_version (t_irc_server *, char *);
|
||||
@@ -413,6 +416,9 @@ extern int irc_cmd_recv_352 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_353 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_365 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_366 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_367 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_368 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_433 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_438 (t_irc_server *, char *, char *);
|
||||
|
||||
#endif /* irc.h */
|
||||
|
||||
+3
-1
@@ -1,7 +1,7 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2005-03-12
|
||||
ChangeLog - 2005-03-14
|
||||
|
||||
|
||||
Version 0.1.1 (under dev!):
|
||||
@@ -9,6 +9,7 @@ Version 0.1.1 (under dev!):
|
||||
* added crash dump when WeeChat receives SIGSEGV (Segmentation fault)
|
||||
* added new display engine: doesn't cut words at end of lines
|
||||
* added DCC send and DCC chat
|
||||
* added /ban, /unban and /kickban commands
|
||||
* added spanish translation
|
||||
* added --irc-commands and --weechat-commands command line options
|
||||
* connection to IRC server is now made by child process (non blocking)
|
||||
@@ -17,6 +18,7 @@ Version 0.1.1 (under dev!):
|
||||
* on server buffer, only server messages are logged
|
||||
* improved /help command output
|
||||
* plugins messages are logged with new config option (log_plugin_msg)
|
||||
* fixed /kick command
|
||||
* fixed /invite command (and now invite requests are displayed)
|
||||
* fixed /buffer close command (now ok when disconnected from server)
|
||||
* fixed display bugs when many windows are opened
|
||||
|
||||
+401
-343
File diff suppressed because it is too large
Load Diff
+410
-345
File diff suppressed because it is too large
Load Diff
+418
-360
File diff suppressed because it is too large
Load Diff
@@ -1234,6 +1234,10 @@ weechat_cmd_help (int argc, char **argv)
|
||||
_(weechat_commands[i].arguments));
|
||||
else
|
||||
gui_printf (NULL, "\n");
|
||||
if (weechat_commands[i].command_description &&
|
||||
weechat_commands[i].command_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
_(weechat_commands[i].command_description));
|
||||
if (weechat_commands[i].arguments_description &&
|
||||
weechat_commands[i].arguments_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
@@ -1256,6 +1260,10 @@ weechat_cmd_help (int argc, char **argv)
|
||||
_(irc_commands[i].arguments));
|
||||
else
|
||||
gui_printf (NULL, "\n");
|
||||
if (irc_commands[i].command_description &&
|
||||
irc_commands[i].command_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
_(irc_commands[i].command_description));
|
||||
if (irc_commands[i].arguments_description &&
|
||||
irc_commands[i].arguments_description[0])
|
||||
gui_printf (NULL, "\n%s\n",
|
||||
|
||||
@@ -40,6 +40,10 @@ t_irc_command irc_commands[] =
|
||||
N_("-all: toggle away status on all connected servers\n"
|
||||
"message: message for away (if no message is given, away status is removed)"),
|
||||
0, MAX_ARGS, 1, NULL, irc_cmd_send_away, NULL },
|
||||
{ "ban", N_("bans nicks or hosts"),
|
||||
N_("[channel] [nickname [nickname ...]]"),
|
||||
N_("channel: channel for ban\nnickname: user or host to ban"),
|
||||
0, MAX_ARGS, 1, NULL, irc_cmd_send_ban, NULL },
|
||||
{ "ctcp", N_("send a ctcp message"),
|
||||
N_("nickname type"),
|
||||
N_("nickname: user to send ctcp to\ntype: \"action\" or \"version\""),
|
||||
@@ -80,6 +84,10 @@ t_irc_command irc_commands[] =
|
||||
N_("[channel] nickname [comment]"),
|
||||
N_("channel: channel where user is\nnickname: nickname to kick\ncomment: comment for kick"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_kick, irc_cmd_recv_kick },
|
||||
{ "kickban", N_("kicks and bans a nick from a channel"),
|
||||
N_("[channel] nickname [comment]"),
|
||||
N_("channel: channel where user is\nnickname: nickname to kick and ban\ncomment: comment for kick"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_kickban, NULL },
|
||||
{ "kill", N_("close client-server connection"),
|
||||
N_("nickname comment"),
|
||||
N_("nickname: nickname\ncomment: comment for kill"),
|
||||
@@ -218,6 +226,10 @@ t_irc_command irc_commands[] =
|
||||
{ "trace", N_("find the route to specific server"),
|
||||
N_("[target]"), N_("target: server"),
|
||||
0, 1, 1, NULL, irc_cmd_send_trace, NULL },
|
||||
{ "unban", N_("unbans nicks or hosts"),
|
||||
N_("[channel] nickname [nickname ...]"),
|
||||
N_("channel: channel for unban\nnickname: user or host to unban"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_unban, NULL },
|
||||
{ "userhost", N_("return a list of information about nicknames"),
|
||||
N_("nickname [nickname ...]"), N_("nickname: nickname"),
|
||||
1, MAX_ARGS, 1, NULL, irc_cmd_send_userhost, NULL },
|
||||
@@ -311,6 +323,8 @@ t_irc_command irc_commands[] =
|
||||
{ "364", N_("links"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "365", N_("end of /links list"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "366", N_("end of /names list"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_366 },
|
||||
{ "367", N_("banlist"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_367 },
|
||||
{ "368", N_("end of banlist"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_368 },
|
||||
{ "369", N_("end of /whowas list"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "371", N_("a server message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
{ "372", N_("a server message"), "", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_server_msg },
|
||||
@@ -363,6 +377,8 @@ t_irc_command irc_commands[] =
|
||||
"", "", 0, 0, 1, NULL, NULL, irc_cmd_recv_433 },
|
||||
{ "436", N_("nickname collision"),
|
||||
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "438", N_("not authorized to change nickname"),
|
||||
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_438 },
|
||||
{ "441", N_("user not in channel"),
|
||||
"", "", 0, MAX_ARGS, 1, NULL, NULL, irc_cmd_recv_error },
|
||||
{ "442", N_("not on channel"),
|
||||
|
||||
@@ -3200,6 +3200,172 @@ irc_cmd_recv_366 (t_irc_server *server, char *host, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_367: '367' command received (banlist)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_367 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos_ban, *pos_user, *pos_date, *pos;
|
||||
t_irc_channel *ptr_channel;
|
||||
t_gui_buffer *buffer;
|
||||
time_t datetime;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
/* look for channel */
|
||||
pos_channel = strchr (arguments, ' ');
|
||||
if (!pos_channel)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_channel[0] = '\0';
|
||||
pos_channel++;
|
||||
while (pos_channel[0] == ' ')
|
||||
pos_channel++;
|
||||
|
||||
/* look for ban mask */
|
||||
pos_ban = strchr (pos_channel, ' ');
|
||||
if (!pos_ban)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_ban[0] = '\0';
|
||||
pos_ban++;
|
||||
while (pos_ban[0] == ' ')
|
||||
pos_ban++;
|
||||
|
||||
/* look for user who set ban */
|
||||
pos_user = strchr (pos_ban, ' ');
|
||||
if (!pos_user)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_user[0] = '\0';
|
||||
pos_user++;
|
||||
while (pos_user[0] == ' ')
|
||||
pos_user++;
|
||||
|
||||
/* look for date/time */
|
||||
pos_date = strchr (pos_user, ' ');
|
||||
if (!pos_date)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
pos_date[0] = '\0';
|
||||
pos_date++;
|
||||
while (pos_date[0] == ' ')
|
||||
pos_date++;
|
||||
|
||||
if (!pos_date || !pos_date[0])
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "367");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ptr_channel = channel_search (server, pos_channel);
|
||||
buffer = (ptr_channel) ? ptr_channel->buffer : server->buffer;
|
||||
|
||||
irc_display_prefix (buffer, PREFIX_INFO);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "[");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_CHANNEL, "%s", pos_channel);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "] ");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_HOST, "%s ", pos_ban);
|
||||
gui_printf (buffer, _("banned by"));
|
||||
pos = strchr (pos_user, '!');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_NICK, " %s ", pos_user);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "(");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_HOST, "%s", pos + 1);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, ")");
|
||||
}
|
||||
else
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_NICK, " %s", pos_user);
|
||||
datetime = (time_t)(atol (pos_date));
|
||||
gui_printf_nolog (buffer, ", %s", ctime (&datetime));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_368: '368' command received (end of banlist)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_368 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos_msg;
|
||||
t_irc_channel *ptr_channel;
|
||||
t_gui_buffer *buffer;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) host;
|
||||
|
||||
pos_channel = strchr (arguments, ' ');
|
||||
if (!pos_channel)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "368");
|
||||
return -1;
|
||||
}
|
||||
pos_channel[0] = '\0';
|
||||
pos_channel++;
|
||||
while (pos_channel[0] == ' ')
|
||||
pos_channel++;
|
||||
|
||||
pos_msg = strchr (pos_channel, ' ');
|
||||
if (!pos_msg)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s cannot parse \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "368");
|
||||
return -1;
|
||||
}
|
||||
pos_msg[0] = '\0';
|
||||
pos_msg++;
|
||||
while (pos_msg[0] == ' ')
|
||||
pos_msg++;
|
||||
if (pos_msg[0] == ':')
|
||||
pos_msg++;
|
||||
|
||||
ptr_channel = channel_search (server, pos_channel);
|
||||
buffer = (ptr_channel) ? ptr_channel->buffer : server->buffer;
|
||||
|
||||
irc_display_prefix (buffer, PREFIX_INFO);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "[");
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_CHANNEL, "%s", pos_channel);
|
||||
gui_printf_color (buffer, COLOR_WIN_CHAT_DARK, "] ");
|
||||
gui_printf_nolog (buffer, "%s\n", pos_msg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_433: '433' command received (nickname already in use)
|
||||
*/
|
||||
@@ -3270,3 +3436,39 @@ irc_cmd_recv_433 (t_irc_server *server, char *host, char *arguments)
|
||||
return irc_cmd_recv_error (server, host, arguments);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_recv_438: '438' command received (not authorized to change nickname)
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_recv_438 (t_irc_server *server, char *host, char *arguments)
|
||||
{
|
||||
char *pos, *pos2;
|
||||
|
||||
/* make gcc happy */
|
||||
(void) server;
|
||||
(void) host;
|
||||
|
||||
pos = strchr (arguments, ' ');
|
||||
irc_display_prefix (server->buffer, PREFIX_SERVER);
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
pos++;
|
||||
|
||||
pos2 = strstr (pos, " :");
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
pos2 += 2;
|
||||
gui_printf (server->buffer, "%s (%s => %s)\n", pos2, arguments, pos);
|
||||
}
|
||||
else
|
||||
gui_printf (server->buffer, "%s (%s)\n", pos, arguments);
|
||||
}
|
||||
else
|
||||
gui_printf (server->buffer, "%s\n", arguments);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+245
-19
@@ -187,6 +187,84 @@ irc_cmd_send_away (t_irc_server *server, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_ban: bans nicks or hosts
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_send_ban (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos, *pos2;
|
||||
|
||||
if (arguments)
|
||||
{
|
||||
pos_channel = NULL;
|
||||
pos = strchr (arguments, ' ');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos++;
|
||||
while (pos[0] == ' ')
|
||||
pos++;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos[0] = ' ';
|
||||
pos = arguments;
|
||||
}
|
||||
}
|
||||
else
|
||||
pos = arguments;
|
||||
|
||||
/* channel not given, use default buffer */
|
||||
if (!pos_channel)
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "ban");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
}
|
||||
|
||||
/* loop on users */
|
||||
while (pos && pos[0])
|
||||
{
|
||||
pos2 = strchr (pos, ' ');
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
pos2++;
|
||||
while (pos2[0] == ' ')
|
||||
pos2++;
|
||||
}
|
||||
server_sendf (server, "MODE %s +b %s\r\n", pos_channel, pos);
|
||||
pos = pos2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "ban");
|
||||
return -1;
|
||||
}
|
||||
server_sendf (server, "MODE %s +b\r\n", CHANNEL(gui_current_window->buffer)->name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_ctcp: send a ctcp message
|
||||
*/
|
||||
@@ -458,29 +536,28 @@ irc_cmd_send_join (t_irc_server *server, char *arguments)
|
||||
int
|
||||
irc_cmd_send_kick (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *args, *pos;
|
||||
char *pos_channel, *pos_nick, *pos_comment;
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
server_sendf (server, "KICK %s\r\n", arguments);
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos_nick = strchr (arguments, ' ');
|
||||
if (!pos_nick)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s wrong arguments for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "kick");
|
||||
return -1;
|
||||
}
|
||||
pos_nick[0] = '\0';
|
||||
pos_nick++;
|
||||
while (pos_nick[0] == ' ')
|
||||
pos_nick++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (BUFFER_IS_CHANNEL (gui_current_window->buffer))
|
||||
{
|
||||
args = strdup (arguments);
|
||||
pos = strchr (args, ' ');
|
||||
if (pos)
|
||||
pos[0] = '\0';
|
||||
if (pos)
|
||||
server_sendf (server,
|
||||
"KICK %s %s :%s\r\n",
|
||||
CHANNEL(gui_current_window->buffer)->name, args, pos + 1);
|
||||
else
|
||||
server_sendf (server,
|
||||
"KICK %s %s\r\n",
|
||||
CHANNEL(gui_current_window->buffer)->name, args);
|
||||
free (args);
|
||||
}
|
||||
else
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
@@ -488,7 +565,82 @@ irc_cmd_send_kick (t_irc_server *server, char *arguments)
|
||||
WEECHAT_ERROR, "kick");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
pos_nick = arguments;
|
||||
}
|
||||
|
||||
pos_comment = strchr (pos_nick, ' ');
|
||||
if (pos_comment)
|
||||
{
|
||||
pos_comment[0] = '\0';
|
||||
pos_comment++;
|
||||
while (pos_comment[0] == ' ')
|
||||
pos_comment++;
|
||||
}
|
||||
|
||||
if (pos_comment)
|
||||
server_sendf (server, "KICK %s %s :%s\r\n", pos_channel, pos_nick, pos_comment);
|
||||
else
|
||||
server_sendf (server, "KICK %s %s\r\n", pos_channel, pos_nick);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_kickban: forcibly remove a user from a channel and ban it
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_send_kickban (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos_nick, *pos_comment;
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos_nick = strchr (arguments, ' ');
|
||||
if (!pos_nick)
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s wrong arguments for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "kickban");
|
||||
return -1;
|
||||
}
|
||||
pos_nick[0] = '\0';
|
||||
pos_nick++;
|
||||
while (pos_nick[0] == ' ')
|
||||
pos_nick++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "kickban");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
pos_nick = arguments;
|
||||
}
|
||||
|
||||
pos_comment = strchr (pos_nick, ' ');
|
||||
if (pos_comment)
|
||||
{
|
||||
pos_comment[0] = '\0';
|
||||
pos_comment++;
|
||||
while (pos_comment[0] == ' ')
|
||||
pos_comment++;
|
||||
}
|
||||
|
||||
server_sendf (server, "MODE %s +b %s\r\n", pos_channel, pos_nick);
|
||||
if (pos_comment)
|
||||
server_sendf (server, "KICK %s %s :%s\r\n", pos_channel, pos_nick, pos_comment);
|
||||
else
|
||||
server_sendf (server, "KICK %s %s\r\n", pos_channel, pos_nick);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1314,6 +1466,80 @@ irc_cmd_send_trace (t_irc_server *server, char *arguments)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_unban: unbans nicks or hosts
|
||||
*/
|
||||
|
||||
int
|
||||
irc_cmd_send_unban (t_irc_server *server, char *arguments)
|
||||
{
|
||||
char *pos_channel, *pos, *pos2;
|
||||
|
||||
if (arguments)
|
||||
{
|
||||
pos_channel = NULL;
|
||||
pos = strchr (arguments, ' ');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
|
||||
if (string_is_channel (arguments))
|
||||
{
|
||||
pos_channel = arguments;
|
||||
pos++;
|
||||
while (pos[0] == ' ')
|
||||
pos++;
|
||||
}
|
||||
else
|
||||
{
|
||||
pos[0] = ' ';
|
||||
pos = arguments;
|
||||
}
|
||||
}
|
||||
else
|
||||
pos = arguments;
|
||||
|
||||
/* channel not given, use default buffer */
|
||||
if (!pos_channel)
|
||||
{
|
||||
if (!BUFFER_IS_CHANNEL(gui_current_window->buffer))
|
||||
{
|
||||
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, "unban");
|
||||
return -1;
|
||||
}
|
||||
pos_channel = CHANNEL(gui_current_window->buffer)->name;
|
||||
}
|
||||
|
||||
/* loop on users */
|
||||
while (pos && pos[0])
|
||||
{
|
||||
pos2 = strchr (pos, ' ');
|
||||
if (pos2)
|
||||
{
|
||||
pos2[0] = '\0';
|
||||
pos2++;
|
||||
while (pos2[0] == ' ')
|
||||
pos2++;
|
||||
}
|
||||
server_sendf (server, "MODE %s -b %s\r\n", pos_channel, pos);
|
||||
pos = pos2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
irc_display_prefix (server->buffer, PREFIX_ERROR);
|
||||
gui_printf_nolog (server->buffer,
|
||||
_("%s wrong argument count for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "unban");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_cmd_send_userhost: return a list of information about nicknames
|
||||
*/
|
||||
|
||||
@@ -318,6 +318,7 @@ extern void irc_login (t_irc_server *);
|
||||
/* IRC commands issued by user */
|
||||
extern int irc_cmd_send_admin (t_irc_server *, char *);
|
||||
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_deop (t_irc_server *, int, char **);
|
||||
@@ -328,6 +329,7 @@ extern int irc_cmd_send_invite (t_irc_server *, int, char **);
|
||||
extern int irc_cmd_send_ison (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_join (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_kick (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_kickban (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_kill (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_links (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_list (t_irc_server *, char *);
|
||||
@@ -360,6 +362,7 @@ extern int irc_cmd_send_summon (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_time (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_topic (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_trace (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_unban (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_userhost (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_users (t_irc_server *, char *);
|
||||
extern int irc_cmd_send_version (t_irc_server *, char *);
|
||||
@@ -413,6 +416,9 @@ extern int irc_cmd_recv_352 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_353 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_365 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_366 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_367 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_368 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_433 (t_irc_server *, char *, char *);
|
||||
extern int irc_cmd_recv_438 (t_irc_server *, char *, char *);
|
||||
|
||||
#endif /* irc.h */
|
||||
|
||||
Reference in New Issue
Block a user