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

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

MyDC.ru _ Скрипты для RusHub'а _ Скрипт лимитер

Автор: ShadoWx 27.8.2011, 20:23

Автор: Alexey
Попросил Лешу помочь с написанием этого скрипта, вот что получилось в итоге. Уверен начинающим пригодится т.к. лимитов на русхабе по умолчанию нет.
Есть для общего чата в конфиг-файле, но там пользователя просто отключают.

Код
local nMaxUsers = 1 -- максимальное разрешённое число пользователей с одного IP
----------------------------------------------------------------
function OnUserConnected(UID)
    tSameIPs = Core.GetUsers(UID.sIP)
    if tSameIPs and #tSameIPs >= nMaxUsers then
        local sMsg = "\n       [::] В доступе отказано: на хабе уже есть пользователи с этого IP-адреса: "
        for i,v in ipairs(tSameIPs) do
            sMsg = sMsg..v.sNick..", "
        end
        sMsg = sMsg:sub(1, -3)..".\n       [::]  Множественные подключения к хабу с одного IP-адреса запрещены."
        Core.SendToUser(UID, sMsg, "[OP]Домовёнок")
        Core.Disconnect(UID)
    end
end

local nMaxSymbols = 350 -- максимальное разрешённое число символов в гл.чате
----------------------------------------------------------------

function OnChat(UID, sData)
    local nMaxSymbols = #UID.sNick + nMaxSymbols + 3
    if #sData > nMaxSymbols then
        Core.SendToAll(sData:sub(1, nMaxSymbols).."<...>")
        return true
    end
end

Автор: DEN 007 27.8.2011, 23:53

ShadoWx, для чата лучше допиши функцию которая отправит этому же юзеру сообщение например такое:
<БОТ> В нашем чате можно отправлять сообщения не более 350 символов, Ваше сообщение:/n Тут текст сообщения юзера

P.S. Так как юзеров в том числе и меня бесит когда сообщение просто кушаеться хабом, приходится все писать с начала, что не есть гуд + к юзабилию.

----Некоторое время позднее----

Так же можно посчитать символы сообщения и выдать сколько символов в сообщение юзера.

Автор: ShadoWx 23.9.2011, 8:37

Автор: Alexey
Выкладываю поправленную версию скрипта:

Код
#------------------------------------------------------------------
#Число соединений с одного ip-адреса:
#------------------------------------------------------------------
local nMaxUsers = 2 -- максимальное разрешённое число пользователей с одного IP
local MainBot = "Network"
local sReason = "*** Соединение через прокси запрещено"
local sAdminNick = "ShadoWx"
#----------------------------------------------------------------
function OnUserConnected(UID)
    tSameIPs = Core.GetUsers(UID.sIP)
    if tSameIPs and #tSameIPs >= nMaxUsers then
        local sMsg = "\n       [::] В доступе отказано: на хабе уже есть пользователи с этого IP-адреса: "
        for i,v in ipairs(tSameIPs) do
            sMsg = sMsg..v.sNick..", "
        end
        sMsg = sMsg:sub(1, -3)..".\n       [::]  Множественные подключения к хабу с одного IP-адреса запрещены."
        Core.SendToUser(UID, sMsg, "Network")
        Core.Disconnect(UID)
    end
end

#------------------------------------------------------------------
#Ограничение чата:
#------------------------------------------------------------------
local nMaxSymbols = 350 -- максимальное разрешённое число символов в одном сообщении
local nMaxNL    = 5  -- максимальное разрешённое число строк в одном сообщении чата
#------------------------------------------------------------------
function OnChat(UID, sData)
    local nSymbols = #sData - #UID.sNick - 3
    if nSymbols > nMaxSymbols then
      Core.SendToAll(sData:sub(1, nMaxSymbols - nSymbols))
        Core.SendToUser(UID, "Ваше сообщение состоит из ["..nSymbols.."] символов, разрешённый максимум - ["..nMaxSymbols.."].", "Network")
        Core.SendToUser(UID, "Нажмите сочетание клавиш CTRL+UP и сократите текст своего сообщения.", "Network")
        return true
    end
    local _, nNL = sData:gsub("\n", "\n")
  if nNL >= nMaxNL then
       Core.SendToUser("Ваше сообщение содержит "..nNL.." переносов строк, разрешённый максимум - "..nMaxNL..".", "Network")
        return true
    end
end

#------------------------------------------------------------------
#функция блокировки пассивного тега у пользователя
#------------------------------------------------------------------
function OnUserEnter(UID)
    if UID.sMode == "S" then
    Core.SendToUser(UID,sReason,MainBot)
    Core.Disconnect(UID.sNick)
    if Core.GetUser(sAdminNick) then
        Core.SendToUser(sAdminNick," юзер с ником  "..UID.sNick.." и IP "..UID.sIP.." пытался войти на хаб используя прокси  !!!",MainBot)
    else
    local hFile = io.open ("log.txt" , "a+")
        if hFile then
        hFile:write("<"..MainBot.."> юзер с ником  "..UID.sNick.." и IP "..UID.sIP.." пытался войти на хаб используя прокси  !!!\r\n")
        hFile:close()
        end
    end
    end
end