#include "inspircd.h"
+#include "modules/exemption.h"
/** Handles the +B channel mode
class ModuleBlockCAPS : public Module
{
+ CheckExemption::EventProvider exemptionprov;
BlockCaps bc;
- int percent;
+ unsigned int percent;
unsigned int minlen;
char capsmap[256];
public:
- ModuleBlockCAPS() : bc(this)
+ ModuleBlockCAPS()
+ : exemptionprov(this)
+ , bc(this)
{
}
return MOD_RES_PASSTHRU;
Channel* c = (Channel*)dest;
- ModResult res = ServerInstance->OnCheckExemption(user,c,"blockcaps");
+ ModResult res;
+ FIRST_MOD_RESULT_CUSTOM(exemptionprov, CheckExemption::EventListener, OnCheckExemption, res, (user, c, "blockcaps"));
if (res == MOD_RES_ALLOW)
return MOD_RES_PASSTHRU;
if (!c->GetExtBanStatus(user, 'B').check(!c->IsModeSet(bc)))
{
- int caps = 0;
+ std::string::size_type caps = 0;
unsigned int offset = 0;
// Ignore the beginning of the text if it's a CTCP ACTION (/me)
if (!text.compare(0, 8, "\1ACTION ", 8))
for (std::string::const_iterator i = text.begin() + offset; i != text.end(); ++i)
caps += capsmap[(unsigned char)*i];
- if ( ((caps*100)/(int)text.length()) >= percent )
+ if (((caps * 100) / text.length()) >= percent)
{
- user->WriteNumeric(ERR_CANNOTSENDTOCHAN, "%s :Your message cannot contain more than %d%% capital letters if it's longer than %d characters", c->name.c_str(), percent, minlen);
+ user->WriteNumeric(ERR_CANNOTSENDTOCHAN, c->name, InspIRCd::Format("Your message cannot contain %d%% or more capital letters if it's longer than %d characters", percent, minlen));
return MOD_RES_DENY;
}
}