* +------------------------------------+
*
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ * See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
* the file COPYING for details.
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, 0, '@'), Creator(Parent) {};
ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool);
};
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()