aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_ojoin.cpp
diff options
context:
space:
mode:
authorGravatar Daniel De Graaf2010-03-02 12:04:53 -0600
committerGravatar Daniel De Graaf2010-08-03 17:32:39 -0400
commit89f72a4d63c6868ac3c191197f37e08341b8bc16 (patch)
tree619fc74cfc57928de1bd0a9b08a8ad65903a8e7b /src/modules/m_ojoin.cpp
parentUnset umode +x when a different vhost is set on a user (diff)
Create OnChannelPermissionCheck hook
Diffstat (limited to 'src/modules/m_ojoin.cpp')
-rw-r--r--src/modules/m_ojoin.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/modules/m_ojoin.cpp b/src/modules/m_ojoin.cpp
index 6e9212f8d..5642bcda6 100644
--- a/src/modules/m_ojoin.cpp
+++ b/src/modules/m_ojoin.cpp
@@ -148,7 +148,7 @@ class ModuleOjoin : public Module
ServerInstance->Modules->AddService(*np);
ServerInstance->Modules->AddService(mycommand);
- Implementation eventlist[] = { I_OnUserPreJoin, I_OnUserPreKick, I_OnRehash };
+ Implementation eventlist[] = { I_OnUserPreJoin, I_OnChannelPermissionCheck, I_OnRehash };
ServerInstance->Modules->Attach(eventlist, this, 3);
}
@@ -183,18 +183,24 @@ class ModuleOjoin : public Module
op = Conf->getBool("op", true);
}
- ModResult OnUserPreKick(User* source, Membership* memb, const std::string &reason)
+ void OnChannelPermissionCheck(User* source, Channel* chan, PermissionData& perm)
{
+ if (perm.name != "kick")
+ return;
+ TargetedPermissionData& t = static_cast<TargetedPermissionData&>(perm);
+ Membership* memb = chan->GetUser(t.target);
// Don't do anything if they're not +Y
if (!memb->hasMode(np->GetModeChar()))
- return MOD_RES_PASSTHRU;
+ return;
// Let them do whatever they want to themselves.
if (source == memb->user)
- return MOD_RES_PASSTHRU;
+ return;
- source->WriteNumeric(484, source->nick+" "+memb->chan->name+" :Can't kick "+memb->user->nick+" as they're on official network business.");
- return MOD_RES_DENY;
+ perm.SetReason(":%s 484 %s %s :Can't kick %s as they're on official network business",
+ ServerInstance->Config->ServerName.c_str(), source->nick.c_str(),
+ memb->chan->name.c_str(), memb->user->nick.c_str());
+ perm.result = MOD_RES_DENY;
}
~ModuleOjoin()