From 19761350abe1fd8a54ba112d9e89ca99c530ae62 Mon Sep 17 00:00:00 2001 From: Timo Smit Date: Tue, 12 Feb 2019 13:06:17 +0100 Subject: [PATCH] Improved censor (refs #87) * fixed case insensitivity * updated some default censor rules --- config/censor.toml | 12 ++++++------ luascripts/wolfadmin/admin/censor.lua | 10 +++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/config/censor.toml b/config/censor.toml index 88b95d4..ed7d8e0 100644 --- a/config/censor.toml +++ b/config/censor.toml @@ -1,24 +1,24 @@ # words [[word]] -pattern = "f[%a%p]-ck" # fuck and similar +pattern = "f[u*]-ck" # 'fuck' and similar [[word]] pattern = "homo" [[word]] -pattern = "gay" +pattern = "g[a4]y" # 'gay' and similar [[word]] -pattern = "fag" +pattern = "f[a4]g" # 'fag' and similar [[word]] -pattern = "shit" +pattern = "sh[i1*]t" # 'shit' and similar [[word]] -pattern = "bitch" +pattern = "b[i1*]tch" # 'bitch' and similar [[word]] -pattern = "asshole" +pattern = "asshole" # 'asshole' and similar # names [[name]] diff --git a/luascripts/wolfadmin/admin/censor.lua b/luascripts/wolfadmin/admin/censor.lua index 7714f82..7f3bfa9 100644 --- a/luascripts/wolfadmin/admin/censor.lua +++ b/luascripts/wolfadmin/admin/censor.lua @@ -37,11 +37,15 @@ function censor.filter(dictionary, subject) local censored = false for _, item in ipairs(dictionary) do - local occurrences + local pos1, pos2 = string.find(string.lower(subject), item["pattern"]) - subject, occurrences = string.gsub(subject, item["pattern"], "*censor*") + while pos1 and pos2 do + subject = string.sub(subject, 1, pos1 - 1).."*censor*"..string.sub(subject, pos2 + 1) - censored = (censored or occurrences > 0) and true or false + pos1, pos2 = string.find(string.lower(subject), item["pattern"]) + + censored = true + end end return censored, subject