Help with chatstats
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

Help with chatstats

Started by Gnuff?, 30 September, 2004, 20:53:59

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Gnuff?

i?m using this script, but everytime i have at restart it resets, is it possible to autosave the stats?

-- chatstats v2
-- by tezlo
-- modified by tezlo and Optimus


--everybody can..
--?mystats
--?userstats
--?topstats [category] (there are 4 categories.. posts chars --words smilies)

--OPs also can..
--!savestats and !loadstats (obsolete.. stats get saved --automatically)
--!clearstats

eyes = ":;8B"
nose = "-o"
mouth = "%[%)%(%]D"
-- modify the above to fit your needs!

stats = {}
names = { posts = 1, chars = 2, words = 3, smilies = 4 }
-- can you think of something else to count? post up


function Main()
   loadStats()
end

function OnExit()
   saveStats()
end

function DataArrival(user, data)
   if strsub(data, 1, 1) == "<" then
      local s, e, str = strfind(data, "^%b<> (.*)%|$")
      local s, e, cmd, args = strfind(str, "^([%!%?]%a+)%s*(.*)$")
      if s then
         cmd = strlower(cmd)
         if cmd == "?mystats" then cmdStats(user, user.sName)
         elseif cmd == "?userstats" then cmdStats(user, args)
         elseif cmd == "?topstats" then cmdTopStats(user, args)
         elseif cmd == "!savestats" and user.bOperator then saveStats(user)
         elseif cmd == "!loadstats" and user.bOperator then loadStats(user)
         elseif cmd == "!clearstats" and user.bOperator then clearStats(user)
         else return end return 1
      else   updStats(user.sName, str)
      end
   end
end

function cmdStats(user, target)
   local tmp = stats[target]
   if tmp then user:SendData(">> chatstats for "..target..": "..tmp[1].." posts "..tmp[2].." characters "..tmp[3].." words "..tmp[4].." smilies")
   else user:SendData(">> no record for "..target) end
end

function cmdTopStats(user, args)
local id = names[args] or 1
local index = sortStats(id)
local chat = ""
chat = chat.."\r\n\r\n\t------------------------ ? Current Top Chatstats: ? ------------------------\r\n"
chat = chat.."\tNr:\tPosts:\tChartrs:\tWords:\tSmilies:\tNick:\r\n"
local n = getn(index)
if n > 10 then n = 10 end
for i = 1, n do
local nick = index
local tmp = stats[nick]
chat = chat.."\t"..i..".\t "..tmp[id].."\t "..tmp[2].."\t "..tmp[3].."\t "..tmp[4].."\t"..nick.."\r\n"
end
user:SendData(chat)
end


function loadStats(user)
   stats = dofile("chatstats.dat") or {}
   if user then user:SendData(">> done") end
end

function saveStats(user)
   local f = openfile("chatstats.dat", "w+")
   assert(f, "chatstats.dat")
   write(f, "return {\n")
   for nick, table in stats do
      write(f, "\t"..format("[%q]", nick).." = { "..table[1], ", "..table[2]..", "..table[3]..", "..table[4].." },\n")
   end write(f, "}") closefile(f)
   if user then user:SendData(">> done") end
end

function clearStats(user)
   stats = {}
   if user then user:SendData(">> done") end
end

function sortStats(id)
   local index = {n=0}
   foreach(stats, function(nick, tmp) tinsert(%index, nick) end)
   local f = function(x, y) return stats
  • [%id] > stats[y][%id] end
   sort(index, f) return index
end

function updStats(nick, str)
   local tmp = stats[nick] or {0,0,0,0}
   tmp[1], tmp[2], tmp[3], tmp[4] = tmp[1]+1, tmp[2]+strlen(str), tmp[3]+cntargs(str, "(%a+)"), tmp[4]+cntsmilies(str)
   stats[nick] = tmp
end

function cntargs(str, rule)
   local s, n = gsub(str, rule, "")
   return n
end

function cntsmilies(str)
   return cntargs(str, "(["..eyes.."]["..nose.."]?["..mouth.."])") + cntargs(str, "(["..mouth.."]["..nose.."]?["..eyes.."])")
end
Gnuff

bastya_elvtars

if you post it as code, sure ;)
Everything could have been anything else and it would have just as much meaning.

SMF spam blocked by CleanTalk