# #
# If notifyuser is set to no, the user will not be notified when #
# their message is blocked. #
-#<filteropts engine="glob" notifyuser="yes">
+# #
+# If warnonselfmsg is set to yes when a user sends a message to #
+# themself that matches a filter the filter will be ignored and a #
+# warning will be sent to opers instead. This stops spambots which #
+# send their spam message to themselves first to check if it is being #
+# filtered by the server. #
+#<filteropts engine="glob" notifyuser="yes" warnonselfmsg="no">
# #
# Your choice of regex engine must match on all servers network-wide. #
# #
bool initing;
bool notifyuser;
+ bool warnonselfmsg;
RegexFactory* factory;
void FreeFilters();
FilterResult* f = this->FilterMatch(user, details.text, flags);
if (f)
{
+ bool is_selfmsg = false;
std::string target;
if (msgtarget.type == MessageTarget::TYPE_USER)
{
if (exemptednicks.count(t->nick))
return MOD_RES_PASSTHRU;
+ if (user == t)
+ is_selfmsg = true;
+
target = t->nick;
}
else if (msgtarget.type == MessageTarget::TYPE_CHANNEL)
target = t->name;
}
- if (f->action == FA_WARN)
+
+ if (is_selfmsg & warnonselfmsg)
+ {
+ ServerInstance->SNO->WriteGlobalSno('f', InspIRCd::Format("WARNING: %s's self message matched %s (%s)",
+ user->nick.c_str(), f->freeform.c_str(), f->reason.c_str()));
+ return MOD_RES_PASSTHRU;
+ }
+ else if (f->action == FA_WARN)
{
ServerInstance->SNO->WriteGlobalSno('f', InspIRCd::Format("WARNING: %s's message to %s matched %s (%s)",
user->nick.c_str(), target.c_str(), f->freeform.c_str(), f->reason.c_str()));
return MOD_RES_PASSTHRU;
}
- if (f->action == FA_BLOCK)
+ else if (f->action == FA_BLOCK)
{
ServerInstance->SNO->WriteGlobalSno('f', InspIRCd::Format("%s had their message to %s filtered as it matched %s (%s)",
user->nick.c_str(), target.c_str(), f->freeform.c_str(), f->reason.c_str()));
ConfigTag* tag = ServerInstance->Config->ConfValue("filteropts");
std::string newrxengine = tag->getString("engine");
notifyuser = tag->getBool("notifyuser", true);
+ warnonselfmsg = tag->getBool("warnonselfmsg");
factory = RegexEngine ? (RegexEngine.operator->()) : NULL;