aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_nokicks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_nokicks.cpp')
-rw-r--r--src/modules/m_nokicks.cpp21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/modules/m_nokicks.cpp b/src/modules/m_nokicks.cpp
index 4910bc7ef..f08b9f518 100644
--- a/src/modules/m_nokicks.cpp
+++ b/src/modules/m_nokicks.cpp
@@ -33,7 +33,7 @@ class ModuleNoKicks : public Module
void init()
{
ServerInstance->Modules->AddService(nk);
- Implementation eventlist[] = { I_OnUserPreKick, I_On005Numeric };
+ Implementation eventlist[] = { I_OnChannelPermissionCheck, I_On005Numeric };
ServerInstance->Modules->Attach(eventlist, this, 2);
}
@@ -42,23 +42,14 @@ class ModuleNoKicks : public Module
ServerInstance->AddExtBanChar('Q');
}
- ModResult OnUserPreKick(User* source, Membership* memb, const std::string &reason)
+ void OnChannelPermissionCheck(User* user,Channel* chan, PermissionData& perm)
{
- if (!memb->chan->GetExtBanStatus(source, 'Q').check(!memb->chan->IsModeSet(&nk)))
+ if (perm.name == "kick" && !chan->GetExtBanStatus(user, 'Q').check(!chan->IsModeSet(&nk)))
{
- if ((ServerInstance->ULine(source->nick.c_str())) || ServerInstance->ULine(source->server))
- {
- // ulines can still kick with +Q in place
- return MOD_RES_PASSTHRU;
- }
- else
- {
- // nobody else can (not even opers with override, and founders)
- source->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :Can't kick user %s from channel (+Q set)",source->nick.c_str(), memb->chan->name.c_str(), memb->user->nick.c_str());
- return MOD_RES_DENY;
- }
+ perm.SetReason(":%s %d %s %s :Can't kick in channel (+Q set)", ServerInstance->Config->ServerName.c_str(),
+ ERR_CHANOPRIVSNEEDED, user->nick.c_str(), chan->name.c_str());
+ perm.result = MOD_RES_DENY;
}
- return MOD_RES_PASSTHRU;
}
~ModuleNoKicks()