diff options
Diffstat (limited to 'src/irc/core/irc-commands.c')
-rw-r--r-- | src/irc/core/irc-commands.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c index 9ac6ca66..f760d234 100644 --- a/src/irc/core/irc-commands.c +++ b/src/irc/core/irc-commands.c @@ -623,28 +623,39 @@ static void cmd_wall(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item chanrec = irc_channel_find(server, channame); if (chanrec == NULL) cmd_param_error(CMDERR_CHAN_NOT_FOUND); - /* send notice to all ops */ - nicks = NULL; - g_hash_table_foreach(chanrec->nicks, (GHFunc) cmd_wall_hash, &nicks); - - args = g_strconcat(chanrec->name, " ", msg, NULL); - msg = parse_special_string(settings_get_str("wall_format"), - SERVER(server), item, args, NULL, 0); - g_free(args); - - for (tmp = nicks; tmp != NULL; tmp = tmp->next) { - NICK_REC *rec = tmp->data; - - if (rec != chanrec->ownnick) - irc_send_cmdv(server, "NOTICE %s :%s", rec->nick, msg); + /* See if the server has advertised support of wallchops */ + if (g_hash_table_lookup(chanrec->server->isupport, "statusmsg") || + g_hash_table_lookup(chanrec->server->isupport, "wallchops")) + irc_send_cmdv(server, "NOTICE @%s :%s", chanrec->name, msg); + else { + /* Fall back to manually noticing each op */ + nicks = NULL; + g_hash_table_foreach(chanrec->nicks, + (GHFunc) cmd_wall_hash, &nicks); + + args = g_strconcat(chanrec->name, " ", msg, NULL); + msg = parse_special_string(settings_get_str("wall_format"), + SERVER(server), item, args, NULL, 0); + g_free(args); + + for (tmp = nicks; tmp != NULL; tmp = tmp->next) { + NICK_REC *rec = tmp->data; + + if (rec != chanrec->ownnick) { + irc_send_cmdv(server, "NOTICE %s :%s", + rec->nick, msg); + } + } + g_free(msg); + g_slist_free(nicks); } - g_free(msg); - g_slist_free(nicks); cmd_params_free(free_arg); } /* SYNTAX: WALLCHOPS <channel> <message> */ +/* ircu is the only major server i can see which supports this + and it supports NOTICE @#channel anyway */ static void cmd_wallchops(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item) { char *channame, *msg; |