From 3f3c60a3df68260bd82efa2fc00a1fbd6bb7d54e Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 25 Jul 2006 10:30:46 +0000 Subject: Allow PRIVMSG and NOTICE targets of $ to the module events (this wasnt trivial and is almost a damn feature) git-svn-id: http://svn.inspircd.org/repository/branches/1_0_stable@4538 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/cmd_notice.cpp | 22 ++++++++++++++-------- src/cmd_privmsg.cpp | 22 ++++++++++++++-------- src/modules/m_spanningtree.cpp | 20 ++++++++++++++++++-- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/cmd_notice.cpp b/src/cmd_notice.cpp index f95c2dbac..4da092914 100644 --- a/src/cmd_notice.cpp +++ b/src/cmd_notice.cpp @@ -68,14 +68,20 @@ void cmd_notice::Handle (char **parameters, int pcnt, userrec *user) return; if ((parameters[0][0] == '$') && ((*user->oper) || (is_uline(user->server)))) { - // notice to server mask - char* servermask = parameters[0]; - servermask++; - if (match(Config->ServerName,servermask)) - { - NoticeAll(user, true, "%s",parameters[1]); - } - return; + int MOD_RESULT = 0; + std::string temp = parameters[1]; + FOREACH_RESULT(I_OnUserPreNotice,OnUserPreNotice(user,(void*)parameters[0],TYPE_SERVER,temp,0)); + if (MOD_RESULT) + return; + parameters[1] = (char*)temp.c_str(); + // notice to server mask + const char* servermask = parameters[0] + 1; + if (match(Config->ServerName,servermask)) + { + NoticeAll(user, true, "%s",parameters[1]); + } + FOREACH_MOD(I_OnUserMessage,OnUserNotice(user,(void*)parameters[0],TYPE_SERVER,parameters[1],0)); + return; } char status = 0; if ((*parameters[0] == '@') || (*parameters[0] == '%') || (*parameters[0] == '+')) diff --git a/src/cmd_privmsg.cpp b/src/cmd_privmsg.cpp index bf962f27e..f4938fae3 100644 --- a/src/cmd_privmsg.cpp +++ b/src/cmd_privmsg.cpp @@ -68,14 +68,20 @@ void cmd_privmsg::Handle (char **parameters, int pcnt, userrec *user) return; if ((parameters[0][0] == '$') && ((*user->oper) || (is_uline(user->server)))) { - // notice to server mask - char* servermask = parameters[0]; - servermask++; - if (match(Config->ServerName,servermask)) - { - ServerPrivmsgAll("%s",parameters[1]); - } - return; + int MOD_RESULT = 0; + std::string temp = parameters[1]; + FOREACH_RESULT(I_OnUserPreMessage,OnUserPreMessage(user,(void*)parameters[0],TYPE_SERVER,temp,0)); + if (MOD_RESULT) + return; + parameters[1] = (char*)temp.c_str(); + // notice to server mask + const char* servermask = parameters[0] + 1; + if (match(Config->ServerName,servermask)) + { + ServerPrivmsgAll("%s",parameters[1]); + } + FOREACH_MOD(I_OnUserMessage,OnUserMessage(user,(void*)parameters[0],TYPE_SERVER,parameters[1],0)); + return; } char status = 0; if ((*parameters[0] == '@') || (*parameters[0] == '%') || (*parameters[0] == '+')) diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index b37d8f450..e1c752627 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -3467,7 +3467,7 @@ class ModuleSpanningTree : public Module DoOneToOne(user->nick,"NOTICE",params,d->server); } } - else + else if (target_type == TYPE_CHANNEL) { if (user->fd > -1) { @@ -3486,6 +3486,14 @@ class ModuleSpanningTree : public Module } } } + else if (target_type == TYPE_SERVER) + { + char* target = (char*)dest; + std::deque par; + par.push_back(target); + par.push_back(":"+text); + DoOneToMany(user->nick,"NOTICE",par); + } } virtual void OnUserMessage(userrec* user, void* dest, int target_type, const std::string &text, char status) @@ -3504,7 +3512,7 @@ class ModuleSpanningTree : public Module DoOneToOne(user->nick,"PRIVMSG",params,d->server); } } - else + else if (target_type == TYPE_CHANNEL) { if (user->fd > -1) { @@ -3523,6 +3531,14 @@ class ModuleSpanningTree : public Module } } } + else if (target_type == TYPE_SERVER) + { + char* target = (char*)dest; + std::deque par; + par.push_back(target); + par.push_back(":"+text); + DoOneToMany(user->nick,"PRIVMSG",par); + } } virtual void OnBackgroundTimer(time_t curtime) -- cgit v1.3.1-10-gc9f91