--[[
Userinfo Script [API 2] (5/03/08)
Made by speedX
Version 1.0
Description:
Adds userdata to database
You can find userinfo on input of command
]]--
tSettings = {
-- Bot Name
sBot = SetMan.GetString(21),
-- File Name
fFile = "userinfo.tbl",
-- Command
infocommand = "userinfo",
-- Permissions: 1 = Allow; 0 = Dont allow
Permission = {
[-1] = 0, -- Unreg Users
[0] = 1, -- Masters
[1] = 1, -- Operators
[2] = 0, -- VIPs
[3] = 0, -- Regs
}
}
function OnStartup()
if loadfile(tSettings.fFile) ~= nil then
dofile(tSettings.fFile)
else
UserDB = {}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
end
end
UserConnected = function(user)
Core.GetUserAllData(user)
UserDB[user.sNick] = {user.sIP or "N/A",user.sDescription or "N/A",user.sClient or "N/A",user.sClientVersion,user.sMode or "N/A",user.sTag or "N/A",user.iHubs or "N/A",user.iSlots or "N/A",user.sConnection or "N/A",user.sEmail or "N/A",user.iShareSize or "N/A",os.date()}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
Core.SendToNick(user.sNick,"$UserCommand 1 3 Get UserInfo$<%[mynick]> +userinfo %[line:Nick]||")
end
end
OpConnected,RegConnected = UserConnected,UserConnected
ChatArrival = function(user,data)
local _,_,data = string.find(data,"%b<>%s*(.*)|")
local _,_,cmd = string.find(data,"%p(%S+)")
if cmd then
if cmd:lower() == tSettings.infocommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,nick = string.find(data,"%p%S+ (%w+)")
if nick then
local tNick,sReg,border,msg,prof = CheckUser(nick),RegMan.GetReg(nick)
if sReg then
prof = ProfMan.GetProfile(sReg.iProfile).sProfileName
else
prof = "Unregistered"
end
if tNick then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for "..nick.." in database......")
border = "\r\n\t"..string.rep("=",50).."\r\n\t"
msg = border.."\t\tInfo on "..nick.."\r\n\t"..string.rep("-",100)
msg = msg.."\r\n\tName :\t\t"..nick
msg = msg.."\r\n\tIP :\t\t"..tNick[1]
msg = msg.."\r\n\tProfile :\t\t"..prof
msg = msg.."\r\n\tDescription :\t"..tNick[2]
msg = msg.."\r\n\tClient :\t\t"..tNick[3].." "..tNick[4]
msg = msg.."\r\n\tMode :\t\t"..tNick[5]
msg = msg.."\r\n\tTag :\t\t"..tNick[6]
msg = msg.."\r\n\tHubs :\t\t"..tNick[7]
msg = msg.."\r\n\tSlots :\t\t"..tNick[8]
msg = msg.."\r\n\tConnection :\t"..tNick[9]
msg = msg.."\r\n\tE-Mail :\t\t"..tNick[10]
msg = msg.."\r\n\tShare :\t\t"..ShareConverter(tNick[11])
if Core.GetUser(nick) then
msg = msg.."\r\n\tStatus :\t\tONLINE"
else
msg = msg.."\r\n\tStatus :\t\tOFFLINE"
msg = msg.."\r\n\tLastseen :\t"..tNick[12]
end
msg = msg..border
Core.SendPmToNick(user.sNick,tSettings.sBot,msg)
Clear()
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..nick.." is not in the database.")
return true
end
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Please specify a nick.")
return true
end
end
end
end
end
CheckUser = function(nick)
for i,_ in pairs(UserDB) do
if i:lower() == nick:lower() then
return UserDB[i]
end
end
end
ShareConverter = function(x)
if x < 1024 then
unit = "B"
elseif x < 1048576 then
x = x/1024
unit = "KB"
elseif x < 1073741824 then
x = x/1048576
unit = "MB"
elseif x < 1099511627776 then
x = x/1073741824
unit = "GB"
elseif x > 1099511627776 then
x = x/1099511627776
unit = "TB"
end
return string.format("%.2f "..unit,x)
end
Clear = function()
collectgarbage()
io.flush()
end
Save_Serialize = function(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(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
Save_Serialize(value, sKey, hFile, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
hFile:write( sTab.."\t"..sKey.." = "..sValue);
end
hFile:write( ",\n");
end
hFile:write( sTab.."}");
end
SaveToFile = function(file,table , tablename )
local hFile = io.open(file , "w")
Save_Serialize(table, tablename, hFile);
hFile:close()
Clear()
end
!userinfo nick --> <PtokaX> Please specify a nick. :o
Quote from: 11hh on 11 March, 2008, 04:21:52
!userinfo nick --> <PtokaX> Please specify a nick. :o
???
!userinfo nick --> [18:47] <PtokaX> nick is not in the database.
If I want the information to averyone who enjoy the hub ?? just to the user so he can see his information.
How can I do it ??
Quote from: osse on 24 March, 2008, 21:47:02
If I want the information to averyone who enjoy the hub ?? just to the user so he can see his information.
How can I do it ??
My Guess would be to change Line
Core.SendPmToNick(user.sNick,tSettings.sBot,msg)
to
Core.SendToAll(user.sNick,tSettings.sBot,msg)
but i'm no scripter so i might be wrong
Quote from: osse on 24 March, 2008, 21:47:02
If I want the information to averyone who enjoy the hub ?? just to the user so he can see his information.
How can I do it ??
You mean that everyuser in the hub should be able to see his own information??
Quote from: speedX on 25 March, 2008, 05:45:00
You mean that everyuser in the hub should be able to see his own information??
I mean When you enjoy the HUB your information ( IP , Nick, share, slots, client, Hub and more ) appear automatically just for the user who enjoy the HUB.
Thnx for answer.. and help ;D
Maybe you are looking for this kind of script then:
http://board.ptokax.ath.cx/index.php?topic=7379.0 (http://board.ptokax.ath.cx/index.php?topic=7379.0)
Thnx ......:D:D:D
It would be wonderful to implement ip search in the database... can it be possible?
Quote from: shardana on 07 April, 2008, 14:51:23
It would be wonderful to implement ip search in the database... can it be possible?
Yes, it will be added in next version....
Very good :) I attend it with anxiety. Thanks in advance!
Here, sorry for the delay. Post bugs if any....
--[[
Userinfo Script [API 2] (5/03/08)
Made by speedX
Version 1.1
--------------------------------------------
Changes:
Added: Command to search database with IP. (Requested by shardana)
--------------------------------------------
Description:
Adds userdata to database
You can find userinfo on input of command
]]--
tSettings = {
-- Bot Name
sBot = SetMan.GetString(21),
-- File Name
fFile = "userinfo.tbl",
-- Command
infocommand = "userinfo",
ipcommand = "userip",
-- Permissions: 1 = Allow; 0 = Dont allow
Permission = {
[-1] = 0, -- Unreg Users
[0] = 1, -- Masters
[1] = 1, -- Operators
[2] = 0, -- VIPs
[3] = 0, -- Regs
}
}
function OnStartup()
if loadfile(tSettings.fFile) ~= nil then
dofile(tSettings.fFile)
else
UserDB = {}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
end
end
UserConnected = function(user)
Core.GetUserAllData(user)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Welcome "..user.sNick..", speedX's UserInfo 1.1 is enabled. RightClick for menu.")
UserDB[user.sNick] = {user.sNick,user.sIP or "N/A",user.sDescription or "N/A",user.sClient or "N/A",user.sClientVersion,user.sMode or "N/A",user.sTag or "N/A",user.iHubs or "N/A",user.iSlots or "N/A",user.sConnection or "N/A",user.sEmail or "N/A",user.iShareSize or "N/A",os.date()}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserInfo$<%[mynick]> +"..tSettings.infocommand.." %[line:Nick]||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserIP$<%[mynick]> +"..tSettings.ipcommand.." %[line:IP]||")
end
end
OpConnected,RegConnected = UserConnected,UserConnected
ChatArrival = function(user,data)
local _,_,data = string.find(data,"%b<>%s*(.*)|")
local _,_,cmd = string.find(data,"%p(%S+)")
if cmd then
if cmd:lower() == tSettings.infocommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,nick = string.find(data,"%p%S+ (%S+)")
if nick then
local tNick = CheckUser(nick)
if tNick then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for "..nick.." in database......")
Core.SendPmToNick(user.sNick,tSettings.sBot,Data(nick,nil,tNick))
Clear()
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..nick.." is not in the database.")
return true
end
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Please specify a nick. Use +"..tSettings.infocommand.." <nick>")
return true
end
end
elseif cmd:lower() == tSettings.ipcommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,ip = string.find(data,"%p%S+ (%d+.%d+.%d+.%d+)")
local reply,msg = 0,""
if ip then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for IP "..ip.." in database......")
for i,v in pairs(UserDB) do
if v[2] == ip then
msg = msg.."\r\n"..Data(i,ip,v)
reply = reply + 1
end
end
Clear()
if reply == 0 then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> IP: "..ip.." is not in the database.")
else
Core.SendPmToNick(user.sNick,tSettings.sBot,msg)
end
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Invalid IP. Use +"..tSettings.ipcommand.." <ip>")
return true
end
end
end
end
end
Data = function(nick,ip,data)
local sReg,border,msg,prof = RegMan.GetReg(nick)
if sReg then
prof = ProfMan.GetProfile(sReg.iProfile).sProfileName
else
prof = "Unregistered"
end
border = "\r\n\t"..string.rep("=",50).."\r\n\t"
if ip then
msg = border.."\t\tInfo on IP: "..ip.."\r\n\t"..string.rep("-",100)
else
msg = border.."\t\tInfo on "..nick.."\r\n\t"..string.rep("-",100)
end
msg = msg.."\r\n\tName :\t\t"..data[1]
msg = msg.."\r\n\tIP :\t\t"..data[2]
msg = msg.."\r\n\tProfile :\t\t"..prof
msg = msg.."\r\n\tDescription :\t"..data[3]
msg = msg.."\r\n\tClient :\t\t"..data[4].." "..data[5]
msg = msg.."\r\n\tMode :\t\t"..data[6]
msg = msg.."\r\n\tTag :\t\t"..data[7]
msg = msg.."\r\n\tHubs :\t\t"..data[8]
msg = msg.."\r\n\tSlots :\t\t"..data[9]
msg = msg.."\r\n\tConnection :\t"..data[10]
msg = msg.."\r\n\tE-Mail :\t\t"..data[11]
msg = msg.."\r\n\tShare :\t\t"..ShareConverter(data[12])
if Core.GetUser(nick) then
msg = msg.."\r\n\tStatus :\t\tONLINE"
else
msg = msg.."\r\n\tStatus :\t\tOFFLINE"
msg = msg.."\r\n\tLastseen :\t"..data[13]
end
msg = msg..border
return msg
end
CheckUser = function(nick)
for i,_ in pairs(UserDB) do
if i:lower() == nick:lower() then
return UserDB[i]
end
end
end
ShareConverter = function(x)
if x < 1024 then
unit = "B"
elseif x < 1048576 then
x = x/1024
unit = "KB"
elseif x < 1073741824 then
x = x/1048576
unit = "MB"
elseif x < 1099511627776 then
x = x/1073741824
unit = "GB"
elseif x > 1099511627776 then
x = x/1099511627776
unit = "TB"
end
return string.format("%.2f "..unit,x)
end
Clear = function()
collectgarbage()
io.flush()
end
Save_Serialize = function(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(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
Save_Serialize(value, sKey, hFile, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
hFile:write( sTab.."\t"..sKey.." = "..sValue);
end
hFile:write( ",\n");
end
hFile:write( sTab.."}");
end
SaveToFile = function(file,table , tablename )
local hFile = io.open(file , "w")
Save_Serialize(table, tablename, hFile);
hFile:close()
Clear()
end
Very thanks. It works perfectly but...
if there are two or more users with the same ip.. the script finds only one of these users ..it could inform of the presence of...
Thanks in advance!
I've get this "Syntax UserInfo.lua:65:bad argument #1 to 'find' (string expected,got nil)".
I am getting this error
Error! - No User named [ username$MyINFO $ALL Bigmark owner of mayhem<++ V:0.706,M:A,H:0/1/12,S:2,L:84>$ $2$$554582566583$ ] online.
hm...When do u get that error??
--[[
Userinfo Script [API 2] (5/03/08)
Made by speedX
Version 1.2
--------------------------------------------
Changes:
Added: Command to search database with IP. (Requested by shardana)
Added: Shows info on user connect.
--------------------------------------------
Description:
Adds userdata to database
You can find userinfo on input of command
]]--
tSettings = {
-- Bot Name
sBot = SetMan.GetString(21),
-- Hub Name
sHub = SetMan.GetString(0),
-- File Name
fFile = "userinfo.tbl",
-- Command
infocommand = "userinfo",
ipcommand = "userip",
-- Show stats on Login?
bLogin = true,
-- Permissions: 1 = Allow; 0 = Dont allow
Permission = {
[-1] = 0, -- Unreg Users
[0] = 1, -- Masters
[1] = 1, -- Operators
[2] = 0, -- VIPs
[3] = 0, -- Regs
}
}
function OnStartup()
if loadfile(tSettings.fFile) ~= nil then
dofile(tSettings.fFile)
else
UserDB = {}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
end
end
UserConnected = function(user)
Core.GetUserAllData(user)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Welcome "..user.sNick..", speedX's UserInfo 1.2 is enabled. RightClick for menu.")
UserDB[user.sNick] = {user.sNick,user.sIP or "N/A",user.sDescription or "N/A",user.sClient or "N/A",user.sClientVersion,user.sMode or "N/A",user.sTag or "N/A",user.iHubs or "N/A",user.iSlots or "N/A",user.sConnection or "N/A",user.sEmail or "N/A",user.iShareSize or "N/A",os.date()}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
if tSettings.bLogin then
local border = "\r\n\t"..string.rep("=-",30).."\r\n\t"
local header = "Welcome to "..tSettings.sHub.."\r\n\t"..string.rep("=-",30)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..border..header..Data(user.sNick,nil,UserDB[user.sNick])..border)
end
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserInfo$<%[mynick]> +"..tSettings.infocommand.." %[line:Nick]||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserIP$<%[mynick]> +"..tSettings.ipcommand.." %[line:IP]||")
end
end
OpConnected,RegConnected = UserConnected,UserConnected
ChatArrival = function(user,data)
local _,_,cmd = string.find(data,"%b<> %p(%w+)")
if cmd then
if cmd:lower() == tSettings.infocommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,nick = string.find(data,"%b<> %p%w+ (%S+)|")
if nick then
local tNick = CheckUser(nick)
if tNick then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for "..nick.." in database......")
local border = "\r\n\t"..string.rep("=",50).."\r\n\t"
local header = "\t\tInfo on Nick: "..nick.."\r\n\t"..string.rep("-",100)
Core.SendPmToNick(user.sNick,tSettings.sBot,border..header..Data(nick,nil,tNick)..border)
Clear()
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..nick.." is not in the database.")
return true
end
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Please specify a nick. Use +"..tSettings.infocommand.." <nick>")
return true
end
end
elseif cmd:lower() == tSettings.ipcommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,ip = string.find(data,"%b<> %p%w+ (%d+.%d+.%d+.%d+)|")
local iCount,msg = 0,""
if ip then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for IP "..ip.." in database......")
for i,v in pairs(UserDB) do
if v[2] == ip then
msg = msg.."\r\n"..Data(i,ip,v)
iCount = iCount + 1
end
end
Clear()
if iCount == 0 then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> IP: "..ip.." is not in the database.")
else
local border = "\r\n\t"..string.rep("=",50).."\r\n\t"
local header = "\t\tInfo on IP: "..ip.."\r\n\t"..string.rep("-",100)
Core.SendPmToNick(user.sNick,tSettings.sBot,border..header..msg..border)
end
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Invalid IP. Use +"..tSettings.ipcommand.." <ip>")
return true
end
end
end
end
end
Data = function(nick,ip,data)
local sReg,msg,prof = RegMan.GetReg(nick),""
if sReg then
prof = ProfMan.GetProfile(sReg.iProfile).sProfileName
else
prof = "Unregistered"
end
msg = msg.."\r\n\tName :\t\t"..data[1]
msg = msg.."\r\n\tIP :\t\t"..data[2]
msg = msg.."\r\n\tProfile :\t\t"..prof
msg = msg.."\r\n\tDescription :\t"..data[3]
msg = msg.."\r\n\tClient :\t\t"..data[4].." "..data[5]
msg = msg.."\r\n\tMode :\t\t"..data[6]
msg = msg.."\r\n\tTag :\t\t"..data[7]
msg = msg.."\r\n\tHubs :\t\t"..data[8]
msg = msg.."\r\n\tSlots :\t\t"..data[9]
msg = msg.."\r\n\tConnection :\t"..data[10]
msg = msg.."\r\n\tE-Mail :\t\t"..data[11]
msg = msg.."\r\n\tShare :\t\t"..ShareConverter(data[12])
if Core.GetUser(nick) then
msg = msg.."\r\n\tStatus :\t\tONLINE"
else
msg = msg.."\r\n\tStatus :\t\tOFFLINE"
msg = msg.."\r\n\tLastseen :\t"..data[13]
end
return msg
end
CheckUser = function(nick)
for i,_ in pairs(UserDB) do
if i:lower() == nick:lower() then
return UserDB[i]
end
end
end
ShareConverter = function(x)
if x < 1024 then
unit = "B"
elseif x < 1048576 then
x = x/1024
unit = "KB"
elseif x < 1073741824 then
x = x/1048576
unit = "MB"
elseif x < 1099511627776 then
x = x/1073741824
unit = "GB"
elseif x > 1099511627776 then
x = x/1099511627776
unit = "TB"
end
return string.format("%.2f "..unit,x)
end
Clear = function()
collectgarbage()
io.flush()
end
Save_Serialize = function(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(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
Save_Serialize(value, sKey, hFile, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
hFile:write( sTab.."\t"..sKey.." = "..sValue);
end
hFile:write( ",\n");
end
hFile:write( sTab.."}");
end
SaveToFile = function(file,table , tablename )
local hFile = io.open(file , "w")
Save_Serialize(table, tablename, hFile);
hFile:close()
Clear()
end
Big thanks speedX. It works great on PtokaX 0.5.0.0! :yes:
P.S.
Unfortunately yesterday gave me this error:
[19:51:01] Syntax D:\0.5.0.0-Lua5.1.5-x64\scripts\UserInfo v.1.2.lua:137: attempt to concatenate field '?' (a nil value)
Can anyone fix this and help me please?
Thanks in advance!
:yes:
Fixed the possible null value. Hope this version works for you.
--[[
Userinfo Script [API 2] (5/03/08)
Made by speedX
Version 1.3
--------------------------------------------
Changes:
Added: Command to search database with IP. (Requested by shardana)
Added: Shows info on user connect.
Fixed: Possible null field value.
--------------------------------------------
Description:
Adds userdata to database
You can find userinfo on input of command
]]--
tSettings = {
-- Bot Name
sBot = SetMan.GetString(21),
-- Hub Name
sHub = SetMan.GetString(0),
-- File Name
fFile = "userinfo.tbl",
-- Command
infocommand = "userinfo",
ipcommand = "userip",
-- Show stats on Login?
bLogin = true,
-- Permissions: 1 = Allow; 0 = Dont allow
Permission = {
[-1] = 0, -- Unreg Users
[0] = 1, -- Masters
[1] = 1, -- Operators
[2] = 0, -- VIPs
[3] = 0, -- Regs
}
}
function OnStartup()
if loadfile(tSettings.fFile) ~= nil then
dofile(tSettings.fFile)
else
UserDB = {}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
end
end
UserConnected = function(user)
Core.GetUserAllData(user)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Welcome "..user.sNick..", speedX's UserInfo 1.2 is enabled. RightClick for menu.")
UserDB[user.sNick] = {user.sNick,user.sIP or "N/A",user.sDescription or "N/A",user.sClient or "N/A",user.sClientVersion or "N/A",user.sMode or "N/A",user.sTag or "N/A",user.iHubs or "N/A",user.iSlots or "N/A",user.sConnection or "N/A",user.sEmail or "N/A",user.iShareSize or "N/A",os.date()}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
if tSettings.bLogin then
local border = "\r\n\t"..string.rep("=-",30).."\r\n\t"
local header = "Welcome to "..tSettings.sHub.."\r\n\t"..string.rep("=-",30)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..border..header..Data(user.sNick,nil,UserDB[user.sNick])..border)
end
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserInfo$<%[mynick]> +"..tSettings.infocommand.." %[line:Nick]||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserIP$<%[mynick]> +"..tSettings.ipcommand.." %[line:IP]||")
end
end
OpConnected,RegConnected = UserConnected,UserConnected
ChatArrival = function(user,data)
local _,_,cmd = string.find(data,"%b<> %p(%w+)")
if cmd then
if cmd:lower() == tSettings.infocommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,nick = string.find(data,"%b<> %p%w+ (%S+)|")
if nick then
local tNick = CheckUser(nick)
if tNick then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for "..nick.." in database......")
local border = "\r\n\t"..string.rep("=",50).."\r\n\t"
local header = "\t\tInfo on Nick: "..nick.."\r\n\t"..string.rep("-",100)
Core.SendPmToNick(user.sNick,tSettings.sBot,border..header..Data(nick,nil,tNick)..border)
Clear()
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..nick.." is not in the database.")
return true
end
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Please specify a nick. Use +"..tSettings.infocommand.." <nick>")
return true
end
end
elseif cmd:lower() == tSettings.ipcommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,ip = string.find(data,"%b<> %p%w+ (%d+.%d+.%d+.%d+)|")
local iCount,msg = 0,""
if ip then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for IP "..ip.." in database......")
for i,v in pairs(UserDB) do
if v[2] == ip then
msg = msg.."\r\n"..Data(i,ip,v)
iCount = iCount + 1
end
end
Clear()
if iCount == 0 then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> IP: "..ip.." is not in the database.")
else
local border = "\r\n\t"..string.rep("=",50).."\r\n\t"
local header = "\t\tInfo on IP: "..ip.."\r\n\t"..string.rep("-",100)
Core.SendPmToNick(user.sNick,tSettings.sBot,border..header..msg..border)
end
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Invalid IP. Use +"..tSettings.ipcommand.." <ip>")
return true
end
end
end
end
end
Data = function(nick,ip,data)
local sReg,msg,prof = RegMan.GetReg(nick),""
if sReg then
prof = ProfMan.GetProfile(sReg.iProfile).sProfileName
else
prof = "Unregistered"
end
msg = msg.."\r\n\tName :\t\t"..data[1]
msg = msg.."\r\n\tIP :\t\t"..data[2]
msg = msg.."\r\n\tProfile :\t\t"..prof
msg = msg.."\r\n\tDescription :\t"..data[3]
msg = msg.."\r\n\tClient :\t\t"..data[4].." "..data[5]
msg = msg.."\r\n\tMode :\t\t"..data[6]
msg = msg.."\r\n\tTag :\t\t"..data[7]
msg = msg.."\r\n\tHubs :\t\t"..data[8]
msg = msg.."\r\n\tSlots :\t\t"..data[9]
msg = msg.."\r\n\tConnection :\t"..data[10]
msg = msg.."\r\n\tE-Mail :\t\t"..data[11]
msg = msg.."\r\n\tShare :\t\t"..ShareConverter(data[12])
if Core.GetUser(nick) then
msg = msg.."\r\n\tStatus :\t\tONLINE"
else
msg = msg.."\r\n\tStatus :\t\tOFFLINE"
msg = msg.."\r\n\tLastseen :\t"..data[13]
end
return msg
end
CheckUser = function(nick)
for i,_ in pairs(UserDB) do
if i:lower() == nick:lower() then
return UserDB[i]
end
end
end
ShareConverter = function(x)
if x < 1024 then
unit = "B"
elseif x < 1048576 then
x = x/1024
unit = "KB"
elseif x < 1073741824 then
x = x/1048576
unit = "MB"
elseif x < 1099511627776 then
x = x/1073741824
unit = "GB"
elseif x > 1099511627776 then
x = x/1099511627776
unit = "TB"
end
return string.format("%.2f "..unit,x)
end
Clear = function()
collectgarbage()
io.flush()
end
Save_Serialize = function(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(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
Save_Serialize(value, sKey, hFile, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
hFile:write( sTab.."\t"..sKey.." = "..sValue);
end
hFile:write( ",\n");
end
hFile:write( sTab.."}");
end
SaveToFile = function(file,table , tablename )
local hFile = io.open(file , "w")
Save_Serialize(table, tablename, hFile);
hFile:close()
Clear()
end
Thanks speedX :D
I have made little changes, because the right click menu don't work for me. Here is it:
--[[
Userinfo Script [API 2] (5/03/08)
Made by speedX
Version 1.3
--------------------------------------------
Changes:
Added: Command to search database with IP. (Requested by shardana)
Added: Shows info on user connect.
Fixed: Possible null field value.
--------------------------------------------
Description:
Adds userdata to database
You can find userinfo on input of command
]]--
tSettings = {
-- Bot Name
sBot = SetMan.GetString(21),
-- Hub Name
sHub = SetMan.GetString(0),
-- File Name
fFile = "userinfo.tbl",
-- Command
infocommand = "userinfo",
ipcommand = "userip",
-- Show stats on Login?
bLogin = true,
-- Permissions: 1 = Allow; 0 = Dont allow
Permission = {
[-1] = 0, -- Unreg Users
[0] = 1, -- Masters
[1] = 1, -- Operators
[2] = 0, -- VIPs
[3] = 0, -- Regs
}
}
function OnStartup()
if loadfile(tSettings.fFile) ~= nil then
dofile(tSettings.fFile)
else
UserDB = {}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
end
end
UserConnected = function(user)
Core.GetUserAllData(user)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Welcome "..user.sNick..", speedX's UserInfo 1.2 is enabled. RightClick for menu.")
UserDB[user.sNick] = {user.sNick,user.sIP or "N/A",user.sDescription or "N/A",user.sClient or "N/A",user.sClientVersion or "N/A",user.sMode or "N/A",user.sTag or "N/A",user.iHubs or "N/A",user.iSlots or "N/A",user.sConnection or "N/A",user.sEmail or "N/A",user.iShareSize or "N/A",os.date()}
SaveToFile(tSettings.fFile,UserDB,"UserDB")
if tSettings.bLogin then
local border = "\r\n\t"..string.rep("=-",30).."\r\n\t"
local header = "Welcome to "..tSettings.sHub.."\r\n\t"..string.rep("=-",30)
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..border..header..Data(user.sNick,nil,UserDB[user.sNick])..border)
end
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserInfo$<%[mynick]> +"..tSettings.infocommand.." %[line:Nick]||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 UserInfo\\Get UserIP$<%[mynick]> +"..tSettings.ipcommand.." %[line:IP]||")
end
end
OpConnected,RegConnected = UserConnected,UserConnected
ChatArrival = function(user,data)
local _,_,cmd = string.find(data,"%b<> %p(%w+)")
if cmd then
if cmd:lower() == tSettings.infocommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,nick = string.find(data,"%b<> %p%w+ (%S+)|")
if nick then
local tNick = CheckUser(nick)
if tNick then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for "..nick.." in database......")
local border = "\r\n\t"..string.rep("=",50).."\r\n\t"
local header = "\t\tInfo on Nick: "..nick.."\r\n\t"..string.rep("-",100)
Core.SendPmToNick(user.sNick,tSettings.sBot,border..header..Data(nick,nil,tNick)..border)
Clear()
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> "..nick.." is not in the database.")
return true
end
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Please specify a nick. Use +"..tSettings.infocommand.." <nick>")
return true
end
end
elseif cmd:lower() == tSettings.ipcommand then
if tSettings.Permission[user.iProfile] and tSettings.Permission[user.iProfile] == 1 then
local _,_,ip = string.find(data,"%b<> %p%w+ (%d+.%d+.%d+.%d+)|")
local iCount,msg = 0,""
if ip then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Searching for IP "..ip.." in database......")
for i,v in pairs(UserDB) do
if v[2] == ip then
msg = msg.."\r\n"..Data(i,ip,v)
iCount = iCount + 1
end
end
Clear()
if iCount == 0 then
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> IP: "..ip.." is not in the database.")
else
local border = "\r\n\t"..string.rep("=",50).."\r\n\t"
local header = "\t\tInfo on IP: "..ip.."\r\n\t"..string.rep("-",100)
Core.SendPmToNick(user.sNick,tSettings.sBot,border..header..msg..border)
end
return true
else
Core.SendToNick(user.sNick,"<"..tSettings.sBot.."> Invalid IP. Use +"..tSettings.ipcommand.." <ip>")
return true
end
end
end
end
end
Data = function(nick,ip,data)
local sReg,msg,prof = RegMan.GetReg(nick),""
if sReg then
prof = ProfMan.GetProfile(sReg.iProfile).sProfileName
else
prof = "Unregistered"
end
msg = msg.."\r\n\tName :\t\t"..data[1]
msg = msg.."\r\n\tIP :\t\t"..data[2]
msg = msg.."\r\n\tProfile :\t\t"..prof
msg = msg.."\r\n\tDescription :\t"..data[3]
msg = msg.."\r\n\tClient :\t\t"..data[4].." "..data[5]
msg = msg.."\r\n\tMode :\t\t"..data[6]
msg = msg.."\r\n\tTag :\t\t"..data[7]
msg = msg.."\r\n\tHubs :\t\t"..data[8]
msg = msg.."\r\n\tSlots :\t\t"..data[9]
msg = msg.."\r\n\tConnection :\t"..data[10]
msg = msg.."\r\n\tE-Mail :\t\t"..data[11]
msg = msg.."\r\n\tShare :\t\t"..ShareConverter(data[12])
if Core.GetUser(nick) then
msg = msg.."\r\n\tStatus :\t\tONLINE"
else
msg = msg.."\r\n\tStatus :\t\tOFFLINE"
msg = msg.."\r\n\tLastseen :\t"..data[13]
end
return msg
end
CheckUser = function(nick)
for i,_ in pairs(UserDB) do
if i:lower() == nick:lower() then
return UserDB[i]
end
end
end
ShareConverter = function(x)
if x < 1024 then
unit = "B"
elseif x < 1048576 then
x = x/1024
unit = "KB"
elseif x < 1073741824 then
x = x/1048576
unit = "MB"
elseif x < 1099511627776 then
x = x/1073741824
unit = "GB"
elseif x > 1099511627776 then
x = x/1099511627776
unit = "TB"
end
return string.format("%.2f "..unit,x)
end
Clear = function()
collectgarbage()
io.flush()
end
Save_Serialize = function(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(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
Save_Serialize(value, sKey, hFile, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
hFile:write( sTab.."\t"..sKey.." = "..sValue);
end
hFile:write( ",\n");
end
hFile:write( sTab.."}");
end
SaveToFile = function(file,table , tablename )
local hFile = io.open(file , "w")
Save_Serialize(table, tablename, hFile);
hFile:close()
Clear()
end
Will try it. Now waiting for the problematic user in the hub and will tell you how it works! :D ;)
P.S After few days of testing, it's work perfectly on PX 5.0.2 - LUA 5.1.5 :yes:
Big thanks speedX and cheers!
Is there a way that the script displays Size of exact share in bytes (from MyInfo string)?
yes, change ..ShareConverter(data[12]) into ..data[12]
Thanks the-master :) Will try it and respond. :yes: