From 6fc5882d5c88371e37887e47718f97a8b1b476ef Mon Sep 17 00:00:00 2001
From: danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Date: Wed, 4 Mar 2009 05:12:25 +0000
Subject: delayjoin: Remove broken check for channel ops, use ModeHandler
 parameter instead

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11169 e03df62e-2008-0410-955e-edbf42e46eb7
---
 src/modules/m_delayjoin.cpp | 41 +++++++++++++++--------------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

(limited to 'src/modules')

diff --git a/src/modules/m_delayjoin.cpp b/src/modules/m_delayjoin.cpp
index 116bdde10..90d193cd3 100644
--- a/src/modules/m_delayjoin.cpp
+++ b/src/modules/m_delayjoin.cpp
@@ -20,7 +20,7 @@ class DelayJoinMode : public ModeHandler
 	CUList empty;
 	Module* Creator;
  public:
-	DelayJoinMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Instance, 'D', 0, 0, false, MODETYPE_CHANNEL, false), Creator(Parent) {};
+	DelayJoinMode(InspIRCd* Instance, Module* Parent) : ModeHandler(Instance, 'D', 0, 0, false, MODETYPE_CHANNEL, false, '@', '@'), Creator(Parent) {};
 
 	ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding, bool);
 };
@@ -56,33 +56,22 @@ class ModuleDelayJoin : public Module
 
 ModeAction DelayJoinMode::OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding, bool)
 {
-	if (channel->IsModeSet('D') != adding)
-	{
-		if (IS_LOCAL(source) && (channel->GetStatus(source) < STATUS_OP))
-		{
-			source->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :Only channel operators may %sset channel mode +D", source->nick.c_str(), channel->name.c_str(), adding ? "" : "un");
-			return MODEACTION_DENY;
-		}
-		else
-		{
-			if (channel->IsModeSet('D'))
-			{
-				/*
-				 * Make all users visible, as +D is being removed. If we don't do this,
-				 * they remain permanently invisible on this channel!
-				 */
-				CUList* names = channel->GetUsers();
-				for (CUListIter n = names->begin(); n != names->end(); ++n)
-					Creator->OnText(n->first, channel, TYPE_CHANNEL, "", 0, empty);
-			}
-			channel->SetMode('D', adding);
-			return MODEACTION_ALLOW;
-		}
-	}
-	else
-	{
+	/* no change */
+	if (channel->IsModeSet('D') == adding)
 		return MODEACTION_DENY;
+
+	if (!adding)
+	{
+		/*
+		 * Make all users visible, as +D is being removed. If we don't do this,
+		 * they remain permanently invisible on this channel!
+		 */
+		CUList* names = channel->GetUsers();
+		for (CUListIter n = names->begin(); n != names->end(); ++n)
+			Creator->OnText(n->first, channel, TYPE_CHANNEL, "", 0, empty);
 	}
+	channel->SetMode('D', adding);
+	return MODEACTION_ALLOW;
 }
 
 ModuleDelayJoin::~ModuleDelayJoin()
-- 
cgit v1.2.3