PtokaX forum

Archive => Archived 5.1 boards => Finished Scripts => Topic started by: Creative on 31 March, 2006, 16:33:27

Title: membercount script
Post by: Creative 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????
Title: Re: membercount script
Post by: Markitos on 03 April, 2006, 09:15:15
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...
Title: Re: membercount script
Post by: jiten on 03 April, 2006, 11:50:42
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
Title: Re: membercount script
Post by: 6Marilyn6Manson6 on 03 April, 2006, 13:57:05
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
Title: Re: membercount script
Post by: jiten on 03 April, 2006, 14:36:18
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.
Title: Re: membercount script
Post by: 6Marilyn6Manson6 on 03 April, 2006, 15:09:22
--[[
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
Title: Re: membercount script
Post by: Markitos on 03 April, 2006, 17:42:19
Quote459 visited in last 24 hrs
How should i do it???
Title: Re: membercount script
Post by: Madman on 03 April, 2006, 19:08:45
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
Title: Re: membercount script
Post by: 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)
Title: Re: membercount script
Post by: Markitos on 03 April, 2006, 20:05:30
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
Title: Re: membercount script
Post by: 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..
Title: Re: membercount script
Post by: Markitos on 04 April, 2006, 08:47:23
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)
Title: Re: membercount script
Post by: Madman on 04 April, 2006, 15:11:52
That's an error i can understand... =)
Script fixed and updated...
Title: Re: membercount script
Post by: Markitos on 04 April, 2006, 19:16:43
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
Title: Re: membercount script
Post by: Yahoo on 16 March, 2007, 09:28:03
-- 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
Title: Re: membercount script
Post by: 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
Title: Re: membercount script
Post by: 6Marilyn6Manson6 on 18 March, 2007, 12:48:46
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?
Title: Re: membercount script
Post by: Yahoo on 18 March, 2007, 14:13:01
i am also getting the same errors and i am using Version=0.3.5.2 of ptokax
Title: Re: membercount script
Post by: Madman on 18 March, 2007, 15:44:54
Code (lua) Select

-- 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...
Title: Re: membercount script
Post by: Yahoo on 18 March, 2007, 18:03:58
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)
Title: Re: membercount script
Post by: Madman on 18 March, 2007, 21:50:50
The script only has 143 lines...
Title: Re: membercount script
Post by: 6Marilyn6Manson6 on 18 March, 2007, 22:12:12
Quote from: Madman on 18 March, 2007, 21:50:50
The script only has 143 lines...

LooL
Title: Re: membercount script
Post by: Yahoo on 28 March, 2007, 19:17:42
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...
Title: Re: membercount script
Post by: Madman on 31 March, 2007, 01:11:54
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...
Title: Re: membercount script
Post by: Yahoo on 03 April, 2007, 14:28:23
getting error for script edited by NightLitch
[17:13] Syntax ...\scripts\membercount nit.lua:88: attempt to index field '?' (a nil value)
Title: Re: membercount script
Post by: achiever on 08 April, 2007, 17:19:12
hi ppl,

i m just getting this on command +membercount

[20:37:04] * achievermbercount

lol, thats the result with mutor's script

and with the script above that i get to c some users less than actually in my hub i can c thru ptokax.
when i got this,
[20:23:25] <Fusion> 846 registered users, 73 active, 0 visited the hub in last 24 hrs, 88 currently online

there were 102 users in my hub.

plzz have a look,
thks,
achiever.
Title: Re: membercount script
Post by: achiever on 10 April, 2007, 12:50:02
hi,

Quote from: Mutor on 08 April, 2007, 20:42:23
a double pipe will cure it's inability
to  process commands as it should.

i did not understand you. kindly explain.

thks,
achiever.
Title: Re: membercount script
Post by: achiever on 11 April, 2007, 18:56:45
Quote from: Mutor on 11 April, 2007, 18:44:50
Guy, thats the only script I've written for this, and indeed is the one I posted
previously in this topic. This only leaves the question which one were you talking about?

well i was saying about this
Quote from: Madman on 31 March, 2007, 01:11:54
Here's a mod from our Master Mutor ;)
Let me know if they work...
this scipt moded by u.

