diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/m_filter.cpp | 71 |
1 files changed, 60 insertions, 11 deletions
diff --git a/src/modules/m_filter.cpp b/src/modules/m_filter.cpp index d208e7a5a..3bda79022 100644 --- a/src/modules/m_filter.cpp +++ b/src/modules/m_filter.cpp @@ -56,6 +56,14 @@ class ModuleFilter : public Module { std::string target = ""; std::string reason = MyConf->ReadValue("keyword","reason",index); + std::string action = MyConf->ReadValue("keyword","action",index); + std::string operaction = MyConf->ReadValue("keyword","operaction",index); + std::string do_action = "none"; + + if (action == "") + action = "none"; + if (operaction == "") + operaction = "none"; if (target_type == TYPE_USER) { userrec* t = (userrec*)dest; @@ -66,15 +74,32 @@ class ModuleFilter : public Module chanrec* t = (chanrec*)dest; target = std::string(t->name); } - Srv->SendOpers(std::string("FILTER: ")+std::string(user->nick)+ - std::string(" had their message filtered, target was ")+ - target+": "+reason); + if (strchr(user->modes,'o')) + { + do_action = operaction; + } + else + { + do_action = action; + } + if (do_action == "block") + { + Srv->SendOpers(std::string("FILTER: ")+std::string(user->nick)+ + std::string(" had their message filtered, target was ")+ + target+": "+reason); + // this form of SendTo (with the source as NuLL) sends a server notice + Srv->SendTo(NULL,user,"NOTICE "+std::string(user->nick)+ + " :Your message has been filtered and opers notified: "+reason); + } + Srv->Log(DEFAULT,std::string("FILTER: ")+std::string(user->nick)+ std::string(" had their message filtered, target was ")+ target+": "+reason); - // this form of SendTo (with the source as NuLL) sends a server notice - Srv->SendTo(NULL,user,"NOTICE "+std::string(user->nick)+ - " :Your message has been filtered and opers notified: "+reason); + + if (do_action == "kill") + { + Srv->QuitUser(user,reason); + } return 1; } } @@ -91,6 +116,14 @@ class ModuleFilter : public Module { std::string target = ""; std::string reason = MyConf->ReadValue("keyword","reason",index); + std::string action = MyConf->ReadValue("keyword","action",index); + std::string operaction = MyConf->ReadValue("keyword","operaction",index); + std::string do_action = "none"; + + if (action == "") + action = "none"; + if (operaction == "") + operaction = "none"; if (target_type == TYPE_USER) { userrec* t = (userrec*)dest; @@ -101,14 +134,30 @@ class ModuleFilter : public Module chanrec* t = (chanrec*)dest; target = std::string(t->name); } - Srv->SendOpers(std::string("FILTER: ")+std::string(user->nick)+ - std::string(" had their notice filtered, target was ")+ - target+": "+MyConf->ReadValue("keyword","reason",index)); + if (strchr(user->modes,'o')) + { + do_action = operaction; + } + else + { + do_action = action; + } + if (do_action == "block") + { + Srv->SendOpers(std::string("FILTER: ")+std::string(user->nick)+ + std::string(" had their notice filtered, target was ")+ + target+": "+MyConf->ReadValue("keyword","reason",index)); + Srv->SendTo(NULL,user,"NOTICE "+std::string(user->nick)+ + " :Your notice has been filtered and opers notified: "+reason); + } Srv->Log(DEFAULT,std::string("FILTER: ")+std::string(user->nick)+ std::string(" had their notice filtered, target was ")+ target+": "+MyConf->ReadValue("keyword","reason",index)); - Srv->SendTo(NULL,user,"NOTICE "+std::string(user->nick)+ - " :Your notice has been filtered and opers notified: "+reason); + + if (do_action == "kill") + { + Srv->QuitUser(user,reason); + } return 1; } } |