Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Служебные скрипты [PtokaX] _ Defend PM

Автор: Enyby 21.1.2012, 14:11

Название скрипта: Defend PM
Версия скрипта: 1.01
Платформа: PtokaX
Версия API: API2
Автор: Enyby

Описание: Скрипт предназначен для полностью автоматической защиты ЛС пользователей от спама. Выдает бан, при обнаружении спама.

Принципы работы скрипта:
Обычные пользователи отличаются от спамеров тем, что у обычных пользователей, если и пройдет ссылка на хаб, IP адрес или что-то подобное, то это будет разово. На этом и основана работа скрипта.
При получении ЛС оно проверяется на наличие стоп слов. Если стоп слова найдены, то список спамера пополняется очередным ником. Если ников стало больше предела уведомления операторов, то операторы уведомляются. Если больше предела предупреждений - пользователь предупреждается. Если больше либо равно пределу бана - пользователь уходит в бан.
Периодически запускается очистка, которая убирает по одному нику из списка спамера.
Таким образом идет учет количества отспамленных в интервале проверки. Чтобы спамить безнаказанно, нужно писать новым пользователям не чаще 1 раза в интервал. По умолчанию интервал 5 минут.

 DefendPM.lua ( 4.05 килобайт ) : 326


P. S. Если у вас нет регистрации на этом форуме, а значит вы не можете качать вложения, то скачать этот скрипт, равно как и другие, можно по ссылке http://mydc.ru/r/?http://inethub.olvi.net.ua/ftp/pub/Soft/Servers/DC%2B%2B/LUA%20scripts/Enyby/ http://mydc.ru/r/?ftp://inethub.olvi.net.ua/pub/Soft/Servers/DC++/LUA%20scripts/Enyby/.

Автор: Alex_lola 21.1.2012, 21:26

ничего нового ты не придумал..антиреклама в личке misdoubt.gif

Автор: Enyby 22.1.2012, 14:52

Я отвечу цитатой.

Цитата
Цитата
Скажите мне, что все эти комментаторы сделали в своей жизни нового и интересного? Они вообще что-нибудь в ней создали? Пока что Я вижу, что у меня просто насрано в комментариях, больше НИ-ЧЕ-ГО!
[...]
Или эта позиция: «Ну, это Я уже видел. Это уже было. Дайте мне что-нибудь новенькое, чтобы Я поржал!» Ха-ха-ха!
Источник: http://mydc.ru/r/?http://mf0.me/videoobrascheniya/mr-freeman-part-63

Автор: AfLc 22.1.2012, 22:09

Здравствуйте Вам. Можно ли сделать чтобы не только на определенные стоп слова скрипт реагировал , а вообще на сильную пм активность пользователя ?

Автор: Enyby 22.1.2012, 22:14

Можно, но такая функциональность уже встроена в хаб. Смотрите в настройках хаба флудообнаружение.

Замените функцию ToArrival на следующую:

Код
function ToArrival(tUser, sData)
    if tSpamUsers[tUser.sIP] == nil then
        tSpamUsers[tUser.sIP] = {}
    end
    if tSpamUsers[tUser.sIP][sToNick] == nil then
        tSpamUsers[tUser.sIP][sToNick] = true
        table.insert(tSpamUsers[tUser.sIP], sToNick)
    end
    local iCount = #tSpamUsers[tUser.sIP]
    local sReport = ""
    if iCount > iLimit then
        sReport = sReport.."*** Пользователь "..tUser.sNick.." с IP "..tUser.sIP.." отослал ЛС "..iCount.." разным пользователям за последние "..iClearTime.." минут. Возможно спам по ЛС. "
    end
    if iCount > iWarnLimit and iCount < iBanLimit then
        Core.SendToUser(tUser, "<"..sBot.."> *** Прекратите рассылать спам по личкам, иначе вы получите бан!")
        sReport = sReport.."Пользователь предупрежден. "
    end
    if iCount >= iBanLimit then
        BanMan.TempBanIP(tUser.sIP, iTimeBan, "Спам по ЛС", sBot, true)
        local sTimeBan = os.date("%d.%m.%Y %R", os.time() + iTimeBan*60)
        sReport = sReport.."Пользователь забанен до "..sTimeBan..". "
        local tUsers = Core.GetUsers(tUser.sIP)
        if tUsers ~= nil then
            for _, tSpamUser in pairs(tUsers) do
                Core.SendToUser(tUser, "<"..sBot.."> *** Вы были забанены до "..sTimeBan.." за спам по ЛС.")
                Core.Disconnect(tSpamUser)
            end
        end
        tSpamUsers[tUser.sIP] = nil
        sReport = sReport.."Отключено "..#tUsers.." пользователей."
    end
    if sReport ~= "" then
        Core.SendToOps("<"..sBot.."> "..sReport)
    end
end

Автор: AfLc 22.1.2012, 22:20

Да , но вроде во флудообнаружение , как я помню не пишет сообщение которое использует спамер или флудер.Хотя точно не помню.У меня лички почти всегда были отключены на ynhub, а когда перешел на ptokax в лички можно отправлять было только после реги.

Автор: Enyby 22.1.2012, 22:22

Мой скрипт тоже не пишет текста сообщений. Он либо проверяет текст сообщения на слова, либо просто считает число отосланных ЛС.

Автор: AfLc 22.1.2012, 22:24

