diff options
Diffstat (limited to 'src/fe-common/irc/fe-events.c')
-rw-r--r-- | src/fe-common/irc/fe-events.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/fe-common/irc/fe-events.c b/src/fe-common/irc/fe-events.c index 5cde9e4b..850174c5 100644 --- a/src/fe-common/irc/fe-events.c +++ b/src/fe-common/irc/fe-events.c @@ -41,6 +41,7 @@ #include "fe-queries.h" #include "fe-windows.h" #include "fe-irc-server.h" +#include "fe-irc-channels.h" static void event_privmsg(IRC_SERVER_REC *server, const char *data, const char *nick, const char *addr) @@ -52,15 +53,19 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data, params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg); if (nick == NULL) nick = server->real_address; if (addr == NULL) addr = ""; - if (*target == '@' && ischannel(target[1])) { + + if (fe_channel_is_opchannel(server, target)) { /* Hybrid 6 feature, send msg to all ops in channel */ - recoded = recode_in(SERVER(server), msg, target+1); + const char *cleantarget = fe_channel_skip_prefix(server, target); + recoded = recode_in(SERVER(server), msg, cleantarget); + + /* pass the original target to the signal, with the @+ here + * the other one is only needed for recode_in*/ signal_emit("message irc op_public", 5, - server, recoded, nick, addr, - get_visible_target(server, target+1)); + server, recoded, nick, addr, target); } else { - recoded = recode_in(SERVER(server), msg, ischannel(*target) ? target : nick); - signal_emit(ischannel(*target) ? + recoded = recode_in(SERVER(server), msg, server_ischannel(SERVER(server), target) ? target : nick); + signal_emit(server_ischannel(SERVER(server), target) ? "message public" : "message private", 5, server, recoded, nick, addr, get_visible_target(server, target)); |