--Chat History On Entry 1.03b LUA 5.0/5.1 --Переведено, оптимизировано и протестировано NRJ ----------------------------------------------------------- -- Команда для показа последних сообщений; Например, +история 10 покажет последние 10 сообщений GetChat = "+история" chatfile = "chathistory.dat"-- куда будут записываться логи чата -- Максимум линий для чата в кеше maxhistory = 20 -- Имя бота botname = "[History]" --На какие префиксы скрипт не будет реагировать BadChars = {".","?","!","+","-",} --Выбираем, для каких профилей будет доступна команда: --индекс профиля, история чата [0=нет 1=да], "Название профиля" HistoryProfiles = { [-1] = {0,"Незарегистрированные пользователи"}, [0] = {1,"Мастер"}, [1] = {1,"Оп"}, [2] = {1,"Вип"}, [3] = {1,"Зарегистрированные пользователи"}, } function Main() if loadfile(chatfile) == nil then chathistory = {} local when = os.date(" %B %d %Y в: %X") local chat = "Файл лога главного чата создан: " table.insert(chathistory,when..chat) local f,e = io.open( chatfile, "w+" ) f:write( "return {\n"..string.format("%q",chat..when)..",\n}" ) f:close() end chathistory = dofile(chatfile) frmHub:RegBot(botname)-- Поставьте в начале строки --, если хотите, чтобы бот не был зарегистрирован в хаб-листе end function OnExit() savehistory() end function NewUserConnected(user) if HistoryProfiles[user.iProfile] and HistoryProfiles[user.iProfile][1] == 1 then local n = table.getn(chathistory) local str = "<"..string.rep("-",75).."[ Последние ( "..n.." ) сообщений чата ]----------->\r\n" for i = 1, n do str = str.."\r\n"..chathistory[i] end user:SendPM(botname,str.."\r\n") user:SendPM(botname,"<"..string.rep("-",75).."[ Конец лога ]--------------->") end end OpConnected = NewUserConnected function ChatArrival(user, data) if string.sub(data, 1, 1) ~= "<" then end local s,e,pre = string.find(data, "^%b<> (.)") local s,e,cmd,lines = string.find(data, "^%b<>%s+(%S+)%s+(%d+)|$") local when = os.date("[%H:%M] ") local chat = string.sub(data, 1, -2) if cmd and cmd == GetChat then if lines ~= e then GetChatLines(user, lines) return 1 else user:SendData("Пожалуйста, укажите, сколько сообщений из лога главного чата вы хотите увидеть. Максимальное значение: "..maxhistory..".") return 1 end else for k,v in ipairs(BadChars) do if pre == v then return end end table.insert(chathistory,when..chat) if table.getn(chathistory) > maxhistory then table.remove(chathistory, 1) end savehistory() end end function GetChatLines(user, linecount) local n1 = table.getn(chathistory) local n2 = linecount local n3 = n1 - (n2-1) local str = "<----------------------------------------------------------------------[ Последние ( "..n2.." ) сообщений чата ]----------->\r\n" for i =n3,n1 do str = str.."\r\n"..chathistory[i] end user:SendPM(botname,str.."\r\n") user:SendPM(botname,"<--------------------------------------------------------------------------[ Конец лога ]--------------->") end function savehistory() local f,e = io.open( chatfile, "w+" ) if f then f:write("return {\n") for i = 1, table.getn(chathistory) do f:write( "\t"..string.format("%q", chathistory[i])..",\r\n" ) end f:write("}" ) f:close() return 1 else return nil end end