]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_override.cpp
Merge pull request #1361 from genius3000/master+rline_IP
[user/henk/code/inspircd.git] / src / modules / m_override.cpp
index 69f4b3bca7c1bf876f880eeddf0c58572f056791..fd09dd6ec96178fb283b56c63ac9316f6e1d3347 100644 (file)
@@ -25,6 +25,7 @@
 
 
 #include "inspircd.h"
+#include "modules/invite.h"
 
 class ModuleOverride : public Module
 {
@@ -34,6 +35,7 @@ class ModuleOverride : public Module
        ChanModeReference inviteonly;
        ChanModeReference key;
        ChanModeReference limit;
+       Invite::API invapi;
 
        static bool IsOverride(unsigned int userlevel, const Modes::ChangeList::List& list)
        {
@@ -56,7 +58,7 @@ class ModuleOverride : public Module
                }
 
                if (NoisyOverride)
-                       chan->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s used oper override to bypass %s", chan->name.c_str(), user->nick.c_str(), bypasswhat);
+                       chan->WriteNotice(InspIRCd::Format("%s used oper override to bypass %s", user->nick.c_str(), bypasswhat));
                ServerInstance->SNO->WriteGlobalSno('v', user->nick+" used oper override to bypass " + mode + " on " + chan->name);
                return MOD_RES_ALLOW;
        }
@@ -67,6 +69,7 @@ class ModuleOverride : public Module
                , inviteonly(this, "inviteonly")
                , key(this, "key")
                , limit(this, "limit")
+               , invapi(this)
        {
        }
 
@@ -118,7 +121,8 @@ class ModuleOverride : public Module
                if (source->IsOper() && CanOverride(source,"KICK"))
                {
                        // If the kicker's status is less than the target's,                    or      the kicker's status is less than or equal to voice
-                       if ((memb->chan->GetPrefixValue(source) < memb->getRank()) || (memb->chan->GetPrefixValue(source) <= VOICE_VALUE))
+                       if ((memb->chan->GetPrefixValue(source) < memb->getRank()) || (memb->chan->GetPrefixValue(source) <= VOICE_VALUE) ||
+                           (memb->chan->GetPrefixValue(source) == HALFOP_VALUE && memb->getRank() == HALFOP_VALUE))
                        {
                                ServerInstance->SNO->WriteGlobalSno('v',source->nick+" used oper override to kick "+memb->user->nick+" on "+memb->chan->name+" ("+reason+")");
                                return MOD_RES_ALLOW;
@@ -177,7 +181,7 @@ class ModuleOverride : public Module
                        {
                                if (chan->IsModeSet(inviteonly) && (CanOverride(user,"INVITE")))
                                {
-                                       if (!user->IsInvited(chan))
+                                       if (!invapi->IsInvited(user, chan))
                                                return HandleJoinOverride(user, chan, keygiven, "invite-only", "+i");
                                        return MOD_RES_ALLOW;
                                }