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

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

MyDC.ru _ Сетевые скрипты [PtokaX] _ RegmeEmail

Автор: Setuper 15.12.2009, 14:36

Название скрипта: 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

Автор: Хабыч 15.12.2009, 15:12

эм... а меню нет у скрипта или я что то не так сделал? baffle.gif

Автор: Setuper 15.12.2009, 15:22

Добавил менюшку регистрации для незарегистрированных пользователей.
Скрипт перезалил.


Так как это бета версия, поэтому функциональность урезана. Только одна функция регистрации через e-mail.

Автор: Хабыч 15.12.2009, 15:32

Спасибо отлично работает. Вот хорошо было бы если была функция смены пароля. still_dreaming.gif

Автор: Setuper 15.12.2009, 15:49

В принципе для смены пароля в птохе есть стандартная команда: !passwd <новый пароль>

Автор: Хабыч 15.12.2009, 15:56

Попробовал сам добавить смену пароля

Код
function UserConnected(tUser)
  Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Зарегистрироваться$<%[mynick]> !regme %[line:Введите Ваш e-mail]|")
end

function UserConnected(tUser)
  Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Сменить пароль$<%[mynick]> !passwd %[line:Введите новый пароль]|")
end


Прошу сильно не ругать, что не так, как надо сделать? beat_brick.gif

Автор: Setuper 15.12.2009, 16:21

Код
function RegConnected(tUser)
  if tNoActivate[tUser.sNick] then
    tNoActivate[tUser.sNick] = nil
  end
  Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Сменить пароль$<%[mynick]> !passwd %[line:Введите новый пароль]&#124;")
end
OpConnected = RegConnected

function UserConnected(tUser)
  Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Зарегистрироваться$<%[mynick]> !regme %[line:Введите Ваш e-mail]&#124;")
end

Автор: Хабыч 15.12.2009, 17:56

Setuper

Последняя просьба, покажи пожалуйста как реализовать в этом скрипте функцию "удалить акаунт"?
И ничего если команду "!regme" заменить например на "!регистрация"? big_smile.gif
Это только сам скрипт капать или cmd тоже?

Автор: luxemat 15.12.2009, 18:11

парни почему то у меня скрипт не включается regme_email.lua ошибку показывает что я не так делаю

Автор: Хабыч 15.12.2009, 18:15

Цитата(luxemat @ 15.12.2009, 19:11) *
парни почему то у меня скрипт не включается regme_email.lua ошибку показывает что я не так делаю

полож email.lua и cmd.lua в папку libs

Автор: luxemat 15.12.2009, 18:19

спс большое

ещё вопрос что опять не так у меня
> Не удалось отослать письмо на адрес: email@email.ru Причина: 535 5.7.8 Error: authentication failed: authentication failure

Автор: Хабыч 15.12.2009, 18:23

настрой мыло, пропиши свой почтовый ящик, smtp сервер

пример
local sFrom = "coolhubs@mail.ru" -- Адрес отправителя
local sServer = "smtp.mail.ru" -- Адрес сервера
local sUser = "coolhubs" -- Имя пользователя
local sPass = "*******" -- Пароль
local sHubAddress = "coolhub.sytes.net" -- Адрес вашего хаба

Автор: luxemat 15.12.2009, 18:31

вот что я прописал надеюсь правельно


-- настройки e-mail
local sFrom = "kirser@bk.ru" -- Адрес отправителя
local sServer = "smtp.mail.ru" -- Адрес сервера
local sUser = "LuxeMat" -- Имя пользователя
local sPass = "*****" -- Пароль
local sHubAddress = "94.243.55.201:450" -- Адрес вашего хаба

и всеровно выдаёт ошибку

Не удалось отослать письмо на адрес: kirser@bk.ru Причина: 535 Incorrect authentication data

Автор: Хабыч 15.12.2009, 18:34

а про это http://mydc.ru/topic43.html не забыл? ты прочитай внимательно big_smile.gif

Автор: luxemat 15.12.2009, 18:37

да читал всё

просто другим пользователям вот что пишет
<Chukgert> PtokaX> Введён неправильный формат e-mail адреса.

наверное я тугадум

Автор: Хабыч 15.12.2009, 18:38

ну библиотеку полож тоже в папку libs и будет тебе счастье big_smile.gif у меня всё работает

Автор: luxemat 15.12.2009, 18:41

beat_plaster.gif

Автор: Setuper 15.12.2009, 18:46

luxemat:

local sFrom = "kirser@bk.ru" -- Адрес отправителя
local sServer = "smtp.bk.ru" -- Адрес сервера
local sUser = "kirser" -- Имя пользователя
local sPass = "*****" -- Пароль
local sHubAddress = "94.243.55.201:450" -- Адрес вашего хаба

