Add support for the ACCEPT command, which is part of the

CALLERID server side ignore system in hybrid7 and derived
ircds.


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4546 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Jilles Tjoelker 2007-06-08 18:49:24 +00:00 committed by jilles
parent 10ae40c368
commit 9d6335735b
7 changed files with 59 additions and 3 deletions

28
docs/help/in/accept.in Normal file
View File

@ -0,0 +1,28 @@
@SYNTAX:accept@
MODE <your nick> <+|->g
Works only in some IRC networks.
ACCEPT allows you to specify who you want to receive private messages
and notices from while you are in callerid (+g) mode.
When you have user mode +g enabled, messages from other users are blocked and
the sender is notified; you are also notified but at most once per minute.
IRC operators and services can usually send through +g.
The accept list is lost when you disconnect.
Users are automatically removed from the accept list if they quit, split
or change nick.
The argument is a comma-separated list of nicks to add or (when prefixed
with a '-') to remove. No output is returned for users successfully added
or removed.
If no arguments are given, your accept list is displayed (ACCEPT * on the
protocol level).
Example:
/ACCEPT user1,user2,-user3,-user4 - Adds user1 and user2 and removes
user3 and user4.
See also: IGNORE, SILENCE

View File

@ -40,5 +40,5 @@ Some suggestions for ignoring annoying public aways:
For regular expressions, see `man 7 regex`. For regular expressions, see `man 7 regex`.
See also: UNIGNORE See also: UNIGNORE, SILENCE, ACCEPT

View File

@ -20,5 +20,5 @@ If you only specify a nickname, you can list the patterns in the
silence list owned by that nickname. If no arguments are given, your silence list owned by that nickname. If no arguments are given, your
own silence list is displayed. own silence list is displayed.
See also: IGNORE See also: IGNORE, ACCEPT

View File

@ -195,6 +195,17 @@ static void event_silence_list(IRC_SERVER_REC *server, const char *data)
g_free(params); g_free(params);
} }
static void event_accept_list(IRC_SERVER_REC *server, const char *data)
{
char *params, *accepted;
g_return_if_fail(data != NULL);
g_return_if_fail(server != NULL);
params = event_get_params(data, 2, NULL, &accepted);
printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_ACCEPT_LIST, accepted);
g_free(params);
}
static void event_invite_list(IRC_SERVER_REC *server, const char *data) static void event_invite_list(IRC_SERVER_REC *server, const char *data)
{ {
@ -583,6 +594,7 @@ void fe_events_numeric_init(void)
signal_add("event 315", (SIGNAL_FUNC) event_end_of_who); signal_add("event 315", (SIGNAL_FUNC) event_end_of_who);
signal_add("event 271", (SIGNAL_FUNC) event_silence_list); signal_add("event 271", (SIGNAL_FUNC) event_silence_list);
signal_add("event 272", (SIGNAL_FUNC) sig_empty); signal_add("event 272", (SIGNAL_FUNC) sig_empty);
signal_add("event 281", (SIGNAL_FUNC) event_accept_list);
signal_add("event 367", (SIGNAL_FUNC) event_ban_list); signal_add("event 367", (SIGNAL_FUNC) event_ban_list);
signal_add("event 348", (SIGNAL_FUNC) event_eban_list); signal_add("event 348", (SIGNAL_FUNC) event_eban_list);
signal_add("event 346", (SIGNAL_FUNC) event_invite_list); signal_add("event 346", (SIGNAL_FUNC) event_invite_list);
@ -671,6 +683,7 @@ void fe_events_numeric_deinit(void)
signal_remove("event 315", (SIGNAL_FUNC) event_end_of_who); signal_remove("event 315", (SIGNAL_FUNC) event_end_of_who);
signal_remove("event 271", (SIGNAL_FUNC) event_silence_list); signal_remove("event 271", (SIGNAL_FUNC) event_silence_list);
signal_remove("event 272", (SIGNAL_FUNC) sig_empty); signal_remove("event 272", (SIGNAL_FUNC) sig_empty);
signal_remove("event 281", (SIGNAL_FUNC) event_accept_list);
signal_remove("event 367", (SIGNAL_FUNC) event_ban_list); signal_remove("event 367", (SIGNAL_FUNC) event_ban_list);
signal_remove("event 348", (SIGNAL_FUNC) event_eban_list); signal_remove("event 348", (SIGNAL_FUNC) event_eban_list);
signal_remove("event 346", (SIGNAL_FUNC) event_invite_list); signal_remove("event 346", (SIGNAL_FUNC) event_invite_list);

View File

@ -161,6 +161,7 @@ FORMAT_REC fecommon_irc_formats[] = {
{ "unsilenced", "Unsilenced {nick $0}", 1, { 0 } }, { "unsilenced", "Unsilenced {nick $0}", 1, { 0 } },
{ "silence_line", "{nick $0}: silence {ban $1}", 2, { 0, 0 } }, { "silence_line", "{nick $0}: silence {ban $1}", 2, { 0, 0 } },
{ "ask_oper_pass", "Operator password:", 0 }, { "ask_oper_pass", "Operator password:", 0 },
{ "accept_list", "Accepted users: {hilight $0}", 1, { 0 } },
{ NULL, NULL, 0 } { NULL, NULL, 0 }
}; };

View File

@ -130,7 +130,8 @@ enum {
IRCTXT_SILENCED, IRCTXT_SILENCED,
IRCTXT_UNSILENCED, IRCTXT_UNSILENCED,
IRCTXT_SILENCE_LINE, IRCTXT_SILENCE_LINE,
IRCTXT_ASK_OPER_PASS IRCTXT_ASK_OPER_PASS,
IRCTXT_ACCEPT_LIST
}; };
extern FORMAT_REC fecommon_irc_formats[]; extern FORMAT_REC fecommon_irc_formats[];

