--IRCBot Class _IRCBot = {} bots = {} function IRCBot(handler,start) local o = {} setmetatable(o,_IRCBot) --these two lines are the basis for OO in Lua _IRCBot.__index = _IRCBot -- <-- o.hand = handler o.start = start o.name=o.hand.nick..tostring(math.random(1,10000)) --very unlikely we get two of the same. bots[o.name]=o --the debug is always jlulian38_bot8402 wtf... o.hand.bot = o o:Init() return o end function _IRCBot:Init() self.state = rings.new() self:RunString(tableToLua("startup",self.start)) self:RunString("data = {} data.name = \""..self.name.."\"") self:RunString("package.cpath=package.cpath..';./modules/?.so' package.path=package.path..';./modules/?.lua'") self:OpenScript("init.lua") end function _IRCBot:OpenScript(scr) scr = "./lua/bot/"..scr if not file.Exists(scr) then return end local r = file.Read(scr) if r then test,err = self.state:dostring(r) if not test then print("Slave",err) end end end function _IRCBot:RunString(str) --Msg("Running",str) test,err = self.state:dostring(str) if not test then print("Slave",err) end end function _IRCBot:RunHook(name,...) str = "doHook(" args = {} args[1]=name for i,v in ipairs(arg) do args[i+1]=v end for _,v in ipairs(args) do if type(v) == "number" then str=str..tostring(v).."," elseif type(v) == "string" then str=str.."[["..v.."]]," end end str = str:sub(1,-2)..")" self.state:dostring(str) end function _sendln(name,ln) --Msg(name,ln) bots[name].hand:sendln(ln) end function filewrap(snd_back,name,...) --bah this needs work arg.n = nil local args = { file[name](unpack(arg)) } print(snd_back,name) if args[1] then local tab = tableToLua("__file_args__",args) print(tab) bots[snd_back]:RunString(tab) end end