RegmeEmail, API2 | Регистрация через e-mail |
Здравствуйте, гость ( Вход | Регистрация )
RegmeEmail, API2 | Регистрация через e-mail |
15.12.2009, 14:36
Сообщение
#61
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Название скрипта: RegmeEmail
Версия API: 2 Версия скрипта: 1.0 Автор: Setuper Описание: Простенькая регистрация через e-mail. Команда для регистрации: !regme email@email.com После отправки команды, у пользователя есть 10 минут для того, чтобы зайти в почту, посмотреть там пароль и зайти на хаб. В противном случае авторизация не произойдёт, и спустя 10 минут аккаунт удалится с хаба. ВНИМАНИЕ! Для работы скрипта необходимы модули: cmd и email, а также необходима библиотека сокетов: http://mydc.ru/topic43.html Модули и библиотеку сокетов следует поместить в папку libs. Обо всех ошибках и просьбах писать сюда. Необходимые модули: cmd.lua ( 1.62 килобайт ) Кол-во скачиваний: 288 email.lua ( 1.94 килобайт ) Кол-во скачиваний: 261 Непосредственно сам скрипт: regme_email.lua ( 6.18 килобайт ) Кол-во скачиваний: 302 |
|
|
27.5.2011, 12:18
Сообщение
#62
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
Dani_Filth, скрипт не причём, меняй кодировку на мыле.
|
|
|
27.5.2011, 17:03
Сообщение
#63
|
|
Активный участник Группа: Пользователи Сообщений: 51 Регистрация: 24.5.2011 Из: Комсомольск на Амуре Пользователь №: 9 283 Спасибо сказали: 0 раз |
Артём, А где именно ?
|
|
|
27.5.2011, 19:15
Сообщение
#64
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
Dani_Filth, я не знаю где у тебя зарегистрирован аккаунт E-mail, и подсказать не могу.
|
|
|
27.5.2011, 19:18
Сообщение
#65
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
|
|
|
27.5.2011, 19:46
Сообщение
#66
|
|
Активный участник Группа: Пользователи Сообщений: 51 Регистрация: 24.5.2011 Из: Комсомольск на Амуре Пользователь №: 9 283 Спасибо сказали: 0 раз |
Хмм.. Всё равно...Setuper, Тоже самое...
Артём, Ну я зареган на @mail.ru |
|
|
27.5.2011, 19:56
Сообщение
#67
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
|
|
|
5.1.2012, 18:43
Сообщение
#68
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
Помогите немного подправить скрипт. Я хочу чтобы он генерировал не одни цифры для пароля а цифры+буквы. За ране спасибо!
|
|
|
5.1.2012, 18:57
Сообщение
#69
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Ameet, находишь в скрипте вот такой код:
Код function GetPass() и вместо него копируешь отсюда этот: math.randomseed(os.time()) return tostring(math.random(100, 99999999)) end Код local sPass = "" tAbc = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K", "L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", } function GetPass() math.randomseed(os.time()) sPass = tAbc[math.random(#tAbc)] -- 1-я буква пароля local iPass = math.random(4, 7) -- длина пароля = [(от 4 до 7) + 1] for i = 1, iPass do sPass = sPass..tAbc[math.random(#tAbc)] end return sPass end Тут в этой строке регулируется и создаётся произвольная длина пароля: Код local iPass = math.random(4, 7) Вместо 4 и 7 можешь писать другие разумные размеры длины пароля. Только нужно учитывать, что 1 символ уже создался в предыдущей строке.PS: Можно было обойтись без предварительной таблицы символов tAbc, но тогда код стал бы громоздче. UPD: Так, наверно, эту переменную - local sPass - надо объявить заранее, до использования в function GetPass(), иначе не уверен, что вытащится по return.. Поэтому в код внёс поправку небольшую. |
|
|
8.1.2012, 14:01
Сообщение
#70
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
Ameet, находишь в скрипте вот такой код: Код function GetPass() и вместо него копируешь отсюда этот: math.randomseed(os.time()) return tostring(math.random(100, 99999999)) end Код local sPass = "" tAbc = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K", "L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", } function GetPass() math.randomseed(os.time()) sPass = tAbc[math.random(#tAbc)] -- 1-я буква пароля local iPass = math.random(4, 7) -- длина пароля = [(от 4 до 7) + 1] for i = 1, iPass do sPass = sPass..tAbc[math.random(#tAbc)] end return sPass end Тут в этой строке регулируется и создаётся произвольная длина пароля: Код local iPass = math.random(4, 7) Вместо 4 и 7 можешь писать другие разумные размеры длины пароля. Только нужно учитывать, что 1 символ уже создался в предыдущей строке.PS: Можно было обойтись без предварительной таблицы символов tAbc, но тогда код стал бы громоздче. UPD: Так, наверно, эту переменную - local sPass - надо объявить заранее, до использования в function GetPass(), иначе не уверен, что вытащится по return.. Поэтому в код внёс поправку небольшую. большое спасибо, можешь подсказать ещё немного Код C:\dchub\power\scripts\regme_email.lua:124: bad argument #1 to 'format' (string expected, got nil) скрипт Скрипт Код local cmd = require"cmd" -- Библиотека команд local email = require"email" -- Библиотека электронный почты -- настройки e-mail local sFrom = "11111" -- Адрес отправителя local sServer = "11111" -- Адрес сервера local sUser = "111111" -- Имя пользователя local sPass = "1111111" -- Пароль local sHubAddress = "111111" -- Адрес вашего хаба -- local sSubject = "Registration: [HUBNAME]" -- Тема сообщения local iRegProfile = 5 -- Номер профиля для регистрации local sFile = debug.getinfo(1).source:match("^@?(.+[/\\]).-$").."baza/emails.dat" local sMsg = [[Здравствуйте! На хабе по адресу dchub://[HUB] появилась регистрационная запись, в которой был указал ваш электронный адрес (e-mail). Зарегистрирован был следующий ник: =================================== Ник пользователя (login): [NICK] Пароль: [PASS] =================================== Если вы не понимаете, о чем идет речь — просто проигнорируйте это сообщение! Если же именно вы решили зарегистрироваться на хабе по адресу dchub://[HUB], то вам следует войти на хаб и тем самым активировать вашу учетную запись. Подтверждение регистрации производится один раз. Активация произойдет автоматически. ]] -- профили, которым разрешено удаление аккаунта local tUnregAllow = { [0] = 1, [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1 } local tTimers, tNoActivate = {}, {} local tMailList, tNickList = {}, {} function OnStartup() sBot = SetMan.GetString(21) sSubject = sSubject:gsub("%[HUBNAME%]", SetMan.GetString(0)) email.SetValues(sFrom, sServer, sUser, sPass) cmd.Add("[Rr][Ee][Gg][Mm][Ee]", Regme, Protect) cmd.Add("[Uu][Nn][Rr][Ee][Gg]", Unreg, UnregProtect) if loadfile(sFile) then dofile(sFile) end end function Protect(tUser) if tUser.iProfile ~= -1 then return false end return true end function UnregProtect(tUser) if tUnregAllow[tUser.iProfile] and tUnregAllow[tUser.iProfile] == 1 then return true end return false end function GetMsg(sNick, sPasswd) local sStr = sMsg:gsub("%[HUB%]", sHubAddress) sStr = sStr:gsub("%[NICK%]", sNick) sStr = sStr:gsub("%[PASS%]", sPasswd) return sStr end local sPass = "" tAbc = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K", "L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", } function GetPass() math.randomseed(os.time()) sPass = tAbc[math.random(#tAbc)] -- 1-я буква пароля local iPass = math.random(5, 8) -- длина пароля = [(от 4 до 7) + 1] for i = 1, iPass do sPass = sPass..tAbc[math.random(#tAbc)] end return sPass end function Regme(tUser) local sEmail = cmd.msParams if tMailList[sEmail] then return nil, ("С введённым вами e-mail адресом уже зарегистрирован пользователь. Если письмо не пришло на ящик, для перерегистрации на этот e-mail нужно подождать %s минут и повторить регистрацию."):format(iDelay) end local sPasswd = GetPass() local res, err = email.SendMail(sEmail, sSubject, GetMsg(tUser.sNick, sPasswd)) if res then RegMan.AddReg(tUser.sNick, sPasswd, iRegProfile) Core.SendToOps("Зарегистрировался юзер с ником "..tUser.sNick) tMailList[sEmail] = tUser.sNick tNickList[tUser.sNick] = sEmail Save(tMailList, "tMailList", sFile) tNoActivate[tUser.sNick] = true Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: (e-mail). Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot, iDelay)) end return res, err end function Unreg(tUser) RegMan.DelReg(tUser.sNick) for k, v in pairs(tMailList) do if v == tUser.sNick then tMailList[k] = nil return true end end return true end function ChatArrival(tUser, sData) local r, e = cmd.Exec(sData:sub(#(tUser.sNick) + 4, -2), tUser) if not r and e then Core.SendToUser(tUser, ("<%s> "..e):format(sBot)) end if cmd.miCmdState == 3 then Core.SendToUser(tUser, ("<%s> Команда введена без префикса"):format(sBot)) end if cmd.miCmdState == 4 then Core.SendToUser(tUser, ("<%s> Вы уже зарегистрированы!"):format(sBot)) return true end if r or e then return true end end function RegConnected(tUser) if tNoActivate[tUser.sNick] then tNoActivate[tUser.sNick] = nil end Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Сменить пароль$<%[mynick]> !passwd %[line:Введите новый пароль]||".. "$UserCommand 1 3 Регистрация\\Удалить регистрацию$<%[mynick]> !unreg|") end OpConnected = RegConnected function UserConnected(tUser) Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Зарегистрироваться$<%[mynick]> !regme %[line:Введите Ваш e-mail]|") end function Save(tTable, sTableName, sFile) local h = io.open(sFile, "w") if h then Serialize(tTable, sTableName, h) h:flush() h:close() end end function Serialize(tTable, sTableName, hFile, sTag) sTag = sTag or '' hFile:write(sTag..sTableName.." = {\n" ) for k, v in pairs(tTable) do local sKey = ( type(k) == "string" ) and ( "[%q]" ):format(k) or ( "[%d]" ):format(k) if type(v)=="table" then Serialize(v, sKey, hFile, sTag..'\t') else local sValue = ( type(v) == "string" ) and ( "%q" ):format(v) or tostring(v) hFile:write(sTag..'\t'..sKey.." = "..sValue) end hFile:write",\n" end hFile:write(sTag..'}') end Буду очень благодарен! |
|
|
8.1.2012, 14:07
Сообщение
#71
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
|
|
|
8.1.2012, 14:18
Сообщение
#72
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
В приведенном скрипте на 124 строке нет функции format. Укажите где 124 строка в вашем файле. Сама функция Фенкция Код function Regme(tUser) local sEmail = cmd.msParams if tMailList[sEmail] then return nil, ("С введённым вами e-mail адресом уже зарегистрирован пользователь. Если письмо не пришло на ящик, для перерегистрации на этот e-mail нужно подождать %s минут и повторить регистрацию."):format(iDelay) end local sPasswd = GetPass() local res, err = email.SendMail(sEmail, sSubject, GetMsg(tUser.sNick, sPasswd)) if res then RegMan.AddReg(tUser.sNick, sPasswd, iRegProfile) Core.SendToOps("Зарегистрировался юзер с ником "..tUser.sNick) tMailList[sEmail] = tUser.sNick tNickList[tUser.sNick] = sEmail Save(tMailList, "tMailList", sFile) tNoActivate[tUser.sNick] = true Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: (e-mail). Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot, iDelay)) end return res, err end Строка Код return nil, ("С введённым вами e-mail адресом уже зарегистрирован пользователь. Если письмо не пришло на ящик, для перерегистрации на этот e-mail нужно подождать %s минут и повторить регистрацию."):format(iDelay)
|
|
|
8.1.2012, 14:29
Сообщение
#73
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Вижу в коде переменную iDelay, которая не инициализирована. Первый раз используется в указанной строке, а второй раз передается в
Код Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: (e-mail). Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot, iDelay)) Но в строку формата не подставляется. Более того, судя по названию переменной это целое число. А выводится как строка. Дальше. Судя по сообщению скрипта, должен быть таймаут повторной регистрации. Его нет. Во всяком случае в коде я его не вижу. Как экспресс фикс, можно в начале скрипта написать: Код iDelay = "5" Но это неправильный подход. UPD: Резюмируя, могу сказать, что скрипт требует переделки, если предлагается реализовывать заявленный функционал. Если же не переделывать, то достаточно изменить так: Код function Regme(tUser)
local sEmail = cmd.msParams if tMailList[sEmail] then return nil, ("С введённым вами e-mail адресом уже зарегистрирован пользователь. Если письмо не пришло на ящик, для перерегистрации обратитесь к оператору.") end local sPasswd = GetPass() local res, err = email.SendMail(sEmail, sSubject, GetMsg(tUser.sNick, sPasswd)) if res then RegMan.AddReg(tUser.sNick, sPasswd, iRegProfile) Core.SendToOps("Зарегистрировался юзер с ником "..tUser.sNick) tMailList[sEmail] = tUser.sNick tNickList[tUser.sNick] = sEmail Save(tMailList, "tMailList", sFile) tNoActivate[tUser.sNick] = true Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: (e-mail). Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot)) end return res, err end |
|
|
13.1.2012, 0:59
Сообщение
#74
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
Ребята, помогите реализовать функцию восстановления пароля.
|
|
|
13.1.2012, 8:25
Сообщение
#75
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Вот функция. Вызывать по вкусу. Особо не тестил, но должно работать:
Код function Restore(tUser)
local sEmail = cmd.msParams if not tMailList[sEmail] then return nil, ("С введённым вами e-mail адресом ни зарегистрирован ни один пользователь. Если вы уверены, что e-mail указан без ошибок, обратитесь к оператору.") end if not RegMan.GetReg(tMailList[sEmail]) then return nil, ("Аккаунт пользователя, привязанный к данному e-mail был удален, обратитесь к оператору.") end local sPasswd = GetPass() local res, err = email.SendMail(sEmail, sSubject, GetMsg(tMailList[sEmail], sPasswd)) if res then RegMan.ChangeReg(tMailList[sEmail], sPasswd, RegMan.GetReg(tMailList[sEmail]).iProfile) Core.SendToOps("Выполнено восстановление пароля для ника "..tMailList[sEmail].." на e-mail "..sEmail) Core.SendToUser(tUser, ("<%s> Пароль отправлен на адрес: %s. Письмо с вашим паролем было успешно отправлено (Message with your password was sent successfully)"):format(sBot, sEmail)) end return res, err end |
|
|
27.1.2012, 15:27
Сообщение
#76
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
Видел на озерках фишку что невозможно зарегистрироваться если нету шары 10 гб, как можно реализовать такую фишку?
|
|
|
27.1.2012, 16:25
Сообщение
#77
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
Ameet, перед отправкой команды сделай проверку на шару.
Примерно так (может и не правильно, но вроде работает ) РаскрИвушка Код function ChatArrival(tUser, sData) Core.GetUserAllData(tUser) -- начало if tUser.iShareSize <= iMinShare then Core.SendToUser(tUser, "У вас мало открыто шары, откройте "..iMinShare.."") return true -- конец проверки на шару end local r, e = cmd.Exec(sData:sub(#(tUser.sNick) + 4, -2), tUser) if not r and e then Core.SendToUser(tUser, ("<%s> "..e):format(sBot)) end if cmd.miCmdState == 3 then Core.SendToUser(tUser, ("<%s> Команда введена без префикса"):format(sBot)) end if cmd.miCmdState == 4 then Core.SendToUser(tUser, ("<%s> Вы уже зарегистрированы!"):format(sBot)) return true end if r or e then return true end end и в самом верху где настройки Код local iMinShare = 536870912000 -- 500 Gb (1*1024*1024*1024) 1073741824 = 1 Гб
|
|
|
27.1.2012, 17:24
Сообщение
#78
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
Ameet, перед отправкой команды сделай проверку на шару. Примерно так (может и не правильно, но вроде работает ) РаскрИвушка Код function ChatArrival(tUser, sData) Core.GetUserAllData(tUser) -- начало if tUser.iShareSize <= iMinShare then Core.SendToUser(tUser, "У вас мало открыто шары, откройте "..iMinShare.."") return true -- конец проверки на шару end local r, e = cmd.Exec(sData:sub(#(tUser.sNick) + 4, -2), tUser) if not r and e then Core.SendToUser(tUser, ("<%s> "..e):format(sBot)) end if cmd.miCmdState == 3 then Core.SendToUser(tUser, ("<%s> Команда введена без префикса"):format(sBot)) end if cmd.miCmdState == 4 then Core.SendToUser(tUser, ("<%s> Вы уже зарегистрированы!"):format(sBot)) return true end if r or e then return true end end и в самом верху где настройки Код local iMinShare = 536870912000 -- 500 Gb (1*1024*1024*1024) 1073741824 = 1 Гб такой вопрос а имеет значение куда вставить функцию в конец или начала списка функций? |
|
|
27.1.2012, 17:36
Сообщение
#79
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Только вместо:
Код Core.GetUserAllData(tUser) Лучше писать: Код Core.GetUserData(tUser, 16)
|
|
|
27.1.2012, 17:41
Сообщение
#80
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
Ameet, нет, всё равно
P.S. Если хочешь чтобы шару в нормальном виде показывало, а не в байтах, добавь Код FormatSize = function(int) local i,u,x = tonumber(int) or 0,{"","K","M","G","T","P"},1 while i > 1024 do i,x = i/1024,x+1 end return string.format("%.2f %sB.",i,u[x]) end и Код Core.SendToUser(tUser, "У вас мало открыто шары, откройте "..FormatSize(iMinShare).."") будет показывать место Цитата У вас мало открыто шары, откройте 536870912000 вот так Цитата У вас мало открыто шары, откройте 500.00 GB.
|
|
|
27.1.2012, 17:58
Сообщение
#81
|
|
Активный участник Группа: Пользователи Сообщений: 73 Регистрация: 5.1.2009 Из: Украина, г. Сумы Пользователь №: 1 684 Спасибо сказали: 0 раз |
Ameet, нет, всё равно P.S. Если хочешь чтобы шару в нормальном виде показывало, а не в байтах, добавь Код FormatSize = function(int) local i,u,x = tonumber(int) or 0,{"","K","M","G","T","P"},1 while i > 1024 do i,x = i/1024,x+1 end return string.format("%.2f %sB.",i,u[x]) end и Код Core.SendToUser(tUser, "У вас мало открыто шары, откройте "..FormatSize(iMinShare).."") будет показывать место вот так как бы сделать что бы в сообщении что вам нужно шарнуть 10гб писало не метрами а гигабайтами? |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
От: RegmeEmail От темы с ID: 2794 |
0 | Drakula | 3 707 | 21.11.2014, 14:33 Посл. сообщение: Drakula | |
От: RegmeEmail От темы с ID: 2794 |
1 | Артём | 5 257 | 29.3.2010, 1:59 Посл. сообщение: (Steep)_(Boss) |
|
Сейчас: 27.11.2024, 2:56 |