Here is the client code itself, it needs to be remade under the library in order to connect it to the NodeJS server
(function () { var t = {}; window.containsMat = function (text) { return t.containsMat(text); }; window.antimat = t; t.badPatterns = [ "^к(о|а)зел$", ]; t.goodPatterns = [ ".*психу.*", ]; t.goodWords = [ "дезмонда", "застрахуйте", "одномандатный", "подстрахуй", "психуй" ]; t.letters = { "a": "а", "b": "в", "c": "с", "e": "е", "f": "ф", "g": "д", "h": "н", "i": "и", "k": "к", "l": "л", "m": "м", "n": "н", "o": "о", "p": "р", "r": "р", "s": "с", "t": "т", "u": "у", "v": "в", "x": "х", "y": "у", "w": "ш", "z": "з", "ё": "е", "6": "б", "9": "д" }; t.containsMat = function (text) { text = t.cleanBadSymbols(text.toLowerCase()); var words = text.split(" "); for (var i = 0; i < words.length; i++) { var word = t.convertEngToRus(words[i]); if (t.isInGoodWords(word) && t.isInGoodPatterns(word)) continue; if (t.isInBadPatterns(word)) return true; } if (t.containsMatInSpaceWords(words)) return true; return false; }; t.convertEngToRus = function (word) { for (var j = 0; j < word.length; j++) { for (var key in t.letters) { if (word.charAt(j) == key) word = word.substring(0, j) + t.letters[key] + word.substring(j + 1, word.length) } } return word; }; t.cleanBadSymbols = function (text) { return text.replace(/[^a-zA-Zа-яА-Яё0-9\s]/g, ""); }; t.isInGoodWords = function (word) { for (var i = 0; i < t.goodWords.length; i++) { if (word == t.goodWords[i]) return true; } return false; }; t.isInGoodPatterns = function (word) { for (var i = 0; i < t.goodPatterns.length; i++) { var pattern = new RegExp(t.goodPatterns[i]); if (pattern.test(word)) return true; } return false; }; t.isInBadPatterns = function (word) { for (var i = 0; i < t.badPatterns.length; i++) { var pattern = new RegExp(t.badPatterns[i]); if (pattern.test(word)) return true; } return false; }; t.containsMatInSpaceWords = function (words) { var spaceWords = t.findSpaceWords(words); for (var i = 0; i < spaceWords.length; i++) { var word = t.convertEngToRus(spaceWords[i]); if (t.isInBadPatterns(word)) return true; } return false; }; t.findSpaceWords = function (words) { var out = []; var spaceWord = ""; for(var i=0; i < words.length; i++ ){ var word = words[i]; if(word.length <= 3){ spaceWord += word; continue; } if(spaceWord.length >= 3){ out.push(spaceWord); spaceWord = ""; } } return out; }; t.addBadPattern = function (pattern) { t.badPatterns.push(pattern); }; t.addGoodPattern = function (pattern) { t.goodPatterns.push(pattern); }; t.addGoodWord = function (pattern) { t.goodWords.push(pattern); }; })();