Хабыч:
Для того, чтобы добавить команду, нужно в функцию OnStartup() добавить ещё одну функцию cmd.Add, вот так:

Код
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("[Рр][Ее][Гг][Ии][Сс][Тт][Рр][Аа][Цц][Ии][Яя]", Regme, Protect)
  if loadfile(sFile) then
    dofile(sFile)
  end
end


После этого регистрироваться можно будет как по команде !regme, так и по команде !регистрация
Собственно для этого и создавался модуль cmd.

Если не нужен верхний регистр, то можно просто добавить cmd.Add("регистрация", Regme, Protect), тогда регистрация будет срабатывать по команде !регистрация, но не будет срабатывать, например, по команде !РЕГИСРАЦИЯ или !рЕгИсТрАцИя
Короче говоря можно добавлять команды как регулярные выражения.

Автор: Хабыч 15.12.2009, 20:11

Во голова, выражаю огромное спасибо Setuper. big_smile.gif
А можете показать пример реализации функции удалить акаунт?


Автор: Setuper 15.12.2009, 23:23

Сделал.

Пофиксил регулярное выражение для определения формата e-mail адреса (раньше не пропускало e-mail со знаком подчёркивания).
Для фикса качаем обновлённый файл email.lua

Автор: Хабыч 16.12.2009, 0:30

Цитата(Setuper @ 16.12.2009, 0:23) *
Для фикса качаем обновлённый файл email.lua

скачал. письмо на мыло приходит но скрипт не регает

Автор: Goblin 16.12.2009, 13:24

Можете добавить блокировку регистрации? т.е. черный список mail и IP-адресов.

Автор: trojan 26.12.2009, 21:02

1

Автор: Артём 26.12.2009, 21:11

Цитата(trojan @ 26.12.2009, 20:02) *
как за 10 мин успеть? feel_good.gif

Код
local iDelay = 10 -- Число минут для аткивации регистрации

а самому выставить нужные минуты не судьба? big_smile.gif

Автор: Milena 27.1.2010, 19:29

Письмо приходит и в нём крякозябы из-за того, что почтовый клиент обманывается неверным указанием кодировки в заголовке письма.

В хедере 'content-type: text/plain; charset="iso-8859-1"', а фактически cp1251


Автор: Mc-JuNiOr 19.2.2010, 21:02

Не удалось отослать письмо на адрес: dc-urbania@yandex.ru Причина: timeout

это я напортачил или просто временно недоступно ???

помогите мне настроить big_smile.gif) плизз

Автор: )_(Steep_)_(_Boss)_( 29.3.2010, 0:12

Можно Зделать что бы Скрипт Сохранял ники тех кто был зарегистрирован именно через Емел+ Сохранял Это всё в Текстовике Лежащем в птоке+ к самом текставике Можно ли зделать так что бы указывался Ник а через пробел Его емелл через каторый он зарегался,,,
Подскажите реально ето?

Автор: Saymon 29.3.2010, 0:14

только зачем?

Автор: Артём 29.3.2010, 0:16

Цитата()_(Steep_)_(_Boss)_( @ 28.3.2010, 23:12) *
... Ник а через пробел Его емелл через каторый он зарегался...

а ещё через пробел пароли от мыла...

Автор: alex82 29.3.2010, 0:22

Цитата()_(Steep_)_(_Boss)_( @ 29.3.2010, 0:12) *
Подскажите реально ето?
Реально.

Автор: )_(Steep_)_(_Boss)_( 29.3.2010, 0:30

Цитата(Артём @ 29.3.2010, 2:16) *
а ещё через пробел пароли от мыла...

нз зачем админу такое)) он и в регистрации глянуть может)

Автор: (Steep)_(Boss) 30.3.2010, 3:30

Цитата(Milena @ 27.1.2010, 21:29) *
Письмо приходит и в нём крякозябы из-за того, что почтовый клиент обманывается неверным указанием кодировки в заголовке письма.

В хедере 'content-type: text/plain; charset="iso-8859-1"', а фактически cp1251

у меня такая же проблема, Надо Это Сетаперу Увидеть



УВ. Сетапер Глянь Картинку

 

Автор: Saymon 30.3.2010, 6:57

а что ему тут видеть? Смени кодировку в клиенте, а лучше сам клиент.

Автор: (Steep)_(Boss) 30.3.2010, 7:54

Цитата(Saymon @ 30.3.2010, 8:57) *
а что ему тут видеть? Смени кодировку в клиенте, а лучше сам клиент.

у мя все читает нормально, Письма+даже с етого форума и т.д,,,, не первый человек жалуется что такая проблема

Автор: Saymon 30.3.2010, 11:55

