summaryrefslogtreecommitdiff
path: root/src/modules/m_delayjoin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_delayjoin.cpp')
-rw-r--r--src/modules/m_delayjoin.cpp41
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 &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()