--// !seen lua script 1.2 local userOn = {} snTable = {} Serialize = function(tTable, sTableName, sTab) sTab = sTab or ""; sTmp = "" sTmp = sTmp..sTab..sTableName.."={" local tStart = 0 for key, value in tTable do if tStart == 1 then sTmp = sTmp..",\r\n" else sTmp = sTmp.."\r\n" tStart = 1 end local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key); if(type(value) == "table") then sTmp = sTmp..Serialize(value, sKey, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value); sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue end end sTmp = sTmp.."\r\n"..sTab.."}" return sTmp end local okenize = function( str ) local ret = {} string.gsub( str, "([%S+_%< >+_.+_%w+]+)", function( s ) table.insert( ret, s ) end ) --// %< > = alt0160, look for false space in names.. return ret end local seenstring = function(n) local sestring = "´¯/¨ Log On/Off data for "..n.." ¨\\¯`««\r\n".. "\tLog On:\r\n" for index = table.getn(snTable[n]["LogOn"]), 1, -1 do sestring = sestring.."\t\t"..snTable[n]["LogOn"][index].."\r\n" end sestring=sestring.."\tLog Off:\r\n" for index = table.getn(snTable[n]["LogOff"]), 1, -1 do sestring = sestring.."\t\t"..snTable[n]["LogOff"][index].."\r\n" end return sestring end function saveSeenData() local savestring = "" savestring = Serialize(snTable, "snTable", "") local f,e = io.open( "_seenData2.txt", "w+") if f then f:write(savestring) f:close() end end function GetTime() a = os.date("%a") I = os.date("%I") M = os.date("%M") S = os.date("%S") b = os.date("%b") d = os.date("%d") z = os.date("%z") y = os.date("%y") p = os.date("%p") Date = a..", "..I..":"..M..":"..S.." "..p..", "..b.."/"..d.."/"..y.." "..z return Date end local f,e = io.open( "_seenData2.txt", "a+" ) if f then f:write( "" ) f:close() end dofile("_seenData2.txt") dcpp:setListener( "userQuit", "seenquit", function( hub, nick ) --DC():PrintDebug("userquit data: "..hub:getHubName()..nick) local hubnameraw = string.lower( hub:getHubName() ) --// hub name if string.find ( hubnameraw, "¥øß hšî må" ) then -- "¥øß hšî må" if not snTable[nick] then snTable[nick] ={["LogOff"]={},["LogOn"]={}} end if table.getn(snTable[nick]["LogOff"]) >= 5 then table.remove(snTable[nick]["LogOff"], 1) table.insert(snTable[nick]["LogOff"], GetTime()) else table.insert(snTable[nick]["LogOff"], GetTime()) end saveSeenData() userOn[nick] = nil end return end ) dcpp:setListener( "userMyInfo", "seenconnect", function( hub, user, msg ) --dcpp:setListener( "userConnected", "seenconnect", --function( hub, user ) local nick = user:getNick() --DC():PrintDebug(nick) --DC():PrintDebug("userquit data: "..hub:getHubName()..nick) local hubnameraw = string.lower( hub:getHubName() ) --// hub name if string.find ( hubnameraw, "¥øß hšî må" ) then if not userOn[nick] then if not snTable[nick] then snTable[nick] ={["LogOff"]={},["LogOn"]={}} end if table.getn(snTable[nick]["LogOn"]) >= 5 then table.remove(snTable[nick]["LogOn"], 1) if (os.time() - hub._uptime ) >= 3 then table.insert(snTable[nick]["LogOn"], GetTime()) else table.insert(snTable[nick]["LogOn"], GetTime().." (script restart)") end else if (os.time() - hub._uptime ) >= 3 then table.insert(snTable[nick]["LogOn"], GetTime()) else table.insert(snTable[nick]["LogOn"], GetTime().." (script restart)") end end saveSeenData() userOn[nick]=1 end end end ) dcpp:setListener( "chat", "seencommand", function( hub, user, text ) local hubnameraw = string.lower( hub:getHubName() ) --// hub name if string.find ( hubnameraw, "¥øß hšî må" ) then if string.find( text, "^%pseen" ) == 0 then return end local parms = okenize( string.sub( text, 2 ) ) if parms[1] == "seen" then if parms[2] == "list" then local liststring ="´¯/¨ Nick List for Log On/Off data ¨\\¯`««\r\n" local c = 0 for k,v in snTable do c = c +1 if c < 6 then liststring = liststring..k.."\t" --DC():PrintDebug(savestring) else liststring = liststring..k.." \r\n" c = 0 end end DC():SendHubMessage( hub:getId(), " +amp "..liststring.."|") elseif snTable[parms[2]] then --hub:injectChat( "\r\n »»´¯/¨ Currently Blocked Hubs/Nicks ¨\\¯`««\r\n Hubs:\r\n"..noshstring().." Users:\r\n"..userstring().."\r\n ('/nosh help' for commands.)") if hub._users[parms[2]] then DC():SendHubMessage( hub:getId(), " +amp »»´¯/¨ "..parms[2].." is currently online DUMBASS! Logged in at: "..snTable[parms[2]]["LogOn"][table.getn(snTable[parms[2]]["LogOn"])].." ¨\\¯`««|") else DC():SendHubMessage( hub:getId(), " +amp "..seenstring(parms[2]).."|") end hub:injectChat(liststring) else if hub._users[parms[2]] then DC():SendHubMessage( hub:getId(), " +amp »»´¯/¨ "..parms[2].." is currently Online dumbass! OPEN YOUR EYES! ¨\\¯`««|") else DC():SendHubMessage( hub:getId(), " +amp »»´¯/¨ User not found, or no data. try \"+seen list\" for a nicks list. ¨\\¯`««|") end end end end end ) DC():PrintDebug( " ** !seen v1.2 loaded **" )