From 6fc5882d5c88371e37887e47718f97a8b1b476ef Mon Sep 17 00:00:00 2001 From: danieldg 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/m_delayjoin.cpp') 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 ¶meter, bool adding, bool); }; @@ -56,33 +56,22 @@ class ModuleDelayJoin : public Module ModeAction DelayJoinMode::OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, 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