diff options
-rw-r--r-- | docs/help/in/accept.in | 28 | ||||
-rw-r--r-- | docs/help/in/ignore.in | 2 | ||||
-rw-r--r-- | docs/help/in/silence.in | 2 | ||||
-rw-r--r-- | src/fe-common/irc/fe-events-numeric.c | 13 | ||||
-rw-r--r-- | src/fe-common/irc/module-formats.c | 1 | ||||
-rw-r--r-- | src/fe-common/irc/module-formats.h | 3 | ||||
-rw-r--r-- | src/irc/core/irc-commands.c | 13 |
7 files changed, 59 insertions, 3 deletions
diff --git a/docs/help/in/accept.in b/docs/help/in/accept.in new file mode 100644 index 00000000..4d74fe98 --- /dev/null +++ b/docs/help/in/accept.in @@ -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 + diff --git a/docs/help/in/ignore.in b/docs/help/in/ignore.in index 16a870af..54685035 100644 --- a/docs/help/in/ignore.in +++ b/docs/help/in/ignore.in @@ -40,5 +40,5 @@ Some suggestions for ignoring annoying public aways: For regular expressions, see `man 7 regex`. -See also: UNIGNORE +See also: UNIGNORE, SILENCE, ACCEPT diff --git a/docs/help/in/silence.in b/docs/help/in/silence.in index cf9c59e0..d4562cf7 100644 --- a/docs/help/in/silence.in +++ b/docs/help/in/silence.in @@ -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 own silence list is displayed. -See also: IGNORE +See also: IGNORE, ACCEPT diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index 9d12ed0a..dcf8d5ba 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -195,6 +195,17 @@ static void event_silence_list(IRC_SERVER_REC *server, const char *data) 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) { @@ -583,6 +594,7 @@ void fe_events_numeric_init(void) signal_add("event 315", (SIGNAL_FUNC) event_end_of_who); signal_add("event 271", (SIGNAL_FUNC) event_silence_list); 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 348", (SIGNAL_FUNC) event_eban_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 271", (SIGNAL_FUNC) event_silence_list); 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 348", (SIGNAL_FUNC) event_eban_list); signal_remove("event 346", (SIGNAL_FUNC) event_invite_list); diff --git a/src/fe-common/irc/module-formats.c b/src/fe-common/irc/module-formats.c index 4e1626eb..f1720962 100644 --- a/src/fe-common/irc/module-formats.c +++ b/src/fe-common/irc/module-formats.c @@ -161,6 +161,7 @@ FORMAT_REC fecommon_irc_formats[] = { { "unsilenced", "Unsilenced {nick $0}", 1, { 0 } }, { "silence_line", "{nick $0}: silence {ban $1}", 2, { 0, 0 } }, { "ask_oper_pass", "Operator password:", 0 }, + { "accept_list", "Accepted users: {hilight $0}", 1, { 0 } }, { NULL, NULL, 0 } }; diff --git a/src/fe-common/irc/module-formats.h b/src/fe-common/irc/module-formats.h index ae2e55a9..d38ce686 100644 --- a/src/fe-common/irc/module-formats.h +++ b/src/fe-common/irc/module-formats.h @@ -130,7 +130,8 @@ enum { IRCTXT_SILENCED, IRCTXT_UNSILENCED, IRCTXT_SILENCE_LINE, - IRCTXT_ASK_OPER_PASS + IRCTXT_ASK_OPER_PASS, + IRCTXT_ACCEPT_LIST }; extern FORMAT_REC fecommon_irc_formats[]; diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c index 45fb0090..7f31b59d 100644 --- a/src/irc/core/irc-commands.c +++ b/src/irc/core/irc-commands.c @@ -940,6 +940,17 @@ static void cmd_oper(const char *data, IRC_SERVER_REC *server) 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> */ 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); /* SYNTAX: ISON <nicks> */ command_bind_irc("ison", NULL, (SIGNAL_FUNC) command_1self); + command_bind_irc("accept", NULL, (SIGNAL_FUNC) cmd_accept); /* SYNTAX: ADMIN [<server>|<nickname>] */ command_bind_irc("admin", NULL, (SIGNAL_FUNC) command_self); /* SYNTAX: INFO [<server>] */ @@ -1110,6 +1122,7 @@ void irc_commands_deinit(void) command_unbind("kill", (SIGNAL_FUNC) command_2self); command_unbind("away", (SIGNAL_FUNC) cmd_away); command_unbind("ison", (SIGNAL_FUNC) command_1self); + command_unbind("accept", (SIGNAL_FUNC) cmd_accept); command_unbind("admin", (SIGNAL_FUNC) command_self); command_unbind("info", (SIGNAL_FUNC) command_self); command_unbind("knock", (SIGNAL_FUNC) command_self); |