Автор: KauH 16.11.2008, 23:04
есть скрипт антирекламы (может кому и пригодится) , не хочет реагировать на сочетание :411
CODE
MainBot = SetMan.GetString(21) -- Имя главного бота
BotReg = 1 -- Регистрировать ли бота на хабе (1-да/0-нет)
tWhomToSend = { -- профили, которые получат сообщение:
[0] = 1, -- админы
}
RekProfAllow = { -- Профили пользователей, которым разрешена реклама
[0]=1, -- Мастер
[1]=1, -- Оператор
[2]=0, -- VIP
[3]=0, -- Зарегистрированный пользователь
[4]=1, -- Server
[-1]=0, -- Незарегистрированный пользователь
}
MatProfAllow = { -- Профили пользователей, которым разрешено использовать нецензурные выражения
[0]=1, -- Мастер
[1]=1, -- Оператор
[2]=0, -- VIP
[3]=0, -- Зарегистрированный пользователь
[4]=1, -- Server
[-1]=0, -- Незарегистрированный пользователь
}
adverTable = { -- Маска запрещенных сочетаний при проверке на рекламу
"%S+%.%S+%.%S+.*[41??]%s*[10??]%s*[14??]%s*[2]?[1]?",
"[dD]%s*[cC]%s*[hH]%s*[uU]%s*[bB]%s*:%s*/%s*/",
"%d%d%?%d?%.%d%d%?%d?%.%d%d%?%d?%.%d%d%?%d?%s*:%s*[14][410][14][2]?[1]?",
"%d*%.%d*%.%d*%.%d*%s*:",
"%s*[411]",
}
safeTable = { -- Маска исключений для рекламы
"[hH]%s*[tT]%s*[tT]%s*[pP]%s*:%s*/%s*/",
"%s*[27015]",
"%.%.%.%.%.",
"%?%?%?%?%?",
"%$%$%$%$%$",
}
matTable = { -- Маска запрещенных сочетаний при проверке на мат (достаточно писать только строчными буквами)
"[бБ]%s*[лЛ]%s*[яЯ]",
"[хХ]%s*[уУ]%s*[йЙ]",
"[хХ]%s*[аА]%s*[бБ]",
"[hH]%s*[uU]%s*[bB]",
"[dD]%s*[cC]",
"[аА]%s*[дД]%s*[рР]%s*[еЕ]%s*[сС]",
"[cC]%s*[tT]%s*[rR]%s*[lL]",
}
excTable = { -- Маска исключений для мата
}
MatSubs = "}:-[ <вырезано цензурой> }:-["
Texts = { -- Стандартные технические сообщения (изменять не рекомендую)
" Внимание! Реклама хабов категорически запрещена.",
" Внимание! Вероятная попытка несанкционированной рекламы! Пользователь",
" сказал в общий чат следующую фразу:",
" сказал в приват следующую фразу:",
" Внимание! Оскорбительный мат на хабе запрещен. Уважайте окружающих.",
" Внимание! Вероятная попытка использования мата или рекламы ! Пользователь",
}
MessageToAll = {
"Народ, кто хочет выпить пива? Угощаю.",
"У меня сегодня праздник! Проставляюсь всем!",
"Постучите мне по голове, чтобы я проснулся.",
"Ау, где я?",
"Народ. Ау. Где я?",
"Что здесь происходит?",
"Больше так пить не буду.",
"Хочу быть взрослым.",
"Хочу быть умным.",
"Почему у меня усы не растут?",
"На какую кнопку нужно нажимать чтобы выключить комп?",
"абыРвалГ",
"Народ. Какое сегодня число?",
"Народ. Какой сегодня месяц?",
"Не понял.",
"Мои мысли, мои скакуны.",
"Раздолбай я, раздолбай.",
"Пора менять клавиатуру.",
"Кому подарить 100$.",
"У меня сегодня просто замечательное настроение",
"У компьютера должны моргать лампочки или это у меня с глазами что-то?",
"Здесь есть доктор?",
"Что так сильно может гудеть в компьютере?",
"Сейчас день или ночь?",
"Кому нужны слоты? Могу отдать бесплатно, мне они больше не нужны.",
"Ой. Что это?",
"Отсосу задёшево;)",
}
sReason = "Нарушение правил хаба. Ищите другое место для рекламы своего хаба !!!"
function OnStartup()
if BotReg==1 then
Core.RegBot(MainBot,"","",true)
end
PhrasLen = table.maxn(MessageToAll)
end
function ChatArrival(user,data)
Core.GetUserAllData(user)
local s,e,msg = string.find(data,"%b<>%s*(.*)%|")
msg = StringLower(msg)
if not (RekProfAllow[user.iProfile]==1) then
if checkForAdvertising(msg) then
if checkForSafe(msg) then
return false
end
Core.SendToAll("<"..user.sNick.."> "..MessageToAll[math.random(PhrasLen)])
SendToOps("<"..MainBot.."> "..Texts[2].." "..user.sNick.." ["..user.sIP.."] "..Texts[3].." "..msg)
Core.SendToNick(user.sNick,"<"..MainBot.."> *** "..Texts[1])
BanMan.TempBan(user,0,sReason,MainBot,true)
Core.Disconnect(user)
return true
end
end
if not (MatProfAllow[user.iProfile]==1) then
if checkForMat(msg) then
if checkForExc(msg) then
return false
end
SendToOps("<"..MainBot.."> "..Texts[6].." "..user.sNick.." ["..user.sIP.."] "..Texts[3].." "..msg)
-- Core.SendToAll("<"..user.sNick.."> "..MatSubs)
-- return true
end
end
collectgarbage("collect")
end
function ToArrival(user,data)
Core.GetUserAllData(user)
local s,e,to,from,msg=string.find(data,"%$To:%s(%S+)%sFrom:%s%S+%s$<(%S+)%>%s(.*)$")
msg = StringLower(msg)
if not (RekProfAllow[user.iProfile]==1) then
if checkForAdvertising(msg) then
if checkForSafe(msg) then
return false
end
Core.SendToAll("<"..user.sNick.."> "..MessageToAll[math.random(PhrasLen)])
SendToOps("<"..MainBot.."> "..Texts[2].." "..user.sNick.." ["..user.sIP.."] "..Texts[4].." "..msg)
Core.SendToNick(user.sNick,"<"..MainBot.."> *** "..Texts[1])
BanMan.TempBan(user,0,sReason,MainBot,true)
return true
end
end
if not (MatProfAllow[user.iProfile]==1) then
if checkForMat(msg) then
if checkForExc(msg) then
return false
end
SendToOps("<"..MainBot.."> "..Texts[6].." "..user.sNick.." ["..user.sIP.."] "..Texts[4].." "..msg)
-- return true
end
end
collectgarbage("collect")
end
function checkForAdvertising(msg)
for _,v in ipairs(adverTable) do
if string.find(msg, v) then
return true
end
end
return false
end
function checkForSafe(msg)
for _,v in ipairs(safeTable) do
if string.find(msg, v) then
return true
end
end
return false
end
function checkForMat(msg)
for _,v in ipairs(matTable) do
if string.find(msg, v) then
return true
end
end
return false
end
function checkForExc(msg)
for _,v in ipairs(excTable) do
if string.find(msg, v) then
return true
end
end
return false
end
function StringLower(msg)
local res = ""
local Byte, Len = nil, string.len(msg)
msg = string.lower(msg)
for i = 1, Len do
Byte = string.byte(msg, i)
if (Byte >= 192) and (Byte < 224) then
Byte = Byte + 32
end
if (Byte == 168) or (Byte == 184) then Byte = 229 end
res = res..string.char(Byte)
end
return res
end
SendToOps = function( sMsg )
for iProf, bAccess in pairs(tWhomToSend) do
if bAccess == 1 then
Core.SendToProfile(iProf, sMsg)
end
end
end
уже час бьюсь , не реагирует и всё тут , помоги настроить а то я уж не совсем знаток в регулярных выражениях
Автор: Setuper 16.11.2008, 23:20
Код
"%s*:411%s*"
данное выражение отлавливает в чате :411
Автор: KauH 16.11.2008, 23:30
Цитата(Setuper @ 16.11.2008, 23:20)
Код
"%s*:411%s*"
данное выражение отлавливает в чате :411
спасибо всё работает
Автор: Herurg 17.11.2008, 2:18
вылажи целеком файлом плз :P
Автор: KauH 17.11.2008, 2:35
Цитата(Herurg @ 17.11.2008, 2:18)
вылажи целеком файлом плз :P
ну собственно код уже есть в первом сообщении ...
Из подробностей этой антирекламы
- сообщения о сработках и банах только Мастерам (профиль 0) и только в общий чат (дабы не раздражать остальных)
- максимально отлажено срабатывание на рекламу (но обход рекламы всё таки возможен)
- функция антимата видоизменена на функцию вероятной рекламы (подозрительные фразы о хабах )
- за рекламу хабов сразу банит на срок указанный в вашем хабе (для временного бана)
- за мат и вероятную рекламу не банит , а выводит сообщение Мастеру о попытке мата или рекламы
- сканирует и личку и общий чат на предмет сработок рекламы , мата и подозрительных фраз
скрипт был создан путём скрещивания большинства антирекламных скриптов
все настройки и предпочтения легко изменяются и дополняются под вас
Автор: Артём 20.11.2008, 9:12
а зачем на порты уже антиреку ставить?.... для меня не понятно :(
Автор: Mol 20.11.2008, 17:09
Артём, этого и много другого ты уже то4но не поймёш.. смирись..
Автор: Артём 20.11.2008, 22:53
Цитата(Mol @ 20.11.2008, 18:09)
Артём, этого и много другого ты уже то4но не поймёш.. смирись..
Спасибо за совет...О Всемогущий МОЗГ