#include "inspircd.h"
-/* $ModDesc: Provides channel mode +F (nick flood protection) */
-
/** Holds settings and state associated with channel mode +F
*/
class nickfloodsettings
std::string::size_type colon = parameter.find(':');
if ((colon == std::string::npos) || (parameter.find('-') != std::string::npos))
{
- source->WriteNumeric(608, "%s %s :Invalid flood parameter",source->nick.c_str(),channel->name.c_str());
+ source->WriteNumeric(608, "%s :Invalid flood parameter",channel->name.c_str());
return MODEACTION_DENY;
}
if ((nnicks<1) || (nsecs<1))
{
- source->WriteNumeric(608, "%s %s :Invalid flood parameter",source->nick.c_str(),channel->name.c_str());
+ source->WriteNumeric(608, "%s :Invalid flood parameter",channel->name.c_str());
return MODEACTION_DENY;
}
ext.set(channel, new nickfloodsettings(nsecs, nnicks));
parameter = ConvToStr(nnicks) + ":" + ConvToStr(nsecs);
- channel->SetModeParam('F', parameter);
return MODEACTION_ALLOW;
}
else
{
- if (!channel->IsModeSet('F'))
+ if (!channel->IsModeSet(this))
return MODEACTION_DENY;
ext.unset(channel);
- channel->SetModeParam('F', "");
return MODEACTION_ALLOW;
}
}
NickFlood nf;
public:
-
ModuleNickFlood()
: nf(this)
{
}
- void init()
- {
- if (!ServerInstance->Modes->AddMode(&nf))
- throw ModuleException("Could not add new modes!");
- ServerInstance->Extensions.Register(&nf.ext);
- Implementation eventlist[] = { I_OnUserPreNick, I_OnUserPostNick };
- ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
- }
-
- ModResult OnUserPreNick(User* user, const std::string &newnick)
+ ModResult OnUserPreNick(User* user, const std::string &newnick) CXX11_OVERRIDE
{
- if (ServerInstance->NICKForced.get(user)) /* Allow forced nick changes */
- return MOD_RES_PASSTHRU;
-
for (UCListIter i = user->chans.begin(); i != user->chans.end(); i++)
{
Channel *channel = *i;
if (f->islocked())
{
- user->WriteNumeric(447, "%s :%s has been locked for nickchanges for 60 seconds because there have been more than %u nick changes in %u seconds", user->nick.c_str(), channel->name.c_str(), f->nicks, f->secs);
+ user->WriteNumeric(ERR_CANTCHANGENICK, ":%s has been locked for nickchanges for 60 seconds because there have been more than %u nick changes in %u seconds", channel->name.c_str(), f->nicks, f->secs);
return MOD_RES_DENY;
}
/*
* XXX: HACK: We do the increment on the *POST* event here (instead of all together) because we have no way of knowing whether other modules would block a nickchange.
*/
- void OnUserPostNick(User* user, const std::string &oldnick)
+ void OnUserPostNick(User* user, const std::string &oldnick) CXX11_OVERRIDE
{
if (isdigit(user->nick[0])) /* allow switches to UID */
return;
}
}
- ~ModuleNickFlood()
- {
- }
-
- Version GetVersion()
+ Version GetVersion() CXX11_OVERRIDE
{
return Version("Channel mode F - nick flood protection", VF_VENDOR);
}