- 108
- 10
- Версия MoonLoader
- .026-beta
Как сделать так, чтобы сообщения фильтровались вне зависимости от регистра (к примеру "хУй" = "фиг" и т.д.)
Lua:
local sampfuncs = require 'sampfuncs'
local sampev = require 'lib.samp.events'
-- Таблица с матами и их заменами
local badWords = {
["блять"] = "блин",
["хуй"] = "фиг",
["пиздец"] = "ужас",
["ебать"] = "вот это да",
["сука"] = "черт",
["нахуй"] = "прочь",
["пидор"] = "нехороший человек",
["гандон"] = "неприятный тип",
["ебаный"] = "глупый",
["мразь"] = "негодяй",
["тест замены слов"] = "тест удался",
["заебал"] = "достал"
}
-- Функция для удаления всех неалфавитных символов
local function removeNonAlphabets(str)
return str:gsub("[^a-zA-Zа-яА-Я]", "") -- Удаляет все символы, кроме букв
end
-- Функция для замены мата с учетом регистра
local function matReplace(original, badWord, replacement)
local result = {}
for i = 1, #badWord do
local origChar = original:sub(i, i)
local bwChar = badWord:sub(i, i)
-- Сравниваем символы, игнорируя регистр
if origChar:lower() == bwChar:lower() then
-- Если символ в оригинале был заглавным, делаем замену также заглавной
if origChar == origChar:upper() then
table.insert(result, replacement:sub(i, i):upper())
else
table.insert(result, replacement:sub(i, i):lower())
end
else
table.insert(result, origChar)
end
end
return table.concat(result)
end
-- Функция фильтрации сообщений
local function filterMessage(message)
-- Очистить сообщение от лишних символов и привести к нижнему регистру
local cleanedMessage = removeNonAlphabets(message):lower()
-- Проходим по всем словам в таблице badWords
for badWord, replacement in pairs(badWords) do
-- Преобразуем badWord в строку, очищенную от лишних символов
local cleanedBadWord = removeNonAlphabets(badWord):lower()
-- Ищем слово в сообщении, игнорируя лишние символы
if cleanedMessage:find(cleanedBadWord) then
message = message:gsub(badWord, function(match)
-- При замене учитываем оригинальный регистр
return matReplace(match, badWord, replacement)
end)
end
end
return message
end
function sampev.onSendChat(message)
local filteredMat = filterMessage(message)
if filteredMat ~= message then
sampSendChat(filteredMat)
return false
end
return true
end
function sampev.onSendCommand(command)
if command and command:sub(1, 1) == "/" then
local filteredCommand = filterMessage(command)
if filteredCommand ~= command then
sampSendChat(filteredCommand)
return false
end
end
return true
end