From 8bbd67b1f7b87df9b36a950b3b699c5b76a1748f Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Fri, 7 Jun 2019 20:11:40 +0100 Subject: Add an option to the filter module to ignore self messages. --- src/modules/m_filter.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_filter.cpp b/src/modules/m_filter.cpp index c0798f7d0..a036052f6 100644 --- a/src/modules/m_filter.cpp +++ b/src/modules/m_filter.cpp @@ -179,6 +179,7 @@ class ModuleFilter : public Module, public ServerEventListener, public Stats::Ev bool initing; bool notifyuser; + bool warnonselfmsg; RegexFactory* factory; void FreeFilters(); @@ -369,6 +370,7 @@ ModResult ModuleFilter::OnUserPreMessage(User* user, const MessageTarget& msgtar FilterResult* f = this->FilterMatch(user, details.text, flags); if (f) { + bool is_selfmsg = false; std::string target; if (msgtarget.type == MessageTarget::TYPE_USER) { @@ -377,6 +379,9 @@ ModResult ModuleFilter::OnUserPreMessage(User* user, const MessageTarget& msgtar 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) @@ -387,13 +392,20 @@ ModResult ModuleFilter::OnUserPreMessage(User* user, const MessageTarget& msgtar 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())); @@ -609,6 +621,7 @@ void ModuleFilter::ReadConfig(ConfigStatus& status) 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; -- cgit v1.2.3