-- Гостевая книга v2.1prebeta by bastya_elvtars -- данный скрипт подготовил и перевел NRJ -- добавил менюшку для ОПов и пользователей (02/11/05) ---------------------- Конфигурация скрипта ---------------------- -- Уровень показыват, кто может использовать команды: -- 5 только суперОПераторы -- 4 ОПы и выше -- 3 VIPы и выше -- 2 зарегистрированные пользователи и выше -- 1 все -- 0 никто ;_) Bot="GuestBook" -- имя бота -- Часть I -- gbname="гостевая книга" -- название ф-ции (называйте сами, как хотите) -- имя для папки и файла, в котором будет храниться наша информация -- если не создадим сами, то скрип сделает все за нас path = "dats" -- имя папки gbfile="dats/guestbook.dat" --имя файлв levgbcmd1=1 gbcmd1="!showguestbook" -- посмотреть гостевую книгу levgbcmd2=1 gbcmd2="!addguestbook" -- добавить запись в гостевую комнату levgbcmd3=5 gbcmd3="!delguestbook" -- удалить запись по ее ID -- Часть II -- nname="новости" -- название ф-ции (называйте сами, как хотите) nfile="dats/news.dat" -- директория для файла levncmd1=1 ncmd1="!news" -- команда для просмотра новостей levncmd2=5 ncmd2="!addnews" -- добавить новость levncmd3=5 ncmd3="!delnews" -- удалить новость по ее ID -- Часть III -- rname="Книга отзывов и предложений" -- название ф-ции (называйте сами, как хотите) rfile="dats/requests.dat" -- директория для файла levrcmd1=1 rcmd1="!showrequests" -- посмотреть реквесты в книге levrcmd2=1 rcmd2="!addrequest" -- добавить реквест levrcmd3=5 rcmd3="!delrequest" -- удалить реквест ID ---------------------- Конец конфигурации ---------------------- os.execute("mkdir ".."\""..string.gsub(path, "/", "\\").."\"") function parseenv(user,env,bot) if env=="PM" then return "$To: "..user.sName.." From: "..bot.." $<"..bot.."> " elseif env=="MAIN" then return "<"..bot.."> " end end function Main() frmHub:RegBot(Bot) end function ChatArrival(user,data) local returndata=0 data=string.sub(data,1,string.len(data)-1) local _,_,cmd = string.find(data,"%b<>%s+(%S+)") if cmd then returndata=parsecmds(user,data,string.lower(cmd),"MAIN") end end function ToArrival(user,data) local returndata=0 data=string.sub(data,1,string.len(data)-1) -- is this meant for our bot? local _,_,whoTo = string.find(data,"$To:%s+(%S+)") if (whoTo == Bot) then local _,_,cmd = string.find(data,"$To:%s+%S+%s+From:%s+%S+%s+$%b<>%s+(%S+)") returndata=parsecmds(user,data,string.lower(cmd),"PM") end return returndata end function parsecmds(user,data,cmd,env) local returndata=0 if cmd==gbcmd1 then showshit(user,entries,gbname,gbfile,levgbcmd1,env) returndata=1 -- (user,container,wtf,file) elseif cmd==gbcmd2 then addshit(user,data,entries,gbfile,levgbcmd2,env) returndata=1 -- (user,data,container,file) elseif cmd==gbcmd3 then delshit(user,data,entries,gbfile,gbname,levgbcmd3,env) returndata=1 -- delshit(user,data,container,file,wtf) -- news stuff elseif cmd==ncmd1 then showshit(user,entries,nname,nfile,levncmd1,env) returndata=1 -- (user,container,wtf,file) elseif cmd==ncmd2 then addshit(user,data,entries,nfile,levncmd2,env) returndata=1 -- (user,data,container,file) elseif cmd==ncmd3 then delshit(user,data,entries,nfile,nname,levncmd3,env) returndata=1 -- delshit(user,data,container,file,wtf) -- requests stuff elseif cmd==rcmd1 then showshit(user,entries,rname,rfile,levrcmd1,env) returndata=1 -- (user,container,wtf,file) elseif cmd==rcmd2 then addshit(user,data,entries,rfile,levrcmd2,env) returndata=1 -- (user,data,container,file) elseif cmd==rcmd3 then delshit(user,data,entries,rfile,rname,levrcmd3,env) returndata=1 -- delshit(user,data,container,file,wtf) end return returndata end function addshit(user,data,container,file,cmdlevel,env) if cmdlevel~=0 then if CheckUserLevel(user) >= cmdlevel then local container=loadshit(file) number=number+1 local _,_,entry=string.find(data,"%b<>%s+%S+%s+(.*)") if entry then container[number]=os.date("%c").."|"..user.sName.."|"..entry saveshit(container,file) user:SendData(parseenv(user,env,Bot).."Ваша запись была успешно добавлена.") else user:SendData(parseenv(user,env,Bot).."Вы забыли ввести текст!") end container={} else user:SendData(parseenv(user,env,Bot).."У вас нет соответствующих прав для использования данной команды! |") end else user:SendData(parseenv(user,env,Bot).."Данная команда не доступна.") end end function loadshit(file) local shit={} number=0 local f,e = io.open(file,"r") if f then while 1 do local line = f:read("*l") if line == nil then break else number = number +1 shit[number]=line end end f:close(f) end return shit end function saveshit(container,file) local handle = io.open(file,"w+") for i=1,number do if container[i] then handle:write(container[i].."\n") end end handle:flush() handle:close() end function showshit(user,container,wtf,file,cmdlevel,env) if cmdlevel~=0 then if CheckUserLevel(user) >= cmdlevel then local container=loadshit(file) local msg="\r\nПеред вами "..wtf..":\r\n\r\n" if number>0 then for i=1,number do s,e,who,when,entry=string.find(container[i], "(.+)|(.+)|(.+)") msg=msg..i..".\t"..who.." - "..when.." ---> "..entry.."\r\n" end else msg=msg.."Ничего нет!" end user:SendPM(Bot,msg) else user:SendData(parseenv(user,env,Bot).."У вас нет соответствующих прав для использования данной команды! |") end else user:SendData(parseenv(user,env,Bot).."Данная команда не доступна.") end end function delshit(user,data,container,file,wtf,cmdlevel,env) if cmdlevel~=0 then if CheckUserLevel(user) >= cmdlevel then local container=loadshit(file) local _,_,args=string.find(data,"%b<>%s+%S+%s+(.+)") if args then string.gsub(args,"(%d+)",function (what) what = tonumber(what) if what then if container[what] then user:SendData(parseenv(user,env,Bot).."Запись №"..what.." была удалена из '"..wtf.."'.|") container[what]=nil saveshit(container,file) else user:SendData(parseenv(user,env,Bot).."Запись №"..what.." не была найдена в '"..wtf.."'.|") end else user:SendData(parseenv(user,env,Bot).. "Вы не указали номер записи, которую следует удалить.|") end end) else user:SendData(parseenv(user,env,Bot).. "Мне нужен номер хотя бы одной записи, чтобы работать! ;).|") end else user:SendData(parseenv(user,env,Bot).."У вас нет соответствующих прав для использования данной команды! |") end else user:SendData(parseenv(user,env,Bot).."Данная команда не доступна.") end container=nil end function CheckUserLevel(user) if user.iProfile==0 then return 5 elseif user.iProfile==1 then return 4 elseif user.iProfile==3 then return 2 elseif user.iProfile==2 then return 3 else return 1 end end wMenu = "GuestBook" -- менюшка --меню для обычных пользователей NewUserConnected = function(user) user:SendData("$UserCommand 1 2 "..wMenu.."\\Отзывы\\Добавить отзыв$<%[mynick]> !addrequest %[line:Введите текст вашего сообщения:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Отзывы\\Читать отзывы$<%[mynick]> !showrequests||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Новости\\Смотреть$<%[mynick]> !news||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Гостевая книга\\Добавить запись$<%[mynick]> !addguestbook %[line:Введите текст вашего сообщения:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Гостевая книга\\Смотреть книгу$<%[mynick]> !showguestbook||") end -- меню для ОПов OpConnected = function(user) user:SendData("$UserCommand 1 2 "..wMenu.."\\Отзывы\\Добавить отзыв$<%[mynick]> !addrequest %[line:Введите текст вашего сообщения:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Отзывы\\Читать отзывы$<%[mynick]> !showrequests||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Отзывы\\Удалить отзыв(ы)$<%[mynick]> !delrequest %[line:Введите номер записи:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Новости\\Добавить$<%[mynick]> !addnews %[line:Введите текст вашего сообщения:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Новости\\Смотреть$<%[mynick]> !news||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Новости\\Удалить$<%[mynick]> !delnews %[line:Введите номер записи:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Гостевая книга\\Добавить запись$<%[mynick]> !addguestbook %[line:Введите текст вашего сообщения:]||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Гостевая книга\\Смотреть книгу$<%[mynick]> !showguestbook||") user:SendData("$UserCommand 1 2 "..wMenu.."\\Гостевая книга\\Удалить запись$<%[mynick]> !delguestbook %[line:Введите номер записи:]||") end