]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_censor.cpp
Add <options:exemptchanops> support to m_censor and m_blockcaps, and tidy up the...
[user/henk/code/inspircd.git] / src / modules / m_censor.cpp
index 8b8c5cb5e087ee6984257cd85903d0b82b69aa8e..4eaf1e3b47406a4f982cd1ce9b44779c58e8cf5a 100644 (file)
@@ -27,7 +27,7 @@ class CensorUser : public ModeHandler
  public:
        CensorUser(InspIRCd* Instance) : ModeHandler(Instance, 'G', 0, 0, false, MODETYPE_USER, false) { }
 
-       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
+       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding, bool)
        {
                if (adding)
                {
@@ -57,7 +57,7 @@ class CensorChannel : public ModeHandler
  public:
        CensorChannel(InspIRCd* Instance) : ModeHandler(Instance, 'G', 0, 0, false, MODETYPE_CHANNEL, false) { }
 
-       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding)
+       ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding, bool)
        {
                if (adding)
                {
@@ -140,7 +140,14 @@ class ModuleCensor : public Module
                if (target_type == TYPE_USER)
                        active = ((User*)dest)->IsModeSet('G');
                else if (target_type == TYPE_CHANNEL)
+               {
                        active = ((Channel*)dest)->IsModeSet('G');
+                       Channel* c = (Channel*)dest;
+                       if (CHANOPS_EXEMPT(ServerInstance, 'G') && c->GetStatus(user) == STATUS_OP)
+                       {
+                               return 0;
+                       }
+               }
 
                if (!active)
                        return 0;