PtokaX forum

Development Section => Your Developing Problems => Topic started by: nErBoS on 27 February, 2004, 02:27:48

Title: Userinfo with tables....
Post by: nErBoS on 27 February, 2004, 02:27:48
Hi all,

Help me out here..

Recently i have changed my userinfo to work with tables but sometimes i get this error....

Syntax Error: attempt to concat a nil value

I have been working on it but can find anything wrong
Here is the function..

function UserInfo(user, data)
GetArgML(data)
local msg = ""
local log = "Base-Dados/UserInfo/"..arg..".info"
local file = readfrom(log)
local user = GetItemByName(arg)
if (user == nil) then
if (file == nil) then
msg = msg.."N?o existe informa??o sobre "..arg.." na Base de Dados do Hub !"
else
msg = ShowInfo(user, data)
end
else
LoadFromFile(log)
in = info["in"]
out = info["out"]
ban = info["ban"]
cban = info["cban"]
kick = info["kick"]
ckick = info["ckick"]
msg = msg.."Informa??o sobre o utilizador: "..user.sName.." em "..GetTime().."\r\n\r\n"
CONECTADO[user.sName] = "Sim"
msg = msg.."Conectado:\t"..CONECTADO[user.sName]
if (user.bOperator) then
OP[user.sName] = "Sim"
msg = msg.."\r\nOperador:\t\t"..OP[user.sName]
else
OP[user.sName] = "N?o"
msg = msg.."\r\nOperador:\t\t"..OP[user.sName]
end
if (GetProfileName(user.iProfile) == "VIP") then
VIP[user.sName] = "Sim"
msg = msg.."\r\nVip:\t\t"..VIP[user.sName]
else
VIP[user.sName] = "N?o"
msg = msg.."\r\nVip:\t\t"..VIP[user.sName]
end
IP[user.sName] = user.sIP
msg = msg.."\r\nIP:\t\t"..IP[user.sName]
if (IN[user.sName] == nil) then
if (file == nil or in == nil) then
IN[user.sName] = "Nenhuma"
msg = msg.."\r\nUltima Entrada:\t"..IN[user.sName]
else
IN[user.sName] =  in
msg = msg.."\r\nUltimo Entrada:\t"..IN[user.sName]
end
else
msg = msg.."\r\nUltimo Entrada:\t"..IN[user.sName]
end
if (OUT[user.sName] == nil) then
if (file == nil or out == nil) then
OUT[user.sName] = "Nenhuma"
msg = msg.."\r\nUltima Saida:\t"..OUT[user.sName]
else
OUT[user.sName] = out
msg = msg.."\r\nUltimo Saida:\t"..OUT[user.sName]
end
else
msg = msg.."\r\nUltimo Entrada:\t"..OUT[user.sName]
end
_,b, ver = strfind(user.sMyInfoString,"V:(.*),M:")
if (strfind(user.sMyInfoString,"PTDC++")) then
_,b, ptdc = strfind(user.sMyInfoString,"PT:(%x+.%x+)")
CLIENTE[user.sName]= "ptDC"
VERSAO[user.sName] = ptdc
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
elseif strfind(user.sMyInfoString," CLIENTE[user.sName]= "oDC"
VERSAO[user.sName] = ver
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
elseif strfind(user.sMyInfoString,"L:") or strfind(user.sMyInfoString,"B:") then
if (strfind(user.sMyInfoString,"<++")) then
local _,b, ptdc2 = strfind(user.sMyInfoString,"<++")
CLIENTE[user.sName]= "ptDC"
VERSAO[user.sName] = ptdc2
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
else
CLIENTE[user.sName]= "BCDC++"
VERSAO[user.sName] = ver
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
end
elseif (strfind(user.sMyInfoString,"<++")) then
local _,b, ptdc2 = strfind(user.sMyInfoString,"<++")
CLIENTE[user.sName]= "ptDC"
VERSAO[user.sName] = ptdc2
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
elseif (strfind(user.sMyInfoString," CLIENTE[user.sName]= "DCGUI"
VERSAO[user.sName] = ver
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
elseif (strfind(user.sMyInfoString," CLIENTE[user.sName]= "DCPRO"
VERSAO[user.sName] = ver
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
elseif (strfind(user.sMyInfoString,"<+")) then
CLIENTE[user.sName]= "DC++"
VERSAO[user.sName] = ver
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
else
CLIENTE[user.sName]= "Cliente NMDC ou DCGUI com a tag desactivada"
VERSAO[user.sName] = "Sem Vers?o"
msg = msg.."\r\nCliente:\t\t"..CLIENTE[user.sName]
msg = msg.."\r\nVers?o:\t\t"..VERSAO[user.sName]
end
if strfind(user.sMyInfoString,"M:A") then
MODO[user.sName] = "Activo"
msg = msg.."\r\nModo:\t\t"..MODO[user.sName]
elseif strfind(user.sMyInfoString,"M:P") then
msg = msg.."\r\nModo:\t\t"..MODO[user.sName]
MODO[user.sName] = "Passivo"
end
local _,b, guest = strfind(user.sMyInfoString,"H:(%x+)/")
if guest == nil then
local _,b, hubs = strfind(user.sMyInfoString,"H:(%x+)")
if hubs ~= nil then
HUBS[user.sName] = hubs
msg = msg.."\r\nHubs:\t\t"..HUBS[user.sName]
end
else
local _,b, regged = strfind(user.sMyInfoString,"H:%x+/(%x+)/")
local _,b, opped = strfind(user.sMyInfoString,"H:%x+/%x+/(%x+)")
if regged ~= nil then
HUBS[user.sName] = guest.."/"..regged.."/"..opped
msg = msg.."\r\nHubs:\t\t"..HUBS[user.sName]
end
end
local _,b, slots = strfind(user.sMyInfoString,"S:(%x+)")
SLOTS[user.sName] = slots
if strfind(user.sMyInfoString,"L:") or strfind(user.sMyInfoString,"B:") then
local _,b, limiter = strfind(user.sMyInfoString,"B:(%x+)")
if limiter == nil then
local _,b, limiter = strfind(user.sMyInfoString,"L:(%x+)")
if limiter == nil then
local _,b, limiter = strfind(user.sMyInfoString,"U:(%x+)")
if limiter == nil or limiter == "*" then
end
end
end
if tonumber(limiter) ~= nil then
if strlen(limiter) > 4 then
limiter = limiter / 1024
end
LIMITADOR[user.sName] = limiter.." Kb/s"
msg = msg.."\r\nLimitador:\t\t"..LIMITADOR[user.sName]
end
else
LIMITADOR[user.sName] = "Sem Limitador"
msg = msg.."\r\nLimitador:\t\t"..LIMITADOR[user.sName]
end
if strfind(user.sMyInfoString,"D:(%x+)") then
local _,b, dlimiter = strfind(user.sMyInfoString,"D:(%x+)")
if dlimiter ~= nil then
LIMITADOR[user.sName] = dlimiter.." Kb/s"
msg = msg.."\r\nLimitador:\t\t"..LIMITADOR[user.sName]
else
LIMITADOR[user.sName] = "Sem Limitador"
msg = msg.."\r\nLimitador:\t\t"..LIMITADOR[user.sName]
end
end
local s,e,description,speed,email,share = strfind(user.sMyInfoString, "$MyINFO $ALL ([^$]+)$ $([^$]*)$([^$]*)$([^$]+)")
if email == "" or email == nil then
MAIL[user.sName] = "Sem Mail"
msg = msg.."\r\nMail:\t\t"..MAIL[user.sName]
else
MAIL[user.sName] = email
msg = msg.."\r\nMail:\t\t"..MAIL[user.sName]
end
if description == "" or description == nil then
DESCRICAO[user.sName] = "Sem Descri??o"
msg = msg.."\r\nDescri??o:\t"..DESCRICAO[user.sName]
else
description = strsub(description, strlen(user.sName) + 1, strlen(description))
DESCRICAO[user.sName] = description
msg = msg.."\r\nDescri??o:\t"..DESCRICAO[user.sName]
end
if share == "" or share == nil then
SHARE[user.sName] = "Sem Partilha"
msg = msg.."\r\nPartilha:\t\t"..SHARE[user.sName]
else
share = share / (1024*1024*1024)
SHARE[user.sName] = share.." GB"
msg = msg.."\r\nPartilha:\t\t"..SHARE[user.sName]
end
if speed == "" or speed == nil then
LIGACAO[user.sName] = "Sem Liga??o"
msg = msg.."\r\nLiga??o:\t\t"..LIGACAO[user.sName]
else
speed = strsub(speed,1,strlen(speed)-1)
LIGACAO[user.sName] = speed
msg = msg.."\r\nLiga??o:\t\t"..LIGACAO[user.sName]
end
if (BAN[user.sName] == nil) then
if (file == nil or ban == nil) then
BAN[user.sName] = "Nenhum"
msg = msg.."\r\nUltimo Ban:\t"..BAN[user.sName]
else
BAN[user.sName] = ban
msg = msg.."\r\nUltimo Ban:\t"..BAN[user.sName]
end
else
msg = msg.."\r\nUltimo Ban:\t"..BAN[user.sName]
end
if (CBAN[user.sName] == nil) then
if(file == nil or cban == nil) then
CBAN[user.sName] = 0
msg = msg.."\r\nVezes Banido:\t"..CBAN[user.sName]
else
CBAN[user.sName] = cban
msg = msg.."\r\nVezes Banido:\t"..CBAN[user.sName]
end
else
cban = tonumber(cban)
CBAN[user.sName] = CBAN[user.sName] + cban
msg = msg.."\r\nVezes Banido:\t"..CBAN[user.sName]
end
if (KICK[user.sName] == nil) then
if (file == nil or kick == nil) then
KICK[user.sName] = "Nenhum"
msg = msg.."\r\nUltimo Kick:\t"..KICK[user.sName]
else
KICK[user.sName] = kick
msg = msg.."\r\nUltimo Kick:\t"..KICK[user.sName]
end
else
msg = msg.."\r\nUltimo Kick:\t"..KICK[user.sName]
end
if (CKICK[user.sName] == nil) then
if(file == nil or ckick == nil) then
CKICK[user.sName] = 0
msg = msg.."\r\nVezes Kickado:\t"..CKICK[user.sName]
else
CKICK[user.sName] = ckick
msg = msg.."\r\nVezes Kickado:\t"..CKICK[user.sName]
end
else
ckick = tonumber(ckick)
CKICK[user.sName] = CKICK[user.sName] + ckick
msg = msg.."\r\nVezes Kickado:\t"..CBAN[user.sName]
end
msg = msg.."\r\n"
info = {
cnt = CONECTADO[user.sName],
op = OP[user.sName],
vip = VIP[user.sName],
in = IN[user.sName],
out = OUT[user.sName],
clt = CLIENTE[user.sName],
vrs = VERSAO[user.sName],
modo = MODO[user.sName],
hb = HUBS[user.sName],
slt = SLOTS[user.sName],
lim = LIMITADOR[user.sName],
mail = MAIL[user.sName],
desc = DESCRICAO[user.sName],
shr = SHARE[user.sName],
lig = LIGACAO[user.sName],
kick = KICK[user.sName],
ckick = CKICK[user.sName],
ban = BAN[user.sName],
cban = CBAN[user.sName]
}
WriteTable(info,"info",log)
end
return msg
end

Its a little messy :P

Best regards, nErBoS
Title:
Post by: nErBoS on 27 February, 2004, 02:51:11
Hi,

This function works when called to all users, is failing in passive users using DC++ 0.305.

Don't know why :(
Title:
Post by: nErBoS on 27 February, 2004, 14:52:11
Hi,

Never mind doing this with no sleep doesn?t work :)
found the problem..

elseif strfind(user.sMyInfoString,"M:P") then
msg = msg.."\r\nModo:\t\t"..MODO[user.sName]
MODO[user.sName] = "Passivo"
end

should be like this..
elseif strfind(user.sMyInfoString,"M:P") then
MODO[user.sName] = "Passivo"
msg = msg.."\r\nModo:\t\t"..MODO[user.sName]
end

Best regards, nErBoS