lol my mistake, i m deleting the code i posted.

thks,
Title: Re: membercount script
Post by: achiever on 18 April, 2007, 18:40:02
can u plzz add right click commands
Title: Re: membercount script
Post by: achiever on 19 April, 2007, 16:24:55
yes i m talking about ur scripts i m not getting ne right click commands, does it needs to be enabled for ops?
when i try +getuser achiever it shows me
Quote[19:45:33] <Fusion>

   ??????????????????????????????????????????????????????????????????????????????????????????
   Listing 1 logged users for Fusion Hub         04/19/07      07:45:00 pm

   ??????????????????????????????????????????????????????????????????????????????????????????
   achiever                              profile: master               status:  _offline_ for: 2 hours, 50 mins

   ??????????????????????????????????????????????????????????????????????????????????????????

it should have been online, i think this error is only for master.
Title: Re: membercount script
Post by: achiever on 20 April, 2007, 10:16:21
i m usuing strong dc++ is it not a good client to use? then plzz suggest 1.
the problem i have reported is still present. if i try checking ne master's status then it shows me the opposite of what it should be, i.e if the person is online it shows ofline and vise versa.
u kno ur scripts best but i say what i c on my hub.

regards,
Title: Re: membercount script
Post by: Psycho_Chihuahua on 20 April, 2007, 14:28:08
Give CZDC (http://www.czdc.org/CZDC/CZDC-0699%5BA1%5D.7z) a try - seeming though PtokaX as well as CZDC are programmed by PPK it should run fine
Title: Re: membercount script
Post by: achiever on 04 May, 2007, 13:10:14
thks for the help
mutor i think the part
QuoteFusion Hub received 0 visitors in the past day.
is not working, as is it not counting the number of visitors.
plzz check if its with me only or an error in the script.

thks,
Title: Re: membercount script
Post by: achiever on 05 May, 2007, 10:11:53
thks a lot.
Title: Re: membercount script
Post by: deadlydevil316 on 17 May, 2007, 15:23:56
 hello mutor,
this is a gr8 script.
can you please also make theoutput look like this *** 1317 registered users,  231 visited the hub in last 24 hrs, 144 currently online.

thanks for helping
Title: Re: membercount script
Post by: Yahoo on 17 May, 2007, 16:44:43
deadlydevil316 the script demanded by u is already available on the forum and in this post only i think it is on the 1st page of this post
Title: Re: membercount script
Post by: achiever on 17 May, 2007, 17:01:24
i think that scipt is not working properly. it was giving me an error c previous page.
Title: Re: membercount script
Post by: Yahoo on 17 May, 2007, 17:22:41
i am also using the ssame script but i am not facing any problem
Title: Re: membercount script
Post by: achiever on 17 May, 2007, 17:26:59
oh yes that was same with me, but i get that error after some days.
so i started use mutor's script its too much informative.
Title: Re: membercount script
Post by: Psycho_Chihuahua on 17 May, 2007, 18:05:43
works fine here

Online User Stats
???????????????
Passive = 21
Total = 44
Active = 23
Unregged = 40
User = 41
Regged = 4
Operator = 3

???????????????
05/17/07
05:56:00 pm

???????????????
Title: Re: membercount script
Post by: achiever on 17 May, 2007, 18:34:34
yes, thats mutor's script try the other 1 plzz
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...
even u yahoo had reported that bug
Title: Re: membercount script
Post by: Yahoo on 17 May, 2007, 18:55:38
i had reported it earlier but now i am not facing any problem it is working fine frm last 15days
Title: Re: membercount script
Post by: achiever on 19 June, 2007, 19:24:39
i stoped using it after mutor posted his version
hi mutor,

i was just checking the user stats which showed
QuoteMy Hub received 838 visitors in the past day.
and logged users shown is
QuoteListing [ 838 ] logged users for My Hub
but in the logged users there r users who r online currently.
thats fine in logged users but then the number of vistors should be different than the logged user by the currently online users.
as the number of vistors should be number of ppl who has logged in and out already, weather once twice or ne number of times in the given period, counted ones only.

or m i thinking wrong?

thks,
achiever.