--//----------------------------------------//-- --//-- Регистрация v 2.0 (PtokaX > 0.3.6.0d) --//-- Автор: DestroyNet © 09.10.2007 --//-- Базируется на скрипте от NRJ (22.09.06) --//----------------------------------------//-- --[[ Возможность блокировать незареганым поиск/скачку/Чат (по выбору) -- Выбор метода регистрации: самоличная/требуется подтверждение Оператора -- При отказе в регистрации ника оператор может указать причину, если юзер успел уйти с хаба, причину отказа ему покажет при следующем заходе ]] --[[ Конфигурация ]]-- sBot = "" -- оставить "" чтобы взять ник бота хаба --//----------------------------------------//-- BlockSearch = 1 -- Блокировать поиск незарегесрированным BlockDL = 1 -- Блокировать скачку незарегесрированным BlockChat = 1 -- Блокировать чат незарегесрированным --//----------------------------------------//-- ShowInfo = 1 -- позазывать дополнительную информацию о том, как можно избежать повторных вводов пароля при входе на хаб ShowToAll = 0 -- показывать всем пользователям, что на хабе новый зарегистрированный участник --//----------------------------------------//-- RegMode = 0 -- 1 - Пользователь может сам зарегестрироваться / 0 - Требуеться подтверждение оператора --//----------------------------------------//-- NeedRegFile = "Registration.dat" --//----------------------------------------//-- -- Сообщение показываемое незарегестрированным пользователям rMsg = "\r\n".. "\t"..string.rep("«»", 30).."\r\n".. "\t\tВЫ НЕ ЗАРЕГИСТРИРОВАНЫ НА ХАБЕ ! ! !\r\n".. "\t"..string.rep("«»", 30).."\r\n".. "\tНе зарегестрированным пользователям запрещены поиск, скачка файлов и общение в чате\r\n".. "\tДля регистрации на хабе отправьте запрос операторам\r\n".. "\t\r\n".. "\tПомощь по регистрации: !reghelp\r\n\r\n".. "\t"..string.rep("«»", 30) --//----------------------------------------//-- --[[ Основной Код скрипта ]]-- --[[ Не редактируйте если не уверены ]]-- NeedReg = {} na = "n/a" tShareUnits = {"Б", "КБ", "МБ", "ГБ", "ТБ", "ПБ"} tOpPrifiles = { [0] = true, [1] = true, } function OnStartup() sPtokaXsPath = Core.GetPtokaXPath():g("/", "\\") sScriptsPath = sPtokaXsPath.."scripts\\" if sBot == "" then sBot = SetMan.GetString(21) end if loadfile(sScriptsPath..NeedRegFile) then dofile(sScriptsPath..NeedRegFile) end TmrMan.AddTimer(1000, "ClearMemory") end function DoShareUnits(iSize) local iTableSize = #tShareUnits iSize = tonumber(iSize) local sUnits = "" for iTablePos = 1, iTableSize do if iSize < 1024 or iTablePos == iTableSize then sUnits = tShareUnits[iTablePos] break else iSize = iSize / 1024 end end local sSize = string.format("%0.2f %s", iSize, sUnits) sSize = string.gsub(sSize, "%.", ",") local _,_, s1stChar, s2ndChar = string.find(sSize, "%d+,(%d)(%d)") s1stChar, s2ndChar = tonumber(s1stChar), tonumber(s2ndChar) if s2ndChar == 0 then sSize = string.gsub(sSize, ","..s1stChar..s2ndChar, ","..s1stChar) if s1stChar == 0 then sSize = string.gsub(sSize, ","..s1stChar, "") end end return sSize end function ClearMemory() collectgarbage("collect") end function Return(sData) if type(sData) == "function" then return sData end return function() return sData end end string.g = function(sData, s1, s2) return sData:gsub(s1, Return(s2)) end function OnExit() local hFile = io.open(sScriptsPath..NeedRegFile, "w+") Serialize(NeedReg, "NeedReg", hFile) hFile:close() end function UserConnected(curUser) if curUser.iProfile == -1 then if NeedReg[curUser.sNick] then if NeedReg[curUser.sNick].Reason ~= "" then local tReason = NeedReg[curUser.sNick].Reason Core.SendPmToNick(curUser.sNick, sBot, "Ваш запрос на регистрацию ника '"..curUser.sNick.."' был отклонен. Причина: "..tReason) NeedReg[curUser.sNick] = nil else Core.SendToOpChat("Пользователь "..curUser.sNick.." ("..curUser.sIP..") ожидает подтверждения регистрации ника.\r\n".. "Для подтверждения напишите: !reguser "..curUser.sNick.."\r\n".. "Для отказа в регистрации: !noreg "..curUser.sNick.." <причина>") end end Core.SendPmToNick(curUser.sNick, sBot, rMsg) Core.SendToUser(curUser, "$UserCommand 1 1 Регистрация\\Зарегистрироваться$<%[mynick]> !regme %[line:Введите пароль или оставьте поле пустым]|") else Core.SendToUser(curUser, "$UserCommand 1 1 Регистрация\\Сменить пароль$<%[mynick]> !passwd %[line:Введите новый пароль]|") Core.SendToUser(curUser, "$UserCommand 1 1 Регистрация\\Удалить регистрацию$<%[mynick]> !unreg|") if tOpPrifiles[curUser.iProfile] then for i,v in pairs(NeedReg) do if v.Reason == "" then Core.SendPmToNick(curUser.sNick, sBot, "Пользователь "..i.." ("..v.IP..") подал запрос на регистрацию ника.\r\n".. (v.AddInfo or "").. "Для подтверждения напишите: !reguser "..i.."\r\n".. "Для отказа в регистрации: !noreg "..i.." <причина>") end end end end end RegConnected = UserConnected OpConnected = UserConnected function ChatArrival(curUser, sData) Core.GetUserAllData(curUser) local sData = string.sub(sData, 1, -2) local s,e,cmd =string.find(sData, "%b<>%s+(%S+)") if RegMode == 1 then if cmd == "!regme" then if curUser.iProfile == -1 then local s,e,pass = string.find(sData, "%b<>%s+%S+%s+(%S+)") if pass == nil then local pass = math.random(os.date("%H%M%S")) end RegMan.AddReg(curUser.sNick, pass.."", 3) Core.SendToUser(curUser, "<"..sBot.."> Вы были зарегистрированы на хабе. Ваш ник:"..curUser.sNick.." Пароль: "..pass..". Не забудьте перезайти на хаб!") if ShowInfo == 1 then Core.SendToUser(curUser, "<"..sBot.."> Теперь для входа на хаб под вашим ником необходимо знать пароль. Вы можете вводить его каждый раз вручную, либо прописать пароль в настройках клиента. Для этого найдите в списке избранных хабов этот хаб, зайдите в его свойства и пропишите в строках Nick и Password ваши ник и пароль.") end if ShowToAll == 1 then Core.SendToAll("<"..sBot.."> Приветствуем нового зарегистрированого участника - "..curUser.sNick.." !!!") end else Core.SendToUser(curUser, "<"..sBot.."> Вы уже зарегистрированы!") end return true end else if cmd == "!regme" then if curUser.iProfile == -1 then if NeedReg[curUser.sNick] then Core.SendToUser(curUser, "<"..sBot.."> Заявка на регистрацию ника '"..curUser.sNick.."' уже рассматривается!") else local s,e,pass = string.find(sData, "%b<>%s+%S+%s+(%S+)") if pass == nil then pass = math.random(os.date("%H%M%S")) end local sAddInfo = "\tШара: "..DoShareUnits(Core.GetUserValue(curUser, 16) or 0).."\r\n".. "\tОписание: "..(Core.GetUserValue(curUser, 2) or na).."\r\n".. "\tEmail: "..(Core.GetUserValue(curUser, 5) or na).."\r\n".. "\tТег: "..(Core.GetUserValue(curUser, 3) or na).."\r\n" NeedReg[curUser.sNick] = { Nick = curUser.sNick, IP = curUser.sIP, Password = pass, Reason = "", AddInfo = sAddInfo, } Core.SendToUser(curUser, "<"..sBot.."> Ваша заявка на регистрацию ника успешно отправлена.\r\n".. "Параметры заявки:\r\n".. "Ник: "..curUser.sNick.."\r\n".. "Пароль: "..pass.."\r\n".. "Не забудьте эти данные, после подтверждения регистрации, вы не сможете зайти на хаб под этим ником незная пароля!") Core.SendToOpChat("Пользователь "..curUser.sNick.." ("..curUser.sIP..") подал запрос на регистрацию ника.\r\n".. (sAddInfo or "").. "Для подтверждения напишите: !reguser "..curUser.sNick.."\r\n".. "Для отказа в регистрации: !noreg "..curUser.sNick.." <причина>") end else Core.SendToUser(curUser, "<"..sBot.."> Вы уже зарегистрированы!") end return true end end if cmd == "!unreg" then if curUser.iProfile ~= -1 then RegMan.DelReg(curUser.sNick) Core.SendToUser(curUser, "<"..sBot.."> Ваш аккаунт был был удален") else Core.SendToUser(curUser, "<"..sBot.."> Команда доступна только для зарегистрированных пользователей!") end return true elseif cmd == "!reghelp" then local hMsg = "\r\n\r\n".. "\t"..string.rep("«»", 30).."\r\n".. "\t\tПомощь по регистрации\r\n".. "\t"..string.rep("«»", 30).."\r\n\r\n".. "\t!reghelp\t\t - Этот файл помощи\r\n".. "\t!regme <пасс>\t - Зарегистрироваться (можно не указывать пасс)\r\n".. "\t!passwd <пасс>\t - Сменить пароль\r\n".. "\t!unreg\t\t - Удалить аккаунт\r\n\r\n".. "\tТакже все команды доступны в меню хаба:\r\n".. "\tНажмите правой кнопкой на закладке хаба\r\n".. "\tи выбирете подменю 'Регистрация'\r\n".. "\t"..string.rep("«»", 30) Core.SendPmToNick(curUser.sNick, sBot, hMsg) return true elseif cmd == "!reguser" then if tOpPrifiles[curUser.iProfile] then local s,e,rNick = string.find(sData, "%b<>%s+%S+%s+(%S+)") if NeedReg[rNick] then local pass = NeedReg[rNick].Password RegMan.AddReg(rNick, pass.."", 3) NeedReg[rNick] = nil if Core.GetUser(rNick) then Core.SendPmToNick(rNick, sBot, "Ваш запрос на регистрацию ника был одобрен.\r\n".. "Параметры заявки:\r\n".. "Ник:"..rNick.."\r\n".. "Пароль: "..pass..". Не забудьте перезайти на хаб!") if ShowInfo == 1 then Core.SendToNick(rNick, "<"..sBot.."> Теперь для входа на хаб под вашим ником необходимо знать пароль. Вы можете вводить его каждый раз вручную, либо прописать пароль в настройках клиента.\r\n".. "Для этого найдите в списке избранных хабов этот хаб, зайдите в его свойства и пропишите в строках Nick и Password ваши ник и пароль.") end if ShowToAll == 1 then Core.SendToAll("<"..sBot.."> Приветствуем нового зарегистрированого участника - "..rNick.."!") end end Core.SendToOpChat("Заявка на регистрацию ника '"..rNick.."' подтверждена. ("..curUser.sNick..")") else Core.SendToUser(curUser, "<"..sBot.."> Заявка на регистрацию ника '"..rNick.."' не найдена.") end else end return true elseif cmd == "!noreg" then if tOpPrifiles[curUser.iProfile] then local s,e,rNick,tReason = string.find(sData, "%b<>%s+%S+%s+(%S+)%s+(.*)") if NeedReg[rNick] then local nrIP = NeedReg[rNick].IP local nrPASS = NeedReg[rNick].Password NeedReg[rNick].Reason = tReason if Core.GetUser(rNick) then Core.SendPmToNick(rNick, sBot, "Ваш запрос на регистрацию ника был отклонен. Причина: "..tReason) NeedReg[rNick] = nil end Core.SendToOpChat("Заявка на регистрацию ника '"..rNick.."' отвергнута. Причина: "..tReason.." ("..curUser.sNick..")") else Core.SendToUser(curUser, "<"..sBot.."> Заявка на регистрацию ника '"..rNick.."' не найдена.") end end return true end if BlockChat == 1 and curUser.iProfile == -1 then Core.SendToUser(curUser, "<"..sBot.."> Зарегестрируйтесь для получения возможности общаться в чате. Помощь по регистрации: !reghelp") return true end end function ConnectToMeArrival(curUser, sData) if BlockDL == 1 and curUser.iProfile == -1 then Core.SendToUser(curUser, "<"..sBot.."> Зарегестрируйтесь для получения возможности скачивать файлы") return true end end MultiConnectToMeArrival = ConnectToMeArrival RevConnectToMeArrival = ConnectToMeArrival function SearchArrival(curUser, sData) if BlockSearch== 1 and curUser.iProfile == -1 then Core.SendToUser(curUser, "<"..sBot.."> Зарегестрируйтесь для получения возможности пользоваться поиском") return true end end SRArrival = SearchArrival function Serialize(tTable, sTableName, hFile, sTab) sTab = sTab or ""; hFile:write(sTab..sTableName.." = {\n"); for key, value in pairs(tTable) do if (type(value) ~= "function") then local sKey = (type(key) == "string") and string.format("[%q]", key) or string.format("[%d]", key); if(type(value) == "table") then Serialize(value, sKey, hFile, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q", value) or tostring(value); hFile:write(sTab.."\t"..sKey.." = "..sValue); end hFile:write(",\n"); end end hFile:write(sTab.."}"); end