Перейти к содержимому
  • 0
Stinger

Фильтр мата!

Вопрос

Здравствуйте!

Хочу написать Фильтр Мата для игры, а именно русских слов , знаю, что это очень сложно, хочу спросить вашего совета, как лучше фильтровать мат!

 

Функция чата примерно такая:

function GameChat(player,message)    -- Функция чата.
  if (string.find(message, "fuck") ~= nil) then  -- Тут будет фильтроваться МАТ
  local block_time = 10    -- Время блокировки чата
  Message(player,"Ваш чат заблокирован на 10 минут за мат!")    -- Показываем уведомление игроку.
  BlockChat(player, block_time)    -- Блокируем чат игроку на 10 минут.
  return 0    -- Запрещаем выводить сообщение в чат.
end
return 1
end

 

Во первых есть проблемы со string.find, если банально написать Fuck он уже не поймает слово, как это можно решить ?

И собственно , как лучше подключать сам цикл , что бы не сильно грузить систему и как лучше фильтровать сам мат, буду признателен за ваши ответы по теме.

Изменено пользователем Alex

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Ой-ой-ой, какая вопиющая жестокость: теперь нормальным поцыкам-кодерам с района придется пояснять за базар бездушной софтине. Лично я бы реализовал подобную систему следующим образом:
 
Для начала создал бы конфиг с запрещенными к употреблению словами в виде отдельного файла:

-- *** - нецензурные слова
{
  ["***"] = true,
  ["*******"] = true,
  ["*****"] = true,
}

Далее загружал бы конфиг по указанному пути, извлекал бы из сообщения игрока отдельные слова и анализировал их на вхождение в конфиг без учета регистра:

local file = io.open("/chat.cfg", "r")
local forbiddenWords = require("serialization").unserialize(file:read("*a"))
file:close()

for word in message:gmatch("[^%s%,%.%:%;%!%^]+") do
  if forbiddenWords[unicode.lower(word)] then
    -- Вещ или бан
  end
end

Использовать string.find(), конечно, удобно, однако слишком велика вероятность случайных банов, как описал мсье Fingercomp. Однако если по какой-то причине тебе все же требуется использовать стандартный поиск, то держи функцию, поддерживающую юникод:

function string.unicodeFind(str, pattern, init, plain)
  if init then
    if init < 0 then
      init = -#unicode.sub(str,init)
    elseif init > 0 then
      init = #unicode.sub(str, 1, init - 1) + 1
    end
  end
  
  a, b = string.find(str, pattern, init, plain)
  
  if a then
    local ap, bp = str:sub(1, a - 1), str:sub(a,b)
    a = unicode.len(ap) + 1
    b = a + unicode.len(bp) - 1
    return a, b
  else
    return a
  end
end
Изменено пользователем Alex

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Лучше пусть мат человек фильтрует. А то будешь потом за "наносабля" и "оскорблять" банить невинных, как на IT было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот где бы пригодились нейросети. Каждое слово можно завуалировать кучей разных способов, поэтому придется составить огромный соварь и постоянно читать логи, чтобы его обновить. Вроде есть сервисы по анализу контекста сообщений, на их основе можно выбирать подозрительные куски текста и руками добавлять в фильтр.

Если создавать нейросеть, способную определять мат в сообщении, хотя-бы для одного языка, то придется неплохо вложиться, хотя задача довольно простая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну всё равно. Бывают, опечатываются, когда предлог "для" пишут. Слово — мат, но наказывать-то за него тупо, да?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо всем за ответы, буду работать над функцией ECS, если появятся новые идеи то с радостью рассмотрю их, вы правы слово из 3-х букв, можно написать очень многими способами, по этому фильтр почти не реальный, ну  я готов рискнуть, Модератор и так будет следить за чатом, просто хотелось бы какую то Автоматическую карающую машину создать)

Изменено пользователем Stinger

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...