]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_filter.cpp
Fix the noctcp user mode not applying to channel CTCPs.
[user/henk/code/inspircd.git] / src / modules / m_filter.cpp
index a036052f67dca6c55718a78c26bf59c47e5f1819..6c22069935f7465756fa9217203bdbb708a3decc 100644 (file)
@@ -173,7 +173,10 @@ class CommandFilter : public Command
        }
 };
 
-class ModuleFilter : public Module, public ServerEventListener, public Stats::EventListener
+class ModuleFilter
+       : public Module
+       , public ServerProtocol::SyncEventListener
+       , public Stats::EventListener
 {
        typedef insp::flat_set<std::string, irc::insensitive_swo> ExemptTargetSet;
 
@@ -332,7 +335,7 @@ bool ModuleFilter::AppliesToMe(User* user, FilterResult* filter, int iflags)
 }
 
 ModuleFilter::ModuleFilter()
-       : ServerEventListener(this)
+       : ServerProtocol::SyncEventListener(this)
        , Stats::EventListener(this)
        , initing(true)
        , filtcommand(this)
@@ -372,28 +375,35 @@ ModResult ModuleFilter::OnUserPreMessage(User* user, const MessageTarget& msgtar
        {
                bool is_selfmsg = false;
                std::string target;
-               if (msgtarget.type == MessageTarget::TYPE_USER)
+               switch (msgtarget.type)
                {
-                       User* t = msgtarget.Get<User>();
-                       // Check if the target nick is exempted, if yes, ignore this message
-                       if (exemptednicks.count(t->nick))
-                               return MOD_RES_PASSTHRU;
+                       case MessageTarget::TYPE_USER:
+                       {
+                               User* t = msgtarget.Get<User>();
+                               // Check if the target nick is exempted, if yes, ignore this message
+                               if (exemptednicks.count(t->nick))
+                                       return MOD_RES_PASSTHRU;
 
-                       if (user == t)
-                               is_selfmsg = true;
+                               if (user == t)
+                                       is_selfmsg = true;
 
-                       target = t->nick;
-               }
-               else if (msgtarget.type == MessageTarget::TYPE_CHANNEL)
-               {
-                       Channel* t = msgtarget.Get<Channel>();
-                       if (exemptedchans.count(t->name))
-                               return MOD_RES_PASSTHRU;
+                               target = t->nick;
+                               break;
+                       }
+                       case MessageTarget::TYPE_CHANNEL:
+                       {
+                               Channel* t = msgtarget.Get<Channel>();
+                               if (exemptedchans.count(t->name))
+                                       return MOD_RES_PASSTHRU;
 
-                       target = t->name;
+                               target = t->name;
+                               break;
+                       }
+                       case MessageTarget::TYPE_SERVER:
+                               break;
                }
 
-               if (is_selfmsg & warnonselfmsg)
+               if (is_selfmsg && warnonselfmsg)
                {
                        ServerInstance->SNO->WriteGlobalSno('f', InspIRCd::Format("WARNING: %s's self message matched %s (%s)",
                                user->nick.c_str(), f->freeform.c_str(), f->reason.c_str()));