У меня было похожее от другова скрипта тоже рега через мыло так программа The Bat вообще белеберду отображала.
Разработчик сказал что нужно всего лиш поменять кодировку письма в почтовом клиенте.
После регистрации сразу юзерам сообщалось типа 'при отображении белиберды в письме - меняйте кодировку'
Потом через время юзеры начали почему то боятся за свои почтовые ящики и флудить мою личку вопросами - зачем мыло и тп....
Сделал стандартный вариант регистрации на хабе так заметил что регистрироватся стали раза в 2 больше. big_smile.gif

Автор: (Steep)_(Boss) 30.3.2010, 11:58

Цитата(Saymon @ 30.3.2010, 13:55) *
У меня было похожее от другова скрипта тоже рега через мыло так программа The Bat вообще белеберду отображала.
Разработчик сказал что нужно всего лиш поменять кодировку письма в почтовом клиенте.
После регистрации сразу юзерам сообщалось типа 'при отображении белиберды в письме - меняйте кодировку'
Потом через время юзеры начали почему то боятся за свои почтовые ящики и флудить мою личку вопросами - зачем мыло и тп....
Сделал стандартный вариант регистрации на хабе так заметил что регистрироватся стали раза в 2 больше. big_smile.gif

я та не спорю но еси так посудить почему другие письма без проблем глядятся?

Автор: Saymon 30.3.2010, 12:12

Ну вроде да.

Автор: (Steep)_(Boss) 30.3.2010, 12:15

Цитата(Saymon @ 30.3.2010, 14:12) *
Ну вроде да.

Меня Этот Вопрос тоже мучиит, но не знаю Может сетапер Опишится и подскажет как быть) что будет то будет)

Автор: Setuper 30.3.2010, 15:28

Изменение кодировки:

открываем папку libs
открываем файл email.lua

ищем в этом файле следующие строчки:

Код
  local tMessage = {
    headers = {
      to = sTo,
      from = tVal.sFrom,
      subject = sSubject,
    },
    body = sMsg
  }

изменяем их на:
Код
  local tMessage = {
    headers = {
      to = sTo,
      from = tVal.sFrom,
      subject = sSubject,
      ['content-type'] = 'text/plain; charset="cp1251"'
    },
    body = sMsg
  }


Другими словами, в таблицу headers нужно дописать поле ['content-type'] = 'text/plain; charset="cp1251"'

Автор: (Steep)_(Boss) 30.3.2010, 15:55

Это Дабовление Кодировки или полное Изменение?

Автор: Saymon 30.3.2010, 15:59

Цитата((Steep)_(Boss) @ 30.3.2010, 16:55) *
Это Дабовление Кодировки или полное Изменение?


Цитата
Изменение кодировки:


Автор: (Steep)_(Boss) 30.3.2010, 17:42

а те кто будет проверять почту,, после етого заменения кодировки,, у них что то меняется или остаётся все как было?

Автор: Setuper 30.3.2010, 19:03

Что это значит? Ты русский или не? Можешь нормально объяснить кто, когда и что будет проверять?
Лучше не задавать лишних вопросов, а попробовать.

Автор: (Steep)_(Boss) 30.3.2010, 20:55

Вмысле что ето значит, ты если не понял таки скажи а не надо тут влеплять руский не руский,, я Имею введу у тех людей при регистрации и при Проверки Письма у нихбудет такая же Шляпа как у мя на той картинке?,,Просто вот попробовал Через Гуглхром,, через него Квабры кодабры,, через Оперу и Екслоер все Нормальн,+ спасибо что зделал, с программами проблем нету, отображает на ура!! still_dreaming.gif

Автор: stanok 25.8.2010, 4:54

Не получается нечего требует файлы а их нету

Цитата
no file '***\HUB\cmd.dll'
no file '***\HUB\libs\cmd.dll'
no file '***\HUB\scripts\libs\cmd.dll'

Автор: Nickolya 25.8.2010, 5:15

Всё лежит в 1 посту, помечено специально даже красным, изучай информацию внимательней.

Автор: pol_91 31.8.2010, 2:59

Не удалось отослать письмо на адрес: pol_91@mail.ru Причина: timeout
что это значит?

Автор: mariner 31.8.2010, 11:16

ну как бы за нужное время не было отклика от сервера.
Такое бывает, если не вбить настройки

Код
local sFrom = "email@email.ru" -- Адрес отправителя
local sServer = "smtp.yandex.ru" -- Адрес сервера
local sUser = "user" -- Имя пользователя
local sPass = "pass" -- Пароль

или сервер использует SSL

Автор: -=Zion=- 11.9.2010, 19:46

Как сделать что бы он операторам сообщение посылал о зарегистрировавшемся юзере?...

Автор: Nickolya 12.9.2010, 19:58

Код
Core.SendToUser(tUser, ("<%s> Вы зарегистрированы. Пароль отправлен вам на указанную вами почту. Вам необходимо в течение %s минут перезайти на хаб, в противном случае активации аккаунта не будет, и аккаунт будет удалён с хаба."):format(sBot, iDelay))
После этого кода добавь следующее:
Код
Core.SendToOps("<%s> Зарегистрировался пользователь '%s'."):format(sBot, tUser.sNick))

