Вопрос не к рядовым юзерам. А по типу @Dreamlolz, и в таком духе. Мб уже и сообщество научилось юзать Lua по нормальному, хз. Не обижайтесь.
Я бы справился и 1, но уже чёт долго туплю над этой задачей. Решил обратиться на форум. Мне Дрим часто помогал с кодом.
Возникновение запроса:
Все модеры как модеры, банят ручками и глазами. Всё сообщения читают. Но нашелся один, который решил заранее составить список плохих слов, дабы подсвечивать себе это плохое слово в чате, и выдавать мут, и очевидно не читать весь чат флуд.
Вот тема. Вот скрин.
Вообщем лень - двигатель прогресса. Я только за =)
К модератору претензий нет, делает это он скорей всего с помощью чат аддонов по типу Prat и т.д.
Я естественно хочу поступить другим способом. В своем аддоне самостоятельно составлять список слов и контролировать этот процесс вручную. И не в коем случае не использовать готовые распространенные аддоны\решения.
Итак запрос:
Из сообщения - (Идет сбор в Гс, нид все)
или (Продам кровь саргераса) (пРодам дс) (проДаМ гараж) хотелось бы находить и подсвечивать заранее заданное мной слово. И самое важное, зачем я и обратился сюда, игнорировать тот момент, что оно написано заборчиком\частоколом, или капсом, или какая-то буква в слове большая.
Моё прошлое решение.
Да, находит, да подсвечивает. Это удобно если нужно быстро что-то добавить, и не важно если пропустишь в чате сообщение с искомым, но...
Недостаток - нужно вводить огромную базу написания только одного слова. Это тупо\долго\не правильно. Комбинаций масса.
Хочу вбивать поиск нужных слов, только 1 раз.
Код:
local MyFilterAddon = CreateFrame'Frame'
local function myChatFilter(self, event, arg1, ...)
local ignorelisttext = {"гс", "ГС", "Гс", "гС", "Гробница саргераса", "Гробница Саргераса",
"продам", "Продам", "продаМ", "прОдам", "ПРодам",
}
for i = 1, #ignorelisttext do
if string.find(arg1, ignorelisttext[i], 1, "%uds.") then
PlaySound(866, "Master");
return false, gsub(arg1, ignorelisttext[i], "\124cff0070DDГС\124r"), ...
end
end --for
end --end function
function MyFilterAddon:PLAYER_LOGIN()
ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", myChatFilter) ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", myChatFilter)
end
MyFilterAddon:RegisterEvent'PLAYER_LOGIN'
MyFilterAddon:SetScript('OnEvent', function(self, event, ...)
return self[event](self, event )
end)
если ограничить до:
Код:
local ignorelisttext = {
"гс",
"продам",
}
M9iFQ5o.jpg
Функция выше была найдена в нете, и по дефолту имела:
Код:
if arg1:find("green") then
return false, gsub(arg1, "green", "blue"), ...
end
вместо моего корявого string.find который криво работает из-за недопонимания. Патерн не работает(
Заменяет в чате, только для вас, слово грин на блю.
Работа с патернами:
Берём макрос
Код:
local a = string.match("string", patern)
print(a)
при local a = string.match("1Привет33fRrHJK", "%u")
получаем "R" (%u - аппер кейс, большие буквы) Буква П проигнорена. Ват? Оо. Где HJK? не ретурнит их, не принтует(
при local a = string.match("1Привет33fRr", "%l")
получаем "f" (%l - ловер кейс, малые буквы) Все русские символы проигнорированы( и r, 2-я по счету малая тоже(
Надеюсь запрос понятен. Разжевал как мог. Я перебрал много вариантов. Допускаю что и не match find мне нужны.
Литература которая может понадобиться: