mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 10:39:02 -04:00
Add support for regex flags to the filter module.
This commit is contained in:
parent
bce693bfe3
commit
37a820efcb
@ -983,6 +983,9 @@
|
||||
# stdregex - stdlib regexps, provided via regex_stdlib, see comment #
|
||||
# at the <module> tag for info on availability. #
|
||||
# #
|
||||
# If enableflags is set, you can specify flags that modify matching #
|
||||
# of the regular expression. #
|
||||
# #
|
||||
# If notifyuser is set to no, the user will not be notified when #
|
||||
# their message is blocked. #
|
||||
# #
|
||||
@ -991,7 +994,10 @@
|
||||
# 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="stdregex" notifyuser="yes" warnonselfmsg="no">
|
||||
#<filteropts engine="stdregex"
|
||||
# enableflags="yes"
|
||||
# notifyuser="yes"
|
||||
# warnonselfmsg="no">
|
||||
# #
|
||||
# Your choice of regex engine must match on all servers network-wide. #
|
||||
# #
|
||||
|
@ -85,7 +85,7 @@ public:
|
||||
bool flag_strip_color;
|
||||
bool flag_no_registered;
|
||||
|
||||
FilterResult(Regex::EngineReference& RegexEngine, const std::string& free, const std::string& rea, FilterAction act, unsigned long gt, const std::string& fla, bool cfg)
|
||||
FilterResult(Regex::EngineReference& RegexEngine, const std::string& free, const std::string& rea, FilterAction act, unsigned long gt, const std::string& fla, bool cfg, bool ef)
|
||||
: freeform(free)
|
||||
, reason(rea)
|
||||
, action(act)
|
||||
@ -94,7 +94,7 @@ public:
|
||||
{
|
||||
if (!RegexEngine)
|
||||
throw ModuleException(thismod, "Regex module implementing '"+RegexEngine.GetProvider()+"' is not loaded!");
|
||||
regex = RegexEngine->Create(free);
|
||||
regex = ef ? RegexEngine->CreateHuman(free) : RegexEngine->Create(free);
|
||||
this->FillFlags(fla);
|
||||
}
|
||||
|
||||
@ -202,6 +202,7 @@ private:
|
||||
|
||||
Account::API accountapi;
|
||||
bool initing = true;
|
||||
bool enableflags;
|
||||
bool notifyuser;
|
||||
bool warnonselfmsg;
|
||||
bool dirty = false;
|
||||
@ -233,6 +234,7 @@ public:
|
||||
bool DeleteFilter(const std::string& freeform, std::string& reason);
|
||||
std::pair<bool, std::string> AddFilter(const std::string& freeform, FilterAction type, const std::string& reason, unsigned long duration, const std::string& flags, bool config = false);
|
||||
void ReadConfig(ConfigStatus& status) override;
|
||||
void CompareLinkData(const LinkData& otherdata, LinkDataDiff& diffs) override;
|
||||
void GetLinkData(LinkData& data, std::string& compatdata) override;
|
||||
static std::string EncodeFilter(const FilterResult& filter);
|
||||
FilterResult DecodeFilter(const std::string& data);
|
||||
@ -645,6 +647,7 @@ void ModuleFilter::ReadConfig(ConfigStatus& status)
|
||||
|
||||
const auto& tag = ServerInstance->Config->ConfValue("filteropts");
|
||||
std::string newrxengine = tag->getString("engine");
|
||||
enableflags = tag->getBool("enableflags");
|
||||
notifyuser = tag->getBool("notifyuser", true);
|
||||
warnonselfmsg = tag->getBool("warnonselfmsg");
|
||||
filterconf = tag->getString("filename");
|
||||
@ -680,6 +683,20 @@ void ModuleFilter::ReadConfig(ConfigStatus& status)
|
||||
ReadFilters();
|
||||
}
|
||||
|
||||
void ModuleFilter::CompareLinkData(const LinkData& otherdata, LinkDataDiff& diffs)
|
||||
{
|
||||
Module::CompareLinkData(otherdata, diffs);
|
||||
|
||||
auto it = diffs.find("flags");
|
||||
if (it == diffs.end())
|
||||
return; // Should never happen.
|
||||
|
||||
if (!it->second.first)
|
||||
it->second.first = "no";
|
||||
if (!it->second.second)
|
||||
it->second.second = "no";
|
||||
}
|
||||
|
||||
void ModuleFilter::GetLinkData(LinkData& data, std::string& compatdata)
|
||||
{
|
||||
if (RegexEngine)
|
||||
@ -689,6 +706,9 @@ void ModuleFilter::GetLinkData(LinkData& data, std::string& compatdata)
|
||||
}
|
||||
else
|
||||
data["regex"] = "broken";
|
||||
|
||||
if (enableflags)
|
||||
data["flags"] = "yes";
|
||||
}
|
||||
|
||||
std::string ModuleFilter::EncodeFilter(const FilterResult& filter)
|
||||
@ -815,7 +835,7 @@ std::pair<bool, std::string> ModuleFilter::AddFilter(const std::string& freeform
|
||||
|
||||
try
|
||||
{
|
||||
filters.emplace_back(RegexEngine, freeform, reason, type, duration, flgs, config);
|
||||
filters.emplace_back(RegexEngine, freeform, reason, type, duration, flgs, config, enableflags);
|
||||
dirty = true;
|
||||
}
|
||||
catch (const ModuleException& e)
|
||||
|
Loading…
x
Reference in New Issue
Block a user