View File

@ -940,6 +940,17 @@ static void cmd_oper(const char *data, IRC_SERVER_REC *server)
cmd_params_free(free_arg); cmd_params_free(free_arg);
} }
/* SYNTAX: ACCEPT [[-]nick,...] */
static void cmd_accept(const char *data, IRC_SERVER_REC *server)
{
CMD_IRC_SERVER(server);
if (*data == '\0')
irc_send_cmd(server, "ACCEPT *");
else
irc_send_cmdv(server, "ACCEPT %s", data);
}
/* SYNTAX: UNSILENCE <nick!user@host> */ /* SYNTAX: UNSILENCE <nick!user@host> */
static void cmd_unsilence(const char *data, IRC_SERVER_REC *server) static void cmd_unsilence(const char *data, IRC_SERVER_REC *server)
{ {
@ -1015,6 +1026,7 @@ void irc_commands_init(void)
command_bind_irc("away", NULL, (SIGNAL_FUNC) cmd_away); command_bind_irc("away", NULL, (SIGNAL_FUNC) cmd_away);
/* SYNTAX: ISON <nicks> */ /* SYNTAX: ISON <nicks> */
command_bind_irc("ison", NULL, (SIGNAL_FUNC) command_1self); command_bind_irc("ison", NULL, (SIGNAL_FUNC) command_1self);
command_bind_irc("accept", NULL, (SIGNAL_FUNC) cmd_accept);
/* SYNTAX: ADMIN [<server>|<nickname>] */ /* SYNTAX: ADMIN [<server>|<nickname>] */
command_bind_irc("admin", NULL, (SIGNAL_FUNC) command_self); command_bind_irc("admin", NULL, (SIGNAL_FUNC) command_self);
/* SYNTAX: INFO [<server>] */ /* SYNTAX: INFO [<server>] */
@ -1110,6 +1122,7 @@ void irc_commands_deinit(void)
command_unbind("kill", (SIGNAL_FUNC) command_2self); command_unbind("kill", (SIGNAL_FUNC) command_2self);
command_unbind("away", (SIGNAL_FUNC) cmd_away); command_unbind("away", (SIGNAL_FUNC) cmd_away);
command_unbind("ison", (SIGNAL_FUNC) command_1self); command_unbind("ison", (SIGNAL_FUNC) command_1self);
command_unbind("accept", (SIGNAL_FUNC) cmd_accept);
command_unbind("admin", (SIGNAL_FUNC) command_self); command_unbind("admin", (SIGNAL_FUNC) command_self);
command_unbind("info", (SIGNAL_FUNC) command_self); command_unbind("info", (SIGNAL_FUNC) command_self);
command_unbind("knock", (SIGNAL_FUNC) command_self); command_unbind("knock", (SIGNAL_FUNC) command_self);