Автор: Wariner 14.12.2008, 19:53
Во первых найди разницу:
твой вариант
Код
dofile(frmHub:GetPtokaXLocation().."scripts/old_api.lu")
sBot = SetMan.GetString(21)
sLeft = Core.GetPtokaXPath().."scripts/Left/LeftUser.tbl"
tLeft = {}
function Core.OnStartup()
if loadfile(sLeft) then
dofile(sLeft)
end
end
function Core.UserConnected(tUser)
Core.SendToUser(tUser, "$UserCommand 1 3 Автоответчик на чат\\Ушёл$<%[mynick]> !left %[line:Введите сообщение об уходе]|")
Core.SendToUser(tUser, "$UserCommand 1 3 Автоответчик на чат\\Пришёл$<%[mynick]> !leftdel |")
end
Core.OpConnected = Core.UserConnected
Core.RegConnected = Core.UserConnected
function Main()
tProfile = {
[0]=0, -- Мастер
[1]=0, -- Оператор
[2]=1, -- VIP
[3]=1, -- Зарегистрированный пользователь
[4]=1, -- SuperVIP
[-1]=1, -- Незарегистрированный пользователь
}
end
function Core.ChatArrival(tUser, sData)
if tProfile[tUser.iProfile] == 1 then
sData = string.sub(sData,1,-2)
local _,_,cmd = string.find(sData, "%b<>%s+(%S+)")
if cmd == "!left" then
if not tLeft[tUser.sNick] then
local _,_,msg = string.find(sData, "%b<>%s+%S+%s+(.+)")
tLeft[tUser.sNick] = msg
WriteTable(tLeft, "tLeft", sLeft)
Core.SendToUser(tUser, "<"..sBot.."> Режиме \"ушёл\" удачно установлен.")
else
Core.SendToUser(tUser, "<"..sBot.."> Вы уже в режиме \"ушёл\".")
end
return true
end
if cmd == "!leftdel" then
if tLeft[tUser.sNick] then
tLeft[tUser.sNick] = nil
WriteTable(tLeft, "tLeft", sLeft)
Core.SendToUser(tUser, "<"..sBot.."> Режим \"ушёл\" снят.")
else
Core.SendToUser(tUser, "<"..sBot.."> У вас не включен режим \"ушёл\"")
end
return true
end
cmd = string.gsub(cmd, ":", "")
if tLeft[cmd] then
Core.SendToUser(tUser, "<"..sBot.."> ¤ Юзер "..cmd.." в данный момент отсутствует на хабе! ¤ Сообщение ушёл: "..tLeft[cmd])
end
end
function WriteTable(tTable, tablename, file)
local handle = io.open(file, "w")
Serialize(tTable, tablename, handle)
handle:close()
end
function Serialize(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
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
end
правильный вариант
Код
dofile(frmHub:GetPtokaXLocation().."scripts/old_api.lu")
sBot = SetMan.GetString(21)
sLeft = Core.GetPtokaXPath().."scripts/Left/LeftUser.tbl"
tLeft = {}
function Core.OnStartup()
if loadfile(sLeft) then
dofile(sLeft)
end
end
function Core.UserConnected(tUser)
Core.SendToUser(tUser, "$UserCommand 1 3 Автоответчик на чат\\Ушёл$<%[mynick]> !left %[line:Введите сообщение об уходе]|")
Core.SendToUser(tUser, "$UserCommand 1 3 Автоответчик на чат\\Пришёл$<%[mynick]> !leftdel |")
end
Core.OpConnected = Core.UserConnected
Core.RegConnected = Core.UserConnected
function Main()
tProfile = {
[0]=0, -- Мастер
[1]=0, -- Оператор
[2]=1, -- VIP
[3]=1, -- Зарегистрированный пользователь
[4]=1, -- SuperVIP
[-1]=1, -- Незарегистрированный пользователь
}
end
function Core.ChatArrival(tUser, sData)
if tProfile[tUser.iProfile] == 1 then
sData = string.sub(sData,1,-2)
local _,_,cmd = string.find(sData, "%b<>%s+(%S+)")
if cmd == "!left" then
if not tLeft[tUser.sNick] then
local _,_,msg = string.find(sData, "%b<>%s+%S+%s+(.+)")
tLeft[tUser.sNick] = msg
WriteTable(tLeft, "tLeft", sLeft)
Core.SendToUser(tUser, "<"..sBot.."> Режиме \"ушёл\" удачно установлен.")
else
Core.SendToUser(tUser, "<"..sBot.."> Вы уже в режиме \"ушёл\".")
end
return true
end
if cmd == "!leftdel" then
if tLeft[tUser.sNick] then
tLeft[tUser.sNick] = nil
WriteTable(tLeft, "tLeft", sLeft)
Core.SendToUser(tUser, "<"..sBot.."> Режим \"ушёл\" снят.")
else
Core.SendToUser(tUser, "<"..sBot.."> У вас не включен режим \"ушёл\"")
end
return true
end
cmd = string.gsub(cmd, ":", "")
if tLeft[cmd] then
Core.SendToUser(tUser, "<"..sBot.."> ¤ Юзер "..cmd.." в данный момент отсутствует на хабе! ¤ Сообщение ушёл: "..tLeft[cmd])
end
end
end
function WriteTable(tTable, tablename, file)
local handle = io.open(file, "w")
Serialize(tTable, tablename, handle)
handle:close()
end
function Serialize(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
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
Во вторых пара уже знать что в функции чатаривал ты даёшь права не на меню а на команды!
PS: извеняюсь что постил код просто так нагляднее