diff options
| author | 2010-03-02 12:04:53 -0600 | |
|---|---|---|
| committer | 2010-08-03 17:32:39 -0400 | |
| commit | 89f72a4d63c6868ac3c191197f37e08341b8bc16 (patch) | |
| tree | 619fc74cfc57928de1bd0a9b08a8ad65903a8e7b /src/modules/m_ojoin.cpp | |
| parent | Unset 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.cpp | 18 |
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() |
