Код
--антиреклама (в качестве наказания за спам используется флуд в лс спамящему по принцепу одно спам сообщение=100 сообщений с флудом)
--автор : [Страйгалдвир]
-- * Конфигурация скрипта
BotName = "BOT" -- имя бота
BotReg = 0 -- регистрировать бота на хабе? (1=да/0=нет)
BanMode =3 -- Какой тип наказания использовать? (0=перманент/1=Default temp ban time хаба/2 = сами выбираете время бана 3 = не пускать в чат, флудит спамеру ЛС)
BanTime = 20 -- Время бана в минутах для BanMode = 2
BanReason = "Реклама в чате (привате)" -- Причина наказания
-- Таблица шаблонов запрещенных адресов
adverTable = {
".org",".net","ru.","d}c}h}u}b://","dchub","d c h u b://","dchub://","%.%s*[oO]%s*[rR]%s*[gG]",
}
-- Таблица шаблонов разрешенных адресов
safeTable = {
"1-new.no-ip.org","dchub://1-new.no-ip.org:411","dchub://1-new.no-ip.org","uniongang.ru",
}
-- Что получит юзер в случае, если пустит запрещенную рекламу?
text = "\r\n\t\tПредупреждение:\r\n •Вы нарушаете правила,не стоит этого делать :) \r\n рекламные сообщения видят только админы...не испытывайте их терпение"
-- Что получит оператор хаба?
text_to_op = " Злостный спамер пытался сказать в чате:"
text_to_op_pm = " Злостный спамер пытался сказать в привате:"
math.randomseed (os.time ()) -- функция для лучшего перемешивания ников в таблице
-- Конец конфигуратора
function OnStartup()
if BotReg == 1 then
Core.RegBot(BotName,"Детектор рекламы хабов" ,"",true);
end
end
-----------------------------------------------
function ChatArrival(user,data)
local s,e,msg = string.find(data,"%b<>%s*(.*)%|")
local msg = string.lower(msg)
if not Core.GetUserValue(user,11) then
if checkForAdvertising(string.lower(msg)) then
if checkForSafe(string.lower(msg)) then
return nil
end
for i = 1, 1000 do
Core.SendPmToUser(user, tostring(math.random(1,100000)), "*** "..text)
end
Core.SendPmToOps(SetMan.GetString(24), "*** "..user.sNick.." ("..user.sIP..") "..text_to_op.." "..msg)
if BanMode == 0 then
BanMan.Ban(user,BanReason,BotName,true)
end
if BanMode == 1 then
BanMan.TempBan(user,0,BanReason,BotName,true)
end
if BanMode == 2 then
BanMan.TempBan(user,BanTime,BanReason,BotName,true)
end
if BanMode == 3 then
return true
end
end
end
end
-----------------------------------------------
function ToArrival(user,data)
local s,e,msg = string.find(data,"%b<>%s*(.*)%|")
local msg = string.lower(msg)
if not Core.GetUserValue(user,11) then
if checkForAdvertising(string.lower(msg)) then
if checkForSafe(string.lower(msg)) then
return nil
end
for i = 1, 1000 do -- кол-во сообщений спамеру в ЛС
Core.SendPmToUser(user, tostring(math.random(1,100000)), "*** "..text)
end
Core.SendPmToOps(SetMan.GetString(24), "*** "..user.sNick.." ("..user.sIP..") "..text_to_op_pm.." "..msg)
if BanMode == 0 then
BanMan.Ban(user,BanReason,BotName,true)
end
if BanMode == 1 then
BanMan.TempBan(user,0,BanReason,BotName,true)
end
if BanMode == 2 then
BanMan.TempBan(user,BanTime,BanReason,BotName,true)
end
if BanMode == 3 then
return true
end
end
end
end
-----------------------------------------------
function checkForAdvertising(msg) -- проверка на запрещенные адреса
for i = 1,#adverTable do
if string.find( msg , adverTable[i] , 1 , true ) then
return 1
end
end
end
-----------------------------------------------
function checkForSafe(msg) -- проверка на разрешенные адреса
for i = 1,#safeTable do
if string.find( msg , safeTable[i] , 1 , true ) then
return 1
end
end
end