Автор: -=Zion=- 13.9.2010, 11:12

Ошибку выдаёт... и не запускается...

Код
C:\Program Files\PtokaX DC Hub\scripts\regme_email.lua:126: unexpected symbol near ')'

Автор: Invisible 13.9.2010, 12:28

пробуй так

Код
Core.SendToOps(("<%s> Зарегистрировался пользователь '%s'."):format(sBot, tUser.sNick))

Автор: Nickolya 13.9.2010, 13:19

Точно, спасибо всем за фиксы big_smile.gif

Автор: -=Zion=- 13.9.2010, 15:27

Спасибо огромное... работает big_smile.gif
Извеняюсь за навязчивость, а можно что бы вот так было:

CODE

Зарегистрировался новый юзер
вот детали регистрации:
======================
Ник: Яна
Пароль: xxx
Шара: 97.66 GB.
IP: 93.185.82.248
Режим работы: Актив
Открыто слотов: 10

Автор: Nickolya 13.9.2010, 15:52

Код
    Core.SendToOps(([[<%s> Зарегистрировался новый юзер, вот детали регистрации:

    Ник: %s
    Пароль: %s
    Шара: %s
    IP: %s
    Режим работы: %s
    Открыто слотов: %s
    
]]):format(sBot, tUser.sNick, sPasswd, GetNormalShare(Core.GetUserValue(tUser, 16) or 0), tUser.sIP, Core.GetUserValue(tUser, 10) and "Актив" or "Пассив", Core.GetUserValue(tUser, 21) or 0))


Функция GetNormalShare, ее надо дописать в самый конец скрипта:
Код
function GetNormalShare(s)
  s = tonumber(s) or 0
  if s >= 1125899906842624 then return (math.floor(1000 * s / 1125899906842624) / 1000).." ПБ"
  elseif s >= 1099511627776 then return (math.floor(1000 * s / 1099511627776) / 1000).." TБ"
  elseif s >= 1073741824 then return (math.floor(1000 * s / 1073741824) / 1000).." ГБ"
  elseif s >= 1048576 then return (math.floor(1000 * s / 1048576) / 1000).." МБ"
  elseif s >= 1024 then return (math.floor(1000 * s / 1024) / 1000).." КБ"
  else return s.." Б" end
end


Писал без проверки, так что за код не ручаюсь.

Автор: -=Zion=- 13.9.2010, 18:12

Спасибо ещё раз огромное... Всё работает как надо... big_smile.gif

Автор: Goblin 16.9.2010, 23:03

Скрипт очень хорош но не достаточно,
я думаю его нужно дополнить.
Вот моя идея по этому скрипту

что нужно добавить:
Восстановление пароля на email
База паролей+email+nick p.s. я так и не понял emails.dat как работает т.е. после рестарта скрипта база очищается.
Блокировка регистрации на уже зарегистрированный email p.s. вроде эта функция уже присутствует но она не работает, можно 100раз пароль отправить на один email.
Чёрный список email ( думаю очень будет полезная т.к. можно будет забанить по email, его дольше менять чем ип)
И отсылку администраторам что зарегистрировался пользователь

Код
Ник:
Пароль:
email:
IP:


Думаю бессмысленна эта функция т.к. есть отдельный скрипт который отвечает за чистку регистрации. Выкладываю уже без этой функции
Код
у пользователя есть 10 минут для того, чтобы зайти в почту, посмотреть там пароль и зайти на хаб. В противном случае авторизация не произойдёт, и спустя 10 минут аккаунт удалится с хаба.


Надеюсь что вы дополните скрипт.

 RegmeEmail.lua ( 5.07 килобайт ) : 15
 

Автор: STIVAN 28.12.2010, 13:00

Все сделал по инстуркции [12:59:51] <Hub> Не удалось отослать письмо на адрес: @yandex.ru Причина: 535 5.7.8 Error: authentication failed: Invalid login or password

Автор: Setuper 28.12.2010, 14:49

Ну написано же, что неправильный логин или пароль. Введи правильный логин и пароль своего ящика и всё получится

Код
local sFrom = "email@email.ru" -- Адрес отправителя
local sServer = "smtp.yandex.ru" -- Адрес сервера
local sUser = "user" -- Имя пользователя
local sPass = "pass" -- Пароль

Автор: Dani_Filth 27.5.2011, 11:52

Люди подскажите пожалуйста... Вот я зарегался на этим скриптом пришло сообщение на мыло.. Таким образом


Çäðàâñòâóéòå!


Íà õàáå ïî àäðåñó dchub://dchub://100.100.0.2
ïîÿâèëàñü ðåãèñòðàöèîííàÿ çàïèñü,
â êîòîðîé áûë óêàçàë âàø ýëåêòðîííûé àäðåñ (e-mail).


Çàðåãèñòðèðîâàí áûë ñëåäóþùèé íèê:

===================================

Íèê ïîëüçîâàòåëÿ (login): 123
Ïàðîëü: 87646119

===================================

Åñëè âû íå ïîíèìàåòå, î ÷åì èäåò ðå÷ü — ïðîñòî ïðîèãíîðèðóéòå ýòî ñîîáùåíèå!

Åñëè æå èìåííî âû ðåøèëè çàðåãèñòðèðîâàòüñÿ íà õàáå ïî àäðåñó dchub://dchub://100.100.0.2,
òî âàì ñëåäóåò âîéòè íà õàá â òå÷åíèå 10 ìèíóò è òåì ñàìûì àêòèâèðîâàòü âàøó ó÷åòíóþ çàïèñü.

Ïîäòâåðæäåíèå ðåãèñòðàöèè ïðîèçâîäèòñÿ îäèí ðàç.
Àêòèâàöèÿ ïðîèçîéäåò àâòîìàòè÷åñêè.



Что делать ? Кто может поправить скрипт.

Автор: Артём 27.5.2011, 12:18

Dani_Filth, скрипт не причём, меняй кодировку на мыле.

Автор: Dani_Filth 27.5.2011, 17:03

Артём, А где именно ?

Автор: Артём 27.5.2011, 19:15

Dani_Filth, я не знаю где у тебя зарегистрирован аккаунт E-mail, и подсказать не могу.

Автор: Setuper 27.5.2011, 19:18

  1. Открываем файл email.lua
  2. Ищем в этом файле следующие строчки:

    Код
    local tMessage = {
      headers = {
        to = sTo,
        from = tVal.sFrom,
        subject = sSubject,
      },
      body = sMsg
    }

  3. Изменяем их на:

    Код
    local tMessage = {
      headers = {
        to = sTo,
        from = tVal.sFrom,
        subject = sSubject,
        ['content-type'] = 'text/plain; charset="cp1251"'
      },
      body = sMsg
    }

Автор: Dani_Filth 27.5.2011, 19:46

Хмм.. Всё равно...Setuper, Тоже самое...


Артём, Ну я зареган на @mail.ru

Автор: Артём 27.5.2011, 19:56



Автор: Ameet 5.1.2012, 18:43

Помогите немного подправить скрипт. Я хочу чтобы он генерировал не одни цифры для пароля а цифры+буквы. За ране спасибо!

Автор: Ksan 5.1.2012, 18:57

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.. Поэтому в код внёс поправку небольшую.

Автор: Ameet 8.1.2012, 14:01

Цитата(Ksan @ 5.1.2012, 18:57) *
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


Буду очень благодарен!

Автор: Enyby 8.1.2012, 14:07

Цитата(Ameet @ 8.1.2012, 13:01) *
Код
C:\dchub\power\scripts\regme_email.lua:124: bad argument #1 to 'format' (string expected, got nil)

В приведенном скрипте на 124 строке нет функции format. Укажите где 124 строка в вашем файле.

Автор: Ameet 8.1.2012, 14:18

Цитата(Enyby @ 8.1.2012, 14:07) *
В приведенном скрипте на 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)

Автор: Enyby 8.1.2012, 14:29

Вижу в коде переменную 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

Автор: Ameet 13.1.2012, 0:59

Ребята, помогите реализовать функцию восстановления пароля.

Автор: Enyby 13.1.2012, 8:25

Вот функция. Вызывать по вкусу. Особо не тестил, но должно работать:

Код
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

Автор: Ameet 27.1.2012, 15:27

Видел на озерках фишку что невозможно зарегистрироваться если нету шары 10 гб, как можно реализовать такую фишку?

Автор: Артём 27.1.2012, 16:25

Ameet, перед отправкой команды сделай проверку на шару.
Примерно так (может и не правильно, но вроде работает big_smile1.gif )

РаскрИвушка
Код
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 Гб

Автор: Ameet 27.1.2012, 17:24

Цитата(Артём @ 27.1.2012, 16:25) *
Ameet, перед отправкой команды сделай проверку на шару.
Примерно так (может и не правильно, но вроде работает big_smile1.gif )
РаскрИвушка
Код
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 Гб

такой вопрос а имеет значение куда вставить функцию в конец или начала списка функций?

Автор: Enyby 27.1.2012, 17:36

Только вместо:

Код
Core.GetUserAllData(tUser)

Лучше писать:
Код
Core.GetUserData(tUser, 16)

Автор: Артём 27.1.2012, 17:41

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.

Автор: Ameet 27.1.2012, 17:58

Цитата(Артём @ 27.1.2012, 17:41) *
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гб писало не метрами а гигабайтами?

Автор: Enyby 27.1.2012, 18:01

А что там у тебя пишет?

Автор: Артём 27.1.2012, 18:04

Ameet, обнови страничку и посмотри мой пост выше, у меня гигабайтами пишет. Значит ты в метрах указал ограничение.
10 Гб = 10737418240 Б

Автор: Ameet 27.1.2012, 18:17

Цитата(Артём @ 27.1.2012, 18:04) *
Ameet, обнови страничку и посмотри мо пост выше, у меня гигабайтами пишет. Значит ты в метрах указал ограничение.
10 Гб = 10737418240 Б

я то думаю в чем проблема, точно в метрах!
Спасибо!

Автор: Артём 27.1.2012, 18:22

Ameet, Кнопочка есть... bad_smile.gif

Автор: Ameet 27.1.2012, 18:23

Цитата(Ameet @ 27.1.2012, 18:17) *
я то думаю в чем проблема, точно в метрах!
Спасибо!

блин,
Код
[17:22:14] *У вас мало открыто шары, откройте 10737418240

Автор: a_l_e_x_ 29.5.2012, 1:43

Ребят, у меня вот это пишет - Не удалось отослать письмо на адрес: 12345@list.ru Причина: 501 Syntactically invalid EHLO argument

local sFrom = "12345@list.ru" -- Адрес отправителя
local sServer = "smtp.mail.ru" -- Адрес сервера
local sUser = "12345@list.ru" -- Имя пользователя
local sPass = "12345" -- Пароль
local sHubAddress = "192.168.0.1" -- Адрес вашего хаба

Я проверял, не получаеться ничего!

Автор: Saymon21 29.5.2012, 10:16

Если адрес smtp сервера прописать smtp.list.ru ?

Автор: a_l_e_x_ 29.5.2012, 15:12

Всё равно так пишет, незнаю в чём ошибка

Автор: mariner 29.5.2012, 19:00

в поле "имя вашего хаба" впиши свой домен.

Автор: Sergey613 10.10.2012, 15:36

Синтаксис C:\0.4.2.0b401-Lua5.2.1\libs\cmd.lua:6: attempt to call global 'module' (a nil value)
6 строка: module"cmd"

Автор: Артём 10.10.2012, 15:43

Sergey613, прочти ещё раз первый пост, а именно красные буковки bad_smile.gif !!!

Автор: Sergey613 10.10.2012, 16:00

Цитата(Артём @ 10.10.2012, 16:43) *
Sergey613, прочти ещё раз первый пост, а именно красные буковки bad_smile.gif !!!

Какие из них?
Эти:
ВНИМАНИЕ! Для работы скрипта необходимы модули: cmd и email, а также необходима библиотека сокетов: http://mydc.ru/topic43.html
Модули и библиотеку сокетов следует поместить в папку libs.
Или эти:
local sServer = "smtp.bk.ru" -- Адрес сервера
local sUser = "kirser" -- Имя пользователя

Если про папку libs, то она давно создана и библиотеки там лежат и файлы: cmd.lua и email.lua туда же упали.
Если про адрес сервера и имя пользователя, то я их вбил свои!

Автор: Alexey 10.10.2012, 16:19

Ну всё правильно тебе пишет, ведь в Lua 5.2

Цитата
Function module is deprecated. It is easy to set up a module with regular Lua code. Modules are not expected to set global variables.

Либо ставь птоку с луа 5.1, либо адаптируй модули сам.

Автор: Sergey613 10.10.2012, 16:30

Цитата(Alexey @ 10.10.2012, 17:19) *
Ну всё правильно тебе пишет, ведь в Lua 5.2
Либо ставь птоку с луа 5.1, либо адаптируй модули сам.

Понятно. Спасибо. Знать бы как :(

Автор: Артём 10.10.2012, 16:41

Sergey613, ты не знаешь как поставить птоку с луа 5.1 ? shocked.gif

Автор: Sergey613 10.10.2012, 17:37

Да нет, не в том проблема. big_smile.gif)))
Вообщем если вкратце, то всё дело в памяти big_smile.gif))
DD3 дешёвая зараза, как не прикупить, купил, а куда её 8 гигов? под 32 битные она не смотрится (видится) а под 64 пришлось винду ставить, ну и пошло, одно за другим. Тут и птоха 64 бита, ну и библиотеки соответсвенно под неё, вот и результат . big_smile.gif))

Автор: -=Zion=- 7.3.2013, 12:41

Я дико извиняюсь за наглость :-)
Но, возможно ли к этому скрипту как-нибудь прикрутить MySQL?
А то слишком часто выключают свет дома, и зареганые юзеры не сохраняются.
Бесперебойник имеется, но его хватает буквально на полчаса, а свет, бывает, вырубают на целый день.
Или может посоветуете, как сделать так, чтобы зареганые юзеры "на лету" сохранялись, а не висели в памяти.

Автор: Артём 7.3.2013, 13:47

shocked.gif в какой памяти они висят, а разве не должны они сразу записываться в RegisteredUsers.XML ?

Автор: -=Zion=- 7.3.2013, 14:35

Цитата(Артём @ 7.3.2013, 18:47) *
shocked.gif в какой памяти они висят, а разве не должны они сразу записываться в RegisteredUsers.XML ?

В том то и дело, что они туда записываются только при корректном выключении/перезапуске хаба, а до этих действий их там нет.

PS. - OS Ubuntu

Автор: Alexey 7.3.2013, 14:54

Добавь строку

Код
  RegMan.Save()

перед строкой 149 и после строки 131.

Автор: -=Zion=- 7.3.2013, 15:58

Цитата(Alexey @ 7.3.2013, 19:54) *
Добавь строку
Код
  RegMan.Save()

перед строкой 149 и после строки 131.

В какое именно место?
Код
128.    Зарегистрировался новый юзер
129.    вот детали регистрации:
130.    ======================
131.    Ник:     %s
132.    Шара:     %s
133.    IP:     %s
134.    Режим работы: %s
135.    Открыто слотов: %s
136.    
137.    ]]):format(sBot, tUser.sNick, GetNormalShare(Core.GetUserValue(tUser, 16) or 0), tUser.sIP, Core.GetUserValue(tUser, 10) and "Актив" or "Пассив", Core.GetUserValue(tUser, 21) or 0))
138.    end
139.    return res, err
140.    end
141.    
142.    function Unreg(tUser)
143.    RegMan.DelReg(tUser.sNick)
144.    for k, v in pairs(tMailList) do
145.    if v == tUser.sNick then
146.    tMailList[k] = nil
147.    return true
148.    end
149.    end
150.    return true
151.    end

Автор: Alexey 7.3.2013, 16:26

Номера строк я давал ориентируясь на версию из стартового поста темы. Пользователи модифицированных версий должны самостоятельно сделать корректировки с учётом внесённых ими модификаций.

Указанную строку надо добавить после первого вызова RegMan.DelReg и перед TmrMan.RemoveTimer.

Автор: -=Zion=- 7.3.2013, 16:49

Цитата(Alexey @ 7.3.2013, 21:26) *
Номера строк я давал ориентируясь на версию из стартового поста темы. Пользователи модифицированных версий должны самостоятельно сделать корректировки с учётом внесённых ими модификаций.

Спасибо, вроде разобрался, вот так должно получиться?:
Код
function Unreg(tUser)
  RegMan.DelReg(tUser.sNick)
  RegMan.Save()
  for k, v in pairs(tMailList) do
    if v == tUser.sNick then
      tMailList[k] = nil
      return true
    end
  end
  return true
end

function Timer(id)
  local sNick = tTimers[id]
  if tNoActivate[sNick] then
    RegMan.DelReg(sNick)
    tMailList[tNickList[sNick]] = nil
    tNickList[sNick] = nil
    Save(tMailList, "tMailList", sFile)
  end
  RegMan.Save()
  TmrMan.RemoveTimer(id)
end

Но всё равно не сохраняет.
Т.е. в самой птоке зареганый юзер есть, а в файле его нет.

Автор: Alexey 7.3.2013, 17:41

Видимо, ты ждал меньше, чем iDelay минут.

Автор: -=Zion=- 7.3.2013, 18:52

Цитата(Alexey @ 7.3.2013, 22:41) *
Видимо, ты ждал меньше, чем iDelay минут.

Ну тоесть он только через 10 минут запишется в фаил?
Попробую, позже отпишусь, но что-то мне подсказывает что это тут не причем :-)

Попробывал, да, действительно записалась через 10 минут. Спасибо еще раз.
А не подскажите в каком месте нужно изменить этот самый iDelay чтобы поменьше время выставить (например одну минуту), но чтобы время, юзеру, на перезаход на хаб (для активации) так и осталось 10 минут.
Случаем не здесь?:
Код
tTimers[TmrMan.AddTimer(iDelay * 60000, "Timer")] = tUser.sNick

где 60000 и есть эти самые 10 минут.

Автор: Alexey 7.3.2013, 19:42

Зачем это надо? Не вижу смысла сохранять неактивированный ник.

Автор: Iskandark 13.4.2014, 21:56

Столкнулся с проблемой в этом скрипте: в момент отправки письма регистрируемому пользователю чат подвисает на 2-5 секунд до момента, пока не будет отправлено сообщение регистрируемому пользователю об отправке письма.

Такая же проблема с подвисанием чата на секунд 5 возникает при подключении к любому сайту по http через скрипты.
Использование http.TIMEOUT = 1 - не вариант, так как подвисать всё равно будет хоть и 1 секунду...

Как понимаю, библиотека luasocket занимает открытый socket хаба... Можно ли использовать собственное соединение, отдельное от соединения хаба?

Стоит Ptokax 0.5.0.1 под Debian. Решаема ли эта проблема? Знает кто и сталкивался?

Автор: Iskandark 17.4.2014, 0:10

Не могу нигде найти, как всё-таки сделать отправку письма о регистрации в неблокирующем сокет режиме (non-blocking).

Кто-нибудь знает, как можно реализовать это?

Есть подозрение, что надо внести какую-то правку в module("socket.tp"), вот в этот блок, с использование socket.select

Код
function connect(host, port, timeout, create)
    local c, e = (create or socket.tcp)()
    if not c then return nil, e end
    c:settimeout(timeout or TIMEOUT)
    local r, e = c:connect(host, port)
    if not r then
        c:close()
        return nil, e
    end
    return base.setmetatable({c = c}, metat)
end


Вот только какую...

Автор: Saymon21 18.4.2014, 23:44

Бегло http://mydc.ru/r/?http://stackoverflow.com/questions/12889361/lua-sockets-asynchronous-events - реквестую результаты.

Автор: Iskandark 19.4.2014, 16:55

Цитата(Saymon21 @ 19.4.2014, 0:44) *
Бегло http://mydc.ru/r/?http://stackoverflow.com/questions/12889361/lua-sockets-asynchronous-events - реквестую результаты.


Да, там написано использовать socket.select и sock:settimeout(0):
"Non-blocking: call socket.select with a timeout argument of 0, and use sock:settimeout(0) on the socket you're reading from."
Пробую в разных вариациях, вылезают разного рода ошибки и непонятно как всё-таки сделать отправку писем в неблокирующем режиме :(
Пока что не работает... Может кто знает, как сделать рабочий вариант с неблокирующим сокетом?

Ещё один из вариантов, чтобы не лезть в модули Luasocket это использовать параметр [create = function] в функции smtp.send():
Код
create: An optional function to be used instead of socket.tcp when the communications socket is created.

Но непонятно опять же, как это сокет неблокирующем режиме сделать.

Автор: dimetro 9.2.2015, 21:22

[20:19:50] <PtokaX> Не удалось отослать письмо на адрес: ххххх@yandex.ru Причина: 530 5.7.7 Email sending without SSL/TLS encryption is not allowed. Please see: http://mydc.ru/r/?http://help.yandex.ru/mail/mail-clients/ssl.xml
confuse.gif

Автор: WINS 10.2.2015, 8:47

ищи мылосервисы, которые могут работать без шифрования

Автор: Iskandark 11.2.2015, 23:17

Цитата(WINS @ 10.2.2015, 8:47) *
ищи мылосервисы, которые могут работать без шифрования


нормальных и известных почтовых серверов, работающих без шифрования нет... можно с трудом найти...

Хорошо бы, если lua могла работать с yandex и google. Но я пока не нашел решения рабочего.

Автор: dimetro 11.2.2015, 23:45

Цитата(Iskandark @ 11.2.2015, 22:17) *
нормальных и известных почтовых серверов, работающих без шифрования нет... можно с трудом найти...

Хорошо бы, если lua могла работать с yandex и google. Но я пока не нашел решения рабочего.

на хабе Озерки как ни странно работает , почта ихняя на google. видать что то знают boss.gif

Автор: Alexey 15.2.2015, 6:37

Модуль отправки писем с шифрованием SSL/TLS.
Для работы требуется библиотека http://mydc.ru/topic3401.html.
 email.lua ( 2.59 килобайт ) : 12

Автор: Alexey 15.2.2015, 21:20

Из рубрики «Нам пишут...»:

Цитата(Артём @ 15.2.2015, 12:52)
Привет, куда этот модуль нужно закидывать или просто как скрипт запускать?

Закидывать вместо одноимённого модуля из первого поста.

Цитата(Артём @ 15.2.2015, 12:52)
Он будет работать с дисктриктовым FlexyReg? А то и там не отсылаются письма на мыло при регистрации.

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

PS: Такие вопросы лучше задавать в темах скриптов, а не через личные сообщения, — ведь ответ может быть интересен и другим посетителям форума.

Автор: Error 15.11.2015, 7:47

С данным плагином Ptokax на windows7 работает без ошибок, при переносе на windows server 2008 выдает ошибку:
Синтаксис error loading module 'ssl.core' from file 'D:\PtokaX_Server\libs\ssl.dll':
system error 14001
как исправить?

Автор: Saymon21 15.11.2015, 11:55

Один из вариантов - http://mydc.ru/r/?https://www.microsoft.com/ru-ru/download/details.aspx?id=40784 качай vcredist под свою архитектуру и ставь.