----------------------------------------------------- -- Chat Bot v3.5 Coded by [aXs] Wellx 01/09-03 -- Formerly known as the Developer-Chat for TIC50 -- Based on the idea VIPChat from Piglja -- Thx goes to Piglja & aMutex for Ideas and Help ----------------------------------------------------- ChatBot = "[ChatRum]" -- Chat Bot Name CanUseCommands = { -1 , 0 , 1 , 2 , 3 } -- Can Use Chat Bot Commands Lvl ( 0 = Master ~~ 1 = Operators ~~ 2 = VIPs ~~ 3 = Reg ~~ etc.) ChatArray={} ChatFile = "Chatters.tbl" function Main() frmHub:RegBot(ChatBot) ChatArray = LoadFromFile(ChatFile) end --======================================================== DataArrival: =========================================================-- function DataArrival(user, data) if (strsub(data, 1, 1) == "<" ) then data=strsub(data,1,strlen(data)-1) _,_,cmd=strfind(data, "%b<>%s+(%S+)") local Commands = (DeveloperCommands(user, data, cmd)) return Commands elseif strsub(data, 1, 5) == "$To: " then local s, e, to = strfind(data, "$To: (%S+)") if to ~= ChatBot then return 0 else if to == ChatBot then local data=strsub(data,1,strlen(data)-1) local s,e,from,msg = strfind(data,"From:%s+(%S+)%s+$%b<>%s+(.+)") if ChatArray[user.sName] ~= nil then ChatArray[user.sName] = nil for i,v in ChatArray do Developer=GetItemByName(i) if (Developer~=nil) then Developer:SendData("$To: "..i.." From: "..ChatBot.." $<"..user.sName.."> "..msg.."|") end end ChatArray[user.sName] = user.sName else user:SendPM(ChatBot,"You do not have permission to write inhere (Join or Talk to a Operator if you need permission)") end local _,_,cmd = strfind(data,"$%b<>%s+(%S+)") local Commands = (DeveloperCommands(user, data, cmd)) end end end end --===================================================== Chat Commands: ======================================================-- function DeveloperCommands(user, data, cmd) if tfind(CanUseCommands, user.iProfile) then if (cmd == "+chathelp") then DevHelp(user) return 1 elseif (cmd == "+chat") then local s,e,cmd,ChatName = strfind( data, "%b<>%s+(%S+)%s+(.*)" ) if (ChatName == nil) then ChatName = user.sName end if ChatArray[ChatName] == nil then ChatArray[ChatName] = ChatName for index, value in ChatArray do SendPmToNick(index, ChatBot, " "..ChatName.." Has joined the "..ChatBot) end else for index, value in ChatArray do SendPmToNick(index, ChatBot, " "..ChatName.." Has left the "..ChatBot) end ChatArray[ChatName] = nil end SaveToFile(ChatName,ChatFile,ChatArray) return 1 elseif (cmd == "+showchatters") then function DevList() local DevList = "" for index, value in ChatArray do local line = index if GetItemByName(index) then if (strlen(index) <= 10) then DevList = DevList.." • "..line.."\t\t\t~ On-line ~\r\n" else DevList = DevList.." • "..line.."\t\t~ On-line ~\r\n" end else if (strlen(index) <= 10) then DevList = DevList.." • "..line.."\t\t\t• Off-Line •\r\n" else DevList = DevList.." • "..line.."\t\t• Off-Line •\r\n" end end end return DevList end user:SendPM(ChatBot, "\r\n\r\n(¯ ·.¸¸.-> "..ChatBot.." Chatters <-.¸¸.·´¯) \r\n\r\n"..DevList()) return 1 end else user:SendData("You don't have permission to use the commands to the "..ChatBot.." ask a Operator for permission !!") return 0 end end function DevHelp (user) local disp = "\r\n\r\n" disp = disp.."~~ Scripted DeveloperChat Commands: ~~\r\n\r\n" disp = disp.." +chat - Add or part a user to the list of people that can chat in the "..ChatBot.."\r\n" disp = disp.." +showchatters - See witch users that can chat in the "..ChatBot.."\r\n" disp = disp.."\r\n" user:SendPM(ChatBot, disp) end --======================================================== Functions: ===========================================================-- function SaveToFile(arg,file,table) local aString = pickle(table) writeto(file) write(aString) writeto() end function LoadFromFile(file) readfrom(file) local aString = read("*all") return unpickle(aString) end function tfind(table, key) return foreachi(table, function(id, tmp) return (tmp == %key) and id end) end ---------------------------------------------- -- Pickle.lua -- An table serialization utility for lua -- Steve Dekorte, http://www.dekorte.com, Apr 2000 -- Freeware ---------------------------------------------- function pickle(t) return Pickle:clone():pickle_(t) end Pickle = { clone = function (t) local nt={}; for i, v in t do nt[i]=v end return nt end } function Pickle:pickle_(root) if type(root) ~= "table" then error("can only pickle tables, not ".. type(root).."s") end self._tableToRef = {} self._refToTable = {} local savecount = 0 self:ref_(root) local s = "" while getn(self._refToTable) > savecount do savecount = savecount + 1 local t = self._refToTable[savecount] s = s.."{\n" for i, v in t do s = format("%s[%s]=%s,\n", s, self:value_(i), self:value_(v)) end s = s.."},\n" end return format("{%s}", s) end function Pickle:value_(v) local vtype = type(v) if vtype == "string" then return format("%q", v) elseif vtype == "number" then return v elseif vtype == "table" then return "{"..self:ref_(v).."}" else --error("pickle a "..type(v).." is not supported") end end function Pickle:ref_(t) local ref = self._tableToRef[t] if not ref then if t == self then error("can't pickle the pickle class") end tinsert(self._refToTable, t) ref = getn(self._refToTable) self._tableToRef[t] = ref end return ref end ---------------------------------------------- -- unpickle ---------------------------------------------- function unpickle(s) if type(s) ~= "string" then error("can't unpickle a "..type(s)..", only strings") end local tables = dostring("return "..s) for tnum = 1, getn(tables) do local t = tables[tnum] local tcopy = {}; for i, v in t do tcopy[i] = v end for i, v in tcopy do local ni, nv if type(i) == "table" then ni = tables[i[1]] else ni = i end if type(v) == "table" then nv = tables[v[1]] else nv = v end t[ni] = nv end end return tables[1] end --========================= DeveloperChat Bot Coded By [aXs] Wellx For [DK] The Ice Cube™ 50 GB ===========================--