diff options
-rw-r--r-- | src/modules/m_delayjoin.cpp | 41 |
1 files changed, 15 insertions, 26 deletions
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() |