Chatstats cmd for Masters only
 

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

Chatstats cmd for Masters only

Started by Madman, 12 May, 2004, 15:30:09

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Madman

Hi i use this chat stats script
Great script =)

-- chatstats v2
-- by tezlo
-- modified by tezlo and Optimus
-- modified by Madman for his "needs" :p


--everybody can.. 
--?mystats 
--?userstats  
--?stats [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 = "%[%)%(%]DpP"
-- 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 == "?stats" 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 20 Chatstats=- ==============\r\n" 
chat = chat.."\tNr:\tPosts:\tChartrs:\tWords:\tSmilies:\tNick:\r\n" 
local n = getn(index) 
if n > 20 then n = 20 end 
for i = 1, n do 
local nick = index[i] 
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 
SendToAll(chat) 
end 


function loadStats(user)
	stats = dofile("chatstats.dat") or {}
	if user then user:SendData(">>> Stas Loaded") 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(">>> Stats Saved") end
end

function clearStats(user)
	stats = {}
	if user then user:SendData(">>> Stats cleared") 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[x][%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


It allows The Ops to Save and load stats...
But i want it to only allow masters to load and save stast
Can anyone help me?


We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

plop

replace the dataarival function for this 1.
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 == "?stats" then cmdTopStats(user, args)
			elseif cmd == "!savestats" and (user.iProfile == 0) then saveStats(user)
			elseif cmd == "!loadstats" and (user.iProfile == 0)  then loadStats(user)
			elseif cmd == "!clearstats" and (user.iProfile == 0)  then clearStats(user)
			else return end return 1
		else	updStats(user.sName, str)
		end
	end
end
plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

Madman

Thanks!
It worked just fine =)
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

SMF spam blocked by CleanTalk