membercount script
 

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

membercount script

Started by Creative, 31 March, 2006, 16:33:27

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Creative

I was thinking, if any1 can make a script of membercount. Suppose if any user types, +membercount, then the output shud b in foll format : <[Bot]> 1012 registered users, 704 active, 459 visited in last 24 hrs, 126 currently online.
Can any1 make this script????

Markitos

Quote from: SwapY on 31 March, 2006, 16:33:27
I was thinking, if any1 can make a script of membercount. Suppose if any user types, +membercount, then the output shud b in foll format : <[Bot]> 1012 registered users, 704 active, 459 visited in last 24 hrs, 126 currently online.
Can any1 make this script????
This is my try but it doesn't seems to work and about the  "n users visited in last 24h" i didnt know how-to do it in script way...
--[[
MemberCount Incomplete by Markitos
Some help by jiten
]]--

function Main()
sBot = "MemberCount"
frmHub:RegBot(Bot)
end

function ChatArrival(user, data)
	data = string.sub (data,1,-2)
	local s, e, cmd = string.find (data, "%b<>%s+%!(%S+)")
		if cmd then
			local tCmds = {
				["membercount"] = function()
				user:SendData(sBot, "GetActive().."active users" online.."online users" e GetReg().."reg users")
				end
				}
				if tCmds[cmd] then
					return tCmds[cmd](user,data),1
				end
		end
end

local online = table.getn(frmHub:GetOnlineUsers())

GetActive = function()
	local n = 0
	for i,user in ipairs(frmHub:GetOnlineUsers()) do
		if user.bActive then 
			n = n + 1
		end
	end
	return n
end

GetReg = function()
	local a = 0
	for i,user in ipairs(frmHub:GetOnlineUsers()) do
		if user.bRegistered then 
			a = a + 1
		end
	end
	return a
end


Help...

jiten

You could use:

table.getn( GetOnlineRegUsers() )


instead of looping through every online user:

GetReg = function()
	local a = 0
	for i,user in ipairs(frmHub:GetOnlineUsers()) do
		if user.bRegistered then 
			a = a + 1
		end
	end
	return a
end

6Marilyn6Manson6

This is my version:

--[[
MemberCount Incomplete by Markitos
Some help by jiten
Touched by 6Marilyn6Manson6 03/04/2006
]]--

sBot = "MemberCount"
function Main()
	frmHub:RegBot(sBot)
end

local online = table.getn(frmHub:GetOnlineUsers())
local regonline = table.getn(frmHub:GetOnlineRegUsers())
--------------------------------------------------------
function ChatArrival(user, data)
	data = string.sub (data,1,-2)
	local s, e, cmd = string.find (data, "%b<>%s+%!(%S+)")
		if cmd then
		local tCmds = {
			["membercount"] = function()
			user:SendData(sBot,"Active Users Are: "..GetActive())
			user:SendData(sBot,"Online Users Are: "..online)
			user:SendData(sBot,"Registered Users Are: "..regonline)
		end
		}
		if tCmds[cmd] then
			return tCmds[cmd](user,data),1
		end
	end
end
--------------------------------------------------------
GetActive = function()
	local a = 0
	for i,user in ipairs(frmHub:GetOnlineUsers()) do
		if user.bActive then 
			a = a + 1
		end
	end
	return a
end
--// 6Marilyn6Manson6


but when I open PtokaX, this script give this error:
[14:52] Syntax ...pts\MemberCount Incomplete_3 by 6Marilyn6Manson6.lua:12: bad argument #1 to `getn' (table expected, got no value)


. After I start script manually and it work perfectly. Where is problem in start of this script? Thanks for fixed and help :p

jiten

frmHub:GetOnlineUsers() will return a table with all logged user objects.

If the hub is empty, that's the syntax error likely to occur if you call it outside an appropriate function.

You could insert those two frmHub local's inside membercount function in ChatArrival to avoid it.

But hey, that's just my oppinion.

6Marilyn6Manson6

--[[
MemberCount Incomplete by Markitos
Some help by jiten
Touched by 6Marilyn6Manson6 03/04/2006
Fixes small bug 03/04/2006 (thanks jiten)
]]--

sBot = "MemberCount"

function Main()
	frmHub:RegBot(sBot)
end
--------------------------------------------------------
function ChatArrival(user, data)
	data = string.sub (data,1,-2)
	local online = table.getn(frmHub:GetOnlineUsers())
	local regonline = table.getn(frmHub:GetOnlineRegUsers())
	local s, e, cmd = string.find (data, "%b<>%s+%!(%S+)")
		if cmd then
		local tCmds = {
			["membercount"] = function()
			user:SendData(sBot,"Active Users Are: "..GetActive())
			user:SendData(sBot,"Online Users Are: "..online)
			user:SendData(sBot,"Registered Users Are: "..regonline)
		end
		}
		if tCmds[cmd] then
			return tCmds[cmd](user,data),1
		end
	end
end
--------------------------------------------------------
GetActive = function()
	local a = 0
	for i,user in ipairs(frmHub:GetOnlineUsers()) do
		if user.bActive then 
			a = a + 1
		end
	end
	return a
end
--// 6Marilyn6Manson6


Now work.. thanks jiten for your help :D

Markitos

Quote459 visited in last 24 hrs
How should i do it???

Madman

#7
I don't know how to do "visited in last 24 hours"
But here is my soulution...

-- Member Count
-- Made by Madman
-- Requested by SwapY
-- Small bugfix, report by Markitos

function Main()
	-- Make file
	local file = io.open("Members.dat")
	if file then
		file:close()
	else
		local file = io.open("Members.dat", "w+")
		file:write("Members = {\n}")
		file:close()
	end
	-- Load file
	LoadFromFile("Members.dat")
end

function ChatArrival(curUser, data)
	local data = string.sub(data, 1, -2)
	local s,e,cmd = string.find(data, "%b<>%s+[%!%+%?%#](%S+)")
	if cmd == "membercount" then -- find cmd
		local RegC, OnlineC, ActiveC, vCount = 0,0,0,0
		for count,_ in pairs(frmHub:GetRegisteredUsers()) do -- Get regged users
			RegC = count -- RegC is count
		end
		for count,oUser in pairs(frmHub:GetOnlineRegUsers()) do -- Get online reg users
			OnlineC = count
			if oUser.bActive then -- If user is Active
				-- Add to table
				if Members[oUser.sName] == nil then
					Members[oUser.sName] = {}
					Members[oUser.sName]["Active"] = {}
					Members[oUser.sName]["Active"] = 1
					SaveToFile("Members.dat", Members, "Members")
				else
					if Members[oUser.sName]["Active"] then
					else
						Members[oUser.sName]["Active"] = 1
						SaveToFile("Members.dat", Members, "Members")
					end
				end
			end
		end
		for name,_ in pairs(Members) do -- Get names from tables
			if Members[name]["Active"] then -- Get the Active
				ActiveC = ActiveC+1 -- Count them
			end
			if Members[name]["LastSeen"] then -- Get thoose who are offline
				if Members[name]["LastSeen"] == os.date("%Y-%m-%d") then -- Check if they has todays date
					vCount = vCount+1 -- if they do, count
				else -- if not
					Members[name]["LastSeen"] = nil -- Remove from table
					SaveToFile("Members.dat", Members, "Members") -- Save
				end
			end
		end
		curUser:SendData(frmHub:GetHubBotName(), "There is " ..RegC.. " registered users, " ..ActiveC.. " active, " ..vCount.. " has visited the hub today (" ..os.date("%Y-%m-%d").. "), " ..OnlineC.. " currently online")
		return 1
	end
end

function NewUserConnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		if Members[curUser.sName]["LastSeen"] then -- Is user in table with LastSeen
			Members[curUser.sName]["LastSeen"] = nil -- Delte it
		end
		if curUser.bActive then -- Is user active?
			-- Add to table
			if Members[curUser.sName] == nil then
				Members[curUser.sName] = {}
				Members[curUser.sName]["Active"] = {}
				Members[curUser.sName]["Active"] = 1
			else
				Members[curUser.sName]["Active"] = {}
				Members[curUser.sName]["Active"] = 1
			end
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpConnected = NewUserConnected

function UserDisconnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		-- Add to table
		if Members[curUser.sName] == nil then
			Members[curUser.sName] = {}
			Members[curUser.sName]["LastSeen"] = {}
			Members[curUser.sName]["LastSeen"] = os.date("%Y-%m-%d") -- Add date
		else
			Members[curUser.sName]["LastSeen"] = {}
			Members[curUser.sName]["LastSeen"] = os.date("%Y-%m-%d")
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpDisconnected = UserDisconnected

-- Serialize by nErBoS
function Serialize(tTable, sTableName, sTab)
	assert(tTable, "tTable equals nil");
	assert(sTableName, "sTableName equals nil");
	assert(type(tTable) == "table", "tTable must be a table!");
	assert(type(sTableName) == "string", "sTableName must be a string!");
	sTab = sTab or "";
	sTmp = ""
	sTmp = sTmp..sTab..sTableName.." = {\n"
	for key, value in tTable do
		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
		sTmp = sTmp..",\n"
	end
	sTmp = sTmp..sTab.."}"
	return sTmp
end

function SaveToFile(file , table , tablename)
	local handle = io.open(file,"w+")
	handle:write(Serialize(table, tablename))
	handle:flush()
	handle:close()
end

function LoadFromFile(filename)
	local f = io.open(filename)
	if f then
		local r = f:read("*a")
		f:flush()
		f:close()
		local func,err = loadstring(r)
		if func then x,err = pcall(func) end
	end
end
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

Markitos

[20:22] Syntax ...ings\Administrator\Desktop\Ptokax\scripts\member.lua:66: attempt to index global 'Members' (a nil value)
[20:22] Syntax ...ings\Administrator\Desktop\Ptokax\scripts\member.lua:30: attempt to index global 'Members' (a nil value)

Markitos

Quote from: Mutor on 03 April, 2006, 19:59:15
Quote from: Markitos on 03 April, 2006, 17:42:19
Quote459 visited in last 24 hrs
How should i do it???

Without using complex julian functions, you could just use a timer
Using global values or those stored in a table..

function Main()
   SetTimer(86400000)  --24 hrs
   StartTimer()
end

OnTimer = function()
   --clear values here
end
eg. plz...i dont understand your point

Madman

Quote from: Markitos on 03 April, 2006, 19:24:06
[20:22] Syntax ...ings\Administrator\Desktop\Ptokax\scripts\member.lua:66: attempt to index global 'Members' (a nil value)
[20:22] Syntax ...ings\Administrator\Desktop\Ptokax\scripts\member.lua:30: attempt to index global 'Members' (a nil value)

How did u do that?
The error indicates that the table was either not created or loaded...
The file/table is created (if not exsiting) at script restart...
And it is also loaded at script restart...
That error should be imposibole to get..
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

Markitos

Quote from: Madman on 03 April, 2006, 22:27:53
Quote from: Markitos on 03 April, 2006, 19:24:06
[20:22] Syntax ...ings\Administrator\Desktop\Ptokax\scripts\member.lua:66: attempt to index global 'Members' (a nil value)
[20:22] Syntax ...ings\Administrator\Desktop\Ptokax\scripts\member.lua:30: attempt to index global 'Members' (a nil value)

How did u do that?
The error indicates that the table was either not created or loaded...
The file/table is created (if not exsiting) at script restart...
And it is also loaded at script restart...
That error should be imposibole to get..
Sorry, madman i messed up a little...
When i type the command ptokax reports Ptokax 0.3.4.0dbg\scripts\member.lua:59: attempt to concatenate global `OnlineC' (a nil value)

Madman

That's an error i can understand... =)
Script fixed and updated...
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

Markitos

Quote from: Madman on 04 April, 2006, 15:11:52
That's an error i can understand... =)
Script fixed and updated...
Thanks...due this im learning lua better everyday  ;D

Yahoo

#14
-- Member Count
-- Made by Madman
-- Requested by SwapY
-- Small bugfix, report by Markitos

function Main()
	-- Make file
	local file = io.open("Members.dat")
	if file then
		file:close()
	else
		local file = io.open("Members.dat", "w+")
		file:write("Members = {\n}")
		file:close()
	end
	-- Load file
	LoadFromFile("Members.dat")
end

function ChatArrival(curUser, data)
	local data = string.sub(data, 1, -2)
	local s,e,cmd = string.find(data, "%b<>%s+[%!%+%?%#](%S+)")
	if cmd == "membercount" then -- find cmd
		local RegC, OnlineC, ActiveC, vCount = 0,0,0,0
		for count,_ in pairs(frmHub:GetRegisteredUsers()) do -- Get regged users
			RegC = count -- RegC is count
		end
		for count,oUser in pairs(frmHub:GetOnlineRegUsers()) do -- Get online reg users
			OnlineC = count
			if oUser.bActive then -- If user is Active
				-- Add to table
				if Members[oUser.sName] == nil then
					Members[oUser.sName] = {}
					Members[oUser.sName]["Active"] = {}
					Members[oUser.sName]["Active"] = 1
					SaveToFile("Members.dat", Members, "Members")
				else
					if Members[oUser.sName]["Active"] then
					else
						Members[oUser.sName]["Active"] = 1
						SaveToFile("Members.dat", Members, "Members")
					end
				end
			end
		end
		for name,_ in pairs(Members) do -- Get names from tables
			if Members[name]["Active"] then -- Get the Active
				ActiveC = ActiveC+1 -- Count them
			end
			if Members[name]["LastSeen"] then -- Get thoose who are offline
				if Members[name]["LastSeen"] == os.date("%Y-%m-%d") then -- Check if they has todays date
					vCount = vCount+1 -- if they do, count
				else -- if not
					Members[name]["LastSeen"] = nil -- Remove from table
					SaveToFile("Members.dat", Members, "Members") -- Save
				end
			end
		end
		curUser:SendData(frmHub:GetHubBotName(), "There is " ..RegC.. " registered users, " ..ActiveC.. " active, " ..vCount.. " has visited the hub today (" ..os.date("%Y-%m-%d").. "), " ..OnlineC.. " currently online")
		return 1
	end
end

function NewUserConnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		if Members[curUser.sName]["LastSeen"] then -- Is user in table with LastSeen
			Members[curUser.sName]["LastSeen"] = nil -- Delte it
		end
		if curUser.bActive then -- Is user active?
			-- Add to table
			if Members[curUser.sName] == nil then
				Members[curUser.sName] = {}
				Members[curUser.sName]["Active"] = {}
				Members[curUser.sName]["Active"] = 1
			else
				Members[curUser.sName]["Active"] = {}
				Members[curUser.sName]["Active"] = 1
			end
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpConnected = NewUserConnected

function UserDisconnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		-- Add to table
		if Members[curUser.sName] == nil then
			Members[curUser.sName] = {}
			Members[curUser.sName]["LastSeen"] = {}
			Members[curUser.sName]["LastSeen"] = os.date("%Y-%m-%d") -- Add date
		else
			Members[curUser.sName]["LastSeen"] = {}
			Members[curUser.sName]["LastSeen"] = os.date("%Y-%m-%d")
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpDisconnected = UserDisconnected

-- Serialize by nErBoS
function Serialize(tTable, sTableName, sTab)
	assert(tTable, "tTable equals nil");
	assert(sTableName, "sTableName equals nil");
	assert(type(tTable) == "table", "tTable must be a table!");
	assert(type(sTableName) == "string", "sTableName must be a string!");
	sTab = sTab or "";
	sTmp = ""
	sTmp = sTmp..sTab..sTableName.." = {\n"
	for key, value in tTable do
		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
		sTmp = sTmp..",\n"
	end
	sTmp = sTmp..sTab.."}"
	return sTmp
end

function SaveToFile(file , table , tablename)
	local handle = io.open(file,"w+")
	handle:write(Serialize(table, tablename))
	handle:flush()
	handle:close()
end

function LoadFromFile(filename)
	local f = io.open(filename)
	if f then
		local r = f:read("*a")
		f:flush()
		f:close()
		local func,err = loadstring(r)
		if func then x,err = pcall(func) end
	end
end

i am getting the following error in this script
membercount.lua:32: attempt to index global 'Members' (a nil value)
and can someone add the function of users visited in last 24hours plzz
"BoRN FIGhTEr"

SuPEr1987

I am getting the same error !!!!
the errors are : - membercount.lua:32: attempt to index global 'Members' (a nil value)
                        membercount.lua:112: attempt to call a table value

6Marilyn6Manson6

Quote from: SuPEr1987 on 18 March, 2007, 12:38:42
I am getting the same error !!!!
the errors are : - membercount.lua:32: attempt to index global 'Members' (a nil value)
                        membercount.lua:112: attempt to call a table value


What version you use?

Yahoo

i am also getting the same errors and i am using Version=0.3.5.2 of ptokax
"BoRN FIGhTEr"

Madman

Code: lua
-- Member Count
-- Made by Madman
-- Requested by SwapY
-- Small bugfix, report by Markitos
-- Lua 5.1 updated

function Main()
	-- Make file
	local file = io.open("Members.dat")
	if file then
		file:close()
	else
		local file = io.open("Members.dat", "w+")
		file:write("Members = {\n}")
		file:close()
	end
	-- Load file
	LoadFromFile("Members.dat")
end

function ChatArrival(curUser, data)
	local data = string.sub(data, 1, -2)
	local s,e,cmd = string.find(data, "%b<>%s+[%!%+%?%#](%S+)")
	if cmd == "membercount" then -- find cmd
		local RegC, OnlineC, ActiveC, vCount = 0,0,0,0
		for count,_ in pairs(frmHub:GetRegisteredUsers()) do -- Get regged users
			RegC = count -- RegC is count
		end
		for count,oUser in pairs(frmHub:GetOnlineRegUsers()) do -- Get online reg users
			OnlineC = count
			if oUser.bActive then -- If user is Active
				-- Add to table
				if Members[oUser.sName] == nil then
					Members[oUser.sName] = {}
					Members[oUser.sName]["Active"] = {}
					Members[oUser.sName]["Active"] = 1
					SaveToFile("Members.dat", Members, "Members")
				else
					if Members[oUser.sName]["Active"] then
					else
						Members[oUser.sName]["Active"] = 1
						SaveToFile("Members.dat", Members, "Members")
					end
				end
			end
		end
		for name,_ in pairs(Members) do -- Get names from tables
			if Members[name]["Active"] then -- Get the Active
				ActiveC = ActiveC+1 -- Count them
			end
			if Members[name]["LastSeen"] then -- Get thoose who are offline
				if Members[name]["LastSeen"] == os.date("%Y-%m-%d") then -- Check if they has todays date
					vCount = vCount+1 -- if they do, count
				else -- if not
					Members[name]["LastSeen"] = nil -- Remove from table
					SaveToFile("Members.dat", Members, "Members") -- Save
				end
			end
		end
		curUser:SendData(frmHub:GetHubBotName(), "There is " ..RegC.. " registered users, " ..ActiveC.. " active, " ..vCount.. " has visited the hub today (" ..os.date("%Y-%m-%d").. "), " ..OnlineC.. " currently online")
		return 1
	end
end

function NewUserConnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		if Members[curUser.sName]["LastSeen"] then -- Is user in table with LastSeen
			Members[curUser.sName]["LastSeen"] = nil -- Delte it
		end
		if curUser.bActive then -- Is user active?
			-- Add to table
			if Members[curUser.sName] == nil then
				Members[curUser.sName] = {}
				Members[curUser.sName]["Active"] = {}
				Members[curUser.sName]["Active"] = 1
			else
				Members[curUser.sName]["Active"] = {}
				Members[curUser.sName]["Active"] = 1
			end
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpConnected = NewUserConnected

function UserDisconnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		-- Add to table
		if Members[curUser.sName] == nil then
			Members[curUser.sName] = {}
			Members[curUser.sName]["LastSeen"] = {}
			Members[curUser.sName]["LastSeen"] = os.date("%Y-%m-%d") -- Add date
		else
			Members[curUser.sName]["LastSeen"] = {}
			Members[curUser.sName]["LastSeen"] = os.date("%Y-%m-%d")
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpDisconnected = UserDisconnected

-- Serialize by nErBoS
function Serialize(tTable, sTableName, sTab)
	assert(tTable, "tTable equals nil");
	assert(sTableName, "sTableName equals nil");
	assert(type(tTable) == "table", "tTable must be a table!");
	assert(type(sTableName) == "string", "sTableName must be a string!");
	sTab = sTab or "";
	sTmp = ""
	sTmp = sTmp..sTab..sTableName.." = {\n"
	for key, value in pairs(tTable) do
		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
		sTmp = sTmp..",\n"
	end
	sTmp = sTmp..sTab.."}"
	return sTmp
end

function SaveToFile(file , table , tablename)
	local handle = io.open(file,"w+")
	handle:write(Serialize(table, tablename))
	handle:flush()
	handle:close()
end

function LoadFromFile(filename)
	local f = io.open(filename)
	if f then
		local r = f:read("*a")
		f:flush()
		f:close()
		local func,err = loadstring(r)
		if func then x,err = pcall(func) end
	end
end


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

Yahoo

get the following error now
membercount.lua:317: attempt to index global 'Members' (a nil value)
membercount.lua:317: attempt to index global 'Members' (a nil value)
"BoRN FIGhTEr"

Madman

The script only has 143 lines...
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

6Marilyn6Manson6


Yahoo

thanks working gr8
i think there is some prob in this script because the info in member.dat file get blank after some days and the command stop working...
"BoRN FIGhTEr"

Madman

#23
Quote from: Yahoo on 28 March, 2007, 19:17:42
i think there is some prob in this script because the info in member.dat file get blank after some days and the command stop working...
Someone else also reported this prob...
Not a clue what's wrong...and i'm of to bed
If anyone have some idea's please try to fix it.
If i rember, i will check more tomorrow.
-- Member Count
-- Made by Madman
-- Requested by SwapY
-- Small bugfix, report by Markitos
-- Small changes by NL

Members = {}

function Main()
	-- Make file
	local file = io.open("Members.dat")
	if file then
		file:close()
	else
		local file = io.open("Members.dat", "w+")
		file:write("Members = {\n}")
		file:close()
	end
	-- Load file
	LoadFromFile("Members.dat")
end

function ChatArrival(curUser, data)
	local data = string.sub(data, 1, -2)
	local s,e,cmd = string.find(data, "%b<>%s+[%!%+%?%#](%S+)")
	if cmd == "membercount" then -- find cmd
	SendToAll(data)
		local RegC, OnlineC, ActiveC, vCount = 0,0,0,0
		for count,_ in pairs(frmHub:GetRegisteredUsers()) do -- Get regged users
			RegC = count -- RegC is count
		end
		for count,oUser in pairs(frmHub:GetOnlineRegUsers()) do -- Get online reg users
			OnlineC = count
			if oUser.bActive then -- If user is Active
				-- Add to table
				if Members[oUser.sName] == nil then
					Members[oUser.sName] = {Active = 1}
					SaveToFile("Members.dat", Members, "Members")
				else
					if not Members[oUser.sName].Active then
						Members[oUser.sName].Active = 1
						SaveToFile("Members.dat", Members, "Members")
					end
				end
			end
		end
		for name,_ in pairs(Members) do -- Get names from tables
			if Members[name].Active then -- Get the Active
				ActiveC = ActiveC+1 -- Count them
			end
			if Members[name].LastSeen then -- Get thoose who are offline
				if Members[name].LastSeen == os.date("%Y-%m-%d") then -- Check if they has todays date
					vCount = vCount+1 -- if they do, count
				else -- if not
					Members[name].LastSeen = nil -- Remove from table
					SaveToFile("Members.dat", Members, "Members") -- Save
				end
			end
		end
		SendToAll(frmHub:GetHubBotName(), "" ..RegC.. " registered users, " ..ActiveC.. " active, " ..vCount.. " visited the hub in last 24 hrs, " ..OnlineC.. " currently online")
		return 1
	end
end

function NewUserConnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		if Members[curUser.sName] and  Members[curUser.sName].LastSeen then -- Is user in table with LastSeen
			Members[curUser.sName].LastSeen = nil -- Delte it
		end
		if curUser.bActive then -- Is user active?
			-- Add to table
			if Members[curUser.sName] == nil then
				Members[curUser.sName] = {Active = 1}
			else
				Members[curUser.sName].Active = 1
			end
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpConnected = NewUserConnected

function UserDisconnected(curUser)
	if frmHub:isNickRegged(curUser.sName) then -- Is user reg?
		-- Add to table
		if Members[curUser.sName] == nil then
			Members[curUser.sName].LastSeen = {os.date("%Y-%m-%d")}
		else
			Members[curUser.sName].LastSeen = os.date("%Y-%m-%d")
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpDisconnected = UserDisconnected

-- Serialize by nErBoS
function Serialize(tTable, sTableName, sTab)
	assert(tTable, "tTable equals nil");
	assert(sTableName, "sTableName equals nil");
	assert(type(tTable) == "table", "tTable must be a table!");
	assert(type(sTableName) == "string", "sTableName must be a string!");
	sTab = sTab or "";
	sTmp = ""
	sTmp = sTmp..sTab..sTableName.." = {\n"
	for key, value in pairs(tTable) do
		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
		sTmp = sTmp..",\n"
	end
	sTmp = sTmp..sTab.."}"
	return sTmp
end

function SaveToFile(file , table , tablename)
	local handle = io.open(file,"w+")
	handle:write(Serialize(table, tablename))
	handle:flush()
	handle:close()
end

function LoadFromFile(filename)
	local f = io.open(filename)
	if f then
		local r = f:read("*a")
		f:flush()
		f:close()
		local func,err = loadstring(r)
		if func then x,err = pcall(func) end
	end
end


This is a mod NightLitch pasted in Px Admin some day ago, try it, see if it works better...
Here's a mod from our Master Mutor ;)
-- Member Count
-- Made by Madman
-- Requested by SwapY
-- Small bugfix, report by Markitos
-- Small changes by NightLitch
-- LUA 5.1 Strict, mod by Mutor Changed file load

local Bot,OpNick = frmHub:GetHubBotName(),"Mutor"

Main = function()
	if loadfile("Members.dat") then
		dofile("Members.dat")
	else
		Members = {}
		SaveToFile("Members.dat", Members, "Members")
	end
	OnError("Member stats refreshed: "..DoMembers())
end

OnError = function(msg)
	SendToNick(OpNick,"<"..Bot.."> "..msg)
end

function ChatArrival(curUser, data)
	data = data:sub(1, -2)
	local s,e,pfx,cmd = data:find("%b<> (%p)(%a+)")
	if pfx and command and command == "membercount" then -- find command
		SendToAll(Bot, pfx..cmd.."\r\n"..DoMembers())
		return 1
	end
end

DoMembers = function()
	local RegC, OnlineC, ActiveC, vCount,iChg = #frmHub:GetRegisteredUsers(),#frmHub:GetOnlineRegUsers(),0,0
	for count,oUser in ipairs(frmHub:GetOnlineRegUsers()) do -- Get online reg users
		if oUser.bActive then -- If user is Active
			-- Add to table
			if not Members[oUser.sName]then
				Members[oUser.sName] = {Active = 1}
				iChg = 1
			else
				if not Members[oUser.sName].Active then
					Members[oUser.sName].Active = 1
					iChg = 1
				end
			end
		end
	end
	for name,_ in pairs(Members) do -- Get names from tables
		if Members[name].Active then -- Get the Active
			ActiveC = ActiveC+1 -- Count them
		end
		if Members[name].LastSeen then -- Get thoose who are offline
			if Members[name].LastSeen == os.date("%Y-%m-%d") then -- Check if they have todays date
				vCount = vCount+1 -- if they do, count
			else -- if not
				Members[name].LastSeen = nil -- Remove from table
				iChg = 1
			end
		end
	end
	if iChg then
		SaveToFile("Members.dat", Members, "Members") -- Save
	end
	return RegC.. " registered users, " ..ActiveC.. " active, " ..vCount..
	" visited the hub in last 24 hrs, " ..OnlineC.. " currently online"
end

function NewUserConnected(curUser)
	if curUser.sName.bRegistered then -- Is user reg?
		if Members[curUser.sName] and Members[curUser.sName].LastSeen then -- Is user in table with LastSeen
			Members[curUser.sName].LastSeen = nil -- Delete it
		end
		if not Members[curUser.sName] then
			if curUser.bActive then -- Is user active?
				-- Add to table
				Members[curUser.sName] = {Active = 1}
			else
				Members[curUser.sName].Active = 1
			end
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpConnected = NewUserConnected

function UserDisconnected(curUser)
	if curUser.sName.bRegistered then -- Is user reg?
		-- Add to table
		if not Members[curUser.sName] then
			Members[curUser.sName].LastSeen = {os.date("%Y-%m-%d")}
		else
			Members[curUser.sName].LastSeen = os.date("%Y-%m-%d")
		end
		SaveToFile("Members.dat", Members, "Members") -- Save it
	end
end

OpDisconnected = UserDisconnected

-- Serialize by nErBoS
function Serialize(tTable, sTableName, sTab)
	assert(tTable, "tTable equals nil");
	assert(sTableName, "sTableName equals nil");
	assert(type(tTable) == "table", "tTable must be a table!");
	assert(type(sTableName) == "string", "sTableName must be a string!");
	sTab = sTab or "";
	sTmp = ""
	sTmp = sTmp..sTab..sTableName.." = {\n"
	for key, value in pairs(tTable) do
		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
		sTmp = sTmp..",\n"
	end
	sTmp = sTmp..sTab.."}"
	return sTmp
end

function SaveToFile(file , table , tablename)
	local handle = io.open(file,"w+")
	handle:write(Serialize(table, tablename))
	handle:flush()
	handle:close()
end

Let me know if they work...
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

Yahoo

getting error for script edited by NightLitch
[17:13] Syntax ...\scripts\membercount nit.lua:88: attempt to index field '?' (a nil value)
"BoRN FIGhTEr"

SMF spam blocked by CleanTalk