--[[ Название: NoCaps Описание: Скрипт антикапса Версия: 1.0 Автор: Setuper Copyright (c) 2010 by Setuper ]] -- Размер сообщения с которого начинает реагировать скрипт local iCheckSize = 4 -- Доля капса, при котором сработает скрипт local iPersents = 0.4 -- Число разрешённых подряд символов local iSymbRep = 4 dcpp = {} os.setlocale"Russian_Russia.1251" local sBigData = DC():ToUtf8("[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ]") local sPatternRep = "(.)("..("%1"):rep(iSymbRep)..")" local function CheckRep(sData) if sData:match(sPatternRep) then local sSmb, sMsg, iC = '', '', 0 for i = 1, #sData do local s = sData:sub(i, i) if sSmb == s then iC = iC + 1 if iC <= iSymbRep then sMsg = sMsg..s end else sSmb, iC, sMsg = s, 1, sMsg..s end end return sMsg end return sData end local function CheckCaps(sData) local sNoSpaces = sData:gsub("[%s%d%c%p]", '') local iNoSpasesLen = sNoSpaces:len() if iNoSpasesLen > 0 then local iCapsLen = 0 sNoSpaces:gsub(sBigData, function(c) iCapsLen = iCapsLen + 1 end) if (iCapsLen / iNoSpasesLen) >= iPersents then sData = sData:lower() end end return sData end function dcpp.PreviewPublicMessage(sHubUrl, sData) sData = DC():FromUtf8(sData) if sData:len() >= iCheckSize then local sMsg = CheckCaps(CheckRep(sData)) if sMsg ~= sData then DC():SendPublicMessage(sHubUrl, DC():ToUtf8(sMsg)) return 1 end end return nil end