Точно не увидел . Извините :( НО все таки полезный скрипт , спасибо !

Автор: Enyby 26.1.2012, 1:29

Новая версия 1.01.
Добавлено игнорирование операторов и расширен список паттернов основными доменами.

ADD:
Игнор операторов означает что операторы не проверяются этим скриптом, но если с IP оператора не оператором будет отсылаться спам, то оператора тоже забанит. Хотя это зависит от настроек профиля операторов. Но отключит от хаба это точно.

Автор: Marc 26.1.2012, 1:47

Enyby!
А можно как-то разделить админа и операторов отдельным меню?
Я имею ввиду то, что если админу по идее можно всегда давать возможность посылать любые адреса, то операторам не всегда можно давать такую возможность....

Автор: Enyby 26.1.2012, 1:53

Замените:

Код
    if tUser.bOperator == nil then Core.GetUserData(tUser, 11) end
    if not tUser.bOperator then

На:
Код
    if tUser.iProfile ~= 3 then

где 3 - номер профиля, который нужно игнорировать.

Автор: Marc 26.1.2012, 2:00

Enyby!

Спасибо! данное дополнение поможет админу....

Автор: Enyby 26.1.2012, 2:02

Для "спасибо" на этом форуме есть специальная кнопка внизу каждого поста. Если пост помог - нажимаете кнопку.

Автор: Tsd 3.3.2012, 14:54

Непонятна функция
function PrettyTime(iTime)

end

Автор: Enyby 3.3.2012, 14:56

Просто осталась от попыток написаний и улучшений. Не проследил, когда делал релиз. Сейчас уже пусть будет так - она никому не мешает.

Автор: Tsd 3.3.2012, 15:00

Понятно. Думал может какая то задержка, но вызова функции в скрипте не обнаружил.
А Вы не хотели бы "склеить" вместе все три скрипта (Hub, Chat, PM) с возможностью подключения/отключения их в конфиге ?

Автор: Enyby 3.3.2012, 15:10

В теории можно, но не вижу смысла. Будет комбайн. Труднонастраиваемый и не особо понятный. Единственное что будет лучше - один скрипт, вместо трех.

Например, некоторым админстратором нужно делать исключение для операторов только в PM скрипте, а не во всех. У других уже стоит антиреклама на личку или еще что-то и т. д.

Автор: Tsd 3.3.2012, 15:17

Я один скрипт и имел ввиду. А конфиг, если и большой - не беда, один раз настроить и всё. Для удобства настройки конфиг можно сделать блоками.

Автор: Enyby 3.3.2012, 15:19

Посмотрим. Если уж совсем заняться нечем будет, может и сделаю.

Автор: Tsd 3.3.2012, 15:30

Цитата(Marc @ 26.1.2012, 0:47) *
Enyby!
А можно как-то разделить админа и операторов отдельным меню?
Я имею ввиду то, что если админу по идее можно всегда давать возможность посылать любые адреса, то операторам не всегда можно давать такую возможность....

Хороши операторы, если вы им не доверяете...

Автор: Enyby 5.3.2012, 12:38

Чтобы сделать блокировку сообщений достаточно:

Код
                if iCount >= iBanLimit then
                    BanMan.TempBanIP(tUser.sIP, iTimeBan, "Спам по ЛС", sBot, true)
                    local sTimeBan = os.date("%d.%m.%Y %R", os.time() + iTimeBan*60)
                    sReport = sReport.."Пользователь забанен до "..sTimeBan..". "
                    local tUsers = Core.GetUsers(tUser.sIP)
                    if tUsers ~= nil then
                        for _, tSpamUser in pairs(tUsers) do
                            Core.SendToUser(tUser, "<"..sBot.."> *** Вы были забанены до "..sTimeBan.." за спам по ЛС.")
                            Core.Disconnect(tSpamUser)
                        end
                    end
                    tSpamUsers[tUser.sIP] = nil
                    sReport = sReport.."Отключено "..#tUsers.." пользователей."
                end
                if sReport ~= "" then
                    Core.SendToOps("<"..sBot.."> "..sReport)
                end
заменить на:
Код
                if iCount >= iBanLimit then
                    sReport = sReport.."Сообщение заблокировано. "
                end
                if sReport ~= "" then
                    Core.SendToOps("<"..sBot.."> "..sReport)
                end
                if iCount >= iBanLimit then
                    return true
                end


ADD:
Улучшенная детекция IP адреса:
Код
"[0-9]?[0-9]?[0-9].+[0-9]?[0-9]?[0-9].+[0-9]?[0-9]?[0-9].+[0-9]?[0-9]?[0-9]",
заменить на:
Код
"[^%d]%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]",
"^%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]",
"^%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d$",
"[^%d]%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d$",
вариант чуть по проще:
Код
"%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d[^%d]+%d?%d?%d",

Автор: mod 4.11.2018, 4:52

Код
Синтаксис C:\allservers\PtokaX\scripts\DefendPM.lua:122: bad argument #1 to 'date' (invalid conversion specifier '%R')
stack traceback:
    [C]: in function 'os.date'
    C:\allservers\PtokaX\scripts\DefendPM.lua:122: in function 'ToArrival'

0.5.0.3 версия

Автор: Ksan 4.11.2018, 14:31

mod, попробуйте вместо %R вставить %H:%M (либо %H:%M:%S, если хотите быть точным до секунд) в строке 122, на которую указывает приведённая вами ошибка.
Видимо, %R - это попытка представить время в удобном региональном формате, но Птока (ну или Луа, а то и вовсе ваша система) не поняла добрых намерений автора.