• Страница 1 из 1
  • 1
Модератор форума: Singler  
Вопрос по патернам и string.match find
alexdubovyck
Рыцарь
Вопрос не к рядовым юзерам. А по типу Dreamlolz, и в таком духе. Мб уже и сообщество научилось юзать Lua по нормальному, хз. Не обижайтесь.

Я бы справился и 1, но уже чёт долго туплю над этой задачей. Решил обратиться на форум. Мне Дрим часто помогал с кодом.

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

Вообщем лень - двигатель прогресса. Я только за =)
К модератору претензий нет, делает это он скорей всего с помощью чат аддонов по типу Prat и т.д.

Я естественно хочу поступить другим способом. В своем аддоне самостоятельно составлять список слов и контролировать этот процесс вручную. И не в коем случае не использовать готовые распространенные аддоны\решения.

Итак запрос:
Из сообщения - (Идет сбор в Гс, нид все)
или (Продам кровь саргераса) (пРодам дс) (проДаМ гараж) хотелось бы находить и подсвечивать заранее заданное мной слово. И самое важное, зачем я и обратился сюда, игнорировать тот момент, что оно написано заборчиком\частоколом, или капсом, или какая-то буква в слове большая.

Моё прошлое решение. 
Да, находит, да подсвечивает. Это удобно если нужно быстро что-то добавить, и не важно если пропустишь в чате сообщение с искомым, но...
Недостаток - нужно вводить огромную базу написания только одного слова. Это тупо\долго\не правильно. Комбинаций масса.
Хочу вбивать поиск нужных слов, только 1 раз.

Код
local MyFilterAddon = CreateFrame'Frame'
local function myChatFilter(self, event, arg1, ...)

local ignorelisttext = {"гс", "ГС", "Гс", "гС", "Гробница саргераса", "Гробница Саргераса",
"продам", "Продам", "продаМ", "прОдам", "ПРодам",
}
[url=https://forum.wowcircle.com/member.php?u=248585]Мой профиль
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 = {
"гс",
"продам",
}




Функция выше была найдена в нете, и по дефолту имела:
Код
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 мне нужны.

Литература которая может понадобиться:


• Wowjp: Моя темка
• Yt: youtube.com/@LuaNaZakaz
• Discord: discord.gg/Jgmf7AJ
• Vk: vk.com/luanazakaz
• Telegram: t.me/LuaNaZakaz
• Boosty: boosty.to/luanazakaz
Сообщение # 1 написано 19.08.2018 в 07:11
  • Страница 1 из 1
  • 1
Поиск: