--[[

	Простой скрипт регистрации 
	от NRJ v. 1.2 (22/09/06)

	Команды:
	!regme <pass> - зарегистрироваться
	!passwd <new_pass> - изменить пароль (встроенная команда)
	!unreg - удалить регистрацию

	Changelog:

	Перевёл на апи2 - Trans 
	(и убрал генерируемый пароль, причина - очень часто юзеры не запоминают его, а также удалил отсылку в приват напоминания о регистрации, уж очень раздражает)
	
	**1.2**
	- незарегистрированные пользователи при входе на хаб получают сообщение о неоходимости регистрации
	- добавлена команда !reghelp

	**1.1**
	- добавлена команда !unreg
	- добавлено меню для зарегистрированного пользователя

]]--

----------------------------------------------------- Конфигурация -----------------------------------------------------
------------------------------------------------------------------------------------------------------------------------

ShowInfo = 1	-- показывать дополнительную информацию о том, как можно избежать повторных вводов пароля при входе на хаб
ShowToAll = 0	-- показывать всем пользователям, что на хабе новый зарегистрированный участник

------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------

bot = SetMan.GetString(21)

function UserConnected(tUser)   							--- юзер заявился
	UserMenu(tUser)   										--- и заполучил меню (а сама функция отправки меню ниже)
end
OpConnected = UserConnected   								--- ОПы тоже люди
RegConnected = UserConnected   								--- и РЕГи тоже

function ChatArrival(tUser, sData)   						--- изучаем всё, что отправляется в чат
    Core.GetUserAllData(tUser)   							--- выбиваем из юзера всю информацию (на всякий случай)
	local sData = sData:sub(1,-2)   						---  захват видимой части сообщения, включая и ник отправителя
	local _,_,cmd = sData:find("%b<>%s+(%S+)")   			---  захват первого слова после ника отправителя и первого пробела
	if cmd == "!regme" then   								--- если это команда регистрации
		if not(tUser.bRegistered) and RegMan.GetReg(tUser.sNick) == nil then   --- если юзер не зареген и если данного ника нет в списке зарегистрированных
			local s,e,pass = string.find(sData, "%b<>%s+%S+%s+(%S+)")   --- то проверяем наличие пароля в команде 
			if (pass == nil) then   						--- если нет пароля
				Core.SendToUser(tUser, "<"..bot.."> Вы забыли ввести пароль!")   --- от ворот поворот, пусть пишет по новой
				return true   								--- но команду всё же скрываем от остальных
			end   											--- проходим дальше, если пароль есть
			RegMan.AddReg(tUser.sNick, pass, 3)   			--- и регистрируем его
			Core.SendToUser(tUser, "<"..bot.."> Вы теперь зарегистрированы на хабе. Ваш ник:"..tUser.sNick.." Пароль: "..pass..". Сохраните пароль и не забудьте перезайти на хаб!")   								--- и юзер получает такое сообщение со своим паролем, чтоб мог скопировать и сохранить
			if (ShowInfo == 1) then   						--- если чтоит галочка "показывать доп. информацию с советом"
				Core.SendToUser(tUser, "<"..bot.."> Теперь для входа на хаб под вашим ником необходимо знать пароль. Вы можете вводить его каждый раз вручную, либо прописать пароль в настройках клиента. Для этого найдите в списке избранных хабов этот хаб, зайдите в его свойства и пропишите в строках Nick и Password ваши ник и пароль.")   					--- то получает его
			end												--- хэппи энд - 1
			if (ShowToAll == 1) then					   --- если стоит галочка "известить всех о новом зарегенном юзере"
                Core.SendToAll("<"..bot.."> Поприветствуем нового зарегистрировавшегося участника - "..tUser.sNick.." !!!")   --- радостно представляем остальному обществу новичка
			end   											--- хэппи энд - 2
		else   												--- этот ник уже зареген, оказывается
			Core.SendToUser(tUser, "<"..bot.."> Вы уже зарегистрированы!")   --- и он получает отказ
		end   												--- трагический финал
		return true   										--- тоже скрываем команду от других
	end   													--- конец истории о регистрации
	if cmd == "!unreg" then   								--- если же команда - "удалить регистрацию"
		if (tUser.iProfile > -1) then   					--- и если юзер в самом деле зареген
			RegMan.DelReg(tUser.sNick)   					--- хозяин-барин, удовлетворяем желание клиента
			Core.SendToUser(tUser, "<"..bot.."> Ваш аккаунт теперь удален.")   --- и отправляем ему открытку с нашими сожалениями.
		else   												--- если же юзер не зареген
			Core.SendToUser(tUser, "<"..bot.."> Команда доступна только для зарегистрированных пользователей!")   --- теперь он тоже об этом знает
		end   --- 
		return true   										--- скрываем команду
	end   													--- покончили с удалением регистрации
	if cmd == "!reghelp" then   							--- если команда - о помощи
		local msg = "\r\n\r\n"..   							--- собираем всё что может помочь юзеру
		"\t"..string.rep("=", 50).."\r\n"..
		"\t\tПомощь по регистрации\r\n"..
		"\t"..string.rep("-", 100).."\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"
		Core.SendPmToNick(tUser.sNick, bot, msg)   			--- и отправлем ему в приват, на полчаса чтивом он обеспечен
		return true   										--- тоже скрываем команду
	end   													--- конец этапа помощи
end   														--- и вообще, хватит читать чат

ToArrival = ChatArrival   									--- если вышеуказанные команды напишут в привате, результат будет такой же (не очень верится, но допускаю)

function UserMenu(tUser)   									--- обещанная функция об отправке меню юзеру при входе
	if (tUser.iProfile == -1) then   						--- это меню получит незарегенный юзер
			Core.SendToUser(tUser, "$UserCommand 0 3")
			Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Зарегистрироваться$<%[mynick]> !regme %[line:Введите пароль]&#124;")
			Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Помощь при регистрацию$<%[mynick]> !reghelp&#124;")
	else   													--- а все зарегенные получат это меню
		Core.SendToUser(tUser, "$UserCommand 0 3")
		Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Сменить пароль$<%[mynick]> !passwd %[line:Введите новый пароль]&#124;")
		Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Удалить регистрацию$<%[mynick]> !unreg&#124;")
		Core.SendToUser(tUser, "$UserCommand 1 3 Регистрация\\Помощь при регистрации$<%[mynick]> !reghelp&#124;")
	end   --- 
end   														--- отправили

---   эта функция - для отправления в опчат сообщений об ошибке скрипта, если скрипт падает в процессе эксплуатации
function OnError(s)
  local h=io.open("errors.log","a+")
  if h then
    h:write(os.date()..": "..s.."\r\n")
    h:close()
  end
  if Core then
    Core.SendToOpChat(s)
  else
    SendToOpChat(s)
  end
end
