From 89f72a4d63c6868ac3c191197f37e08341b8bc16 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Tue, 2 Mar 2010 12:04:53 -0600 Subject: Create OnChannelPermissionCheck hook --- src/modules/m_ojoin.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/modules/m_ojoin.cpp') 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(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() -- cgit v1.3.1-10-gc9f91