----------------------------------------- -----CrossfireBot by Hexxeh----- ----------------------------------------- --Load socket library require("socket") --A few needed vars hostname = "irc.gamesurge.net" port = 6667 nick = "Crossfired" user = "Crossfired . . :Crossfired" lineendings = "\r\n" version = 0.1 partmsg = "CrossfireBot "..version.." by Hexxeh" --Create connection object irc = socket.tcp() function Connect() local sock, err = irc:connect(hostname,port) irc:send("USER "..user..lineendings) irc:send("NICK "..nick..lineendings) Main() end function Say(to,msg) irc:send("PRIVMSG "..to.." :"..msg..lineendings) end function Join(channel) irc:send("JOIN "..channel..lineendings) end function Part(channel) irc:send("PART "..channel.." :"..partmsg..lineendings) print("PART "..channel.." :"..partmsg..lineendings) end function Kick(kicknick, channel) irc:send("KICK "..channel.." "..nick.." :"..kicknick..lineendings) end function Explode(str,div) if (div=='') then return false end local pos,arr = 0,{} for st,sp in function() return string.find(str,div,pos,true) end do table.insert(arr,string.sub(str,pos,st-1)) pos = sp + 1 end table.insert(arr,string.sub(str,pos)) return arr end function Parse(response) if string.sub(response,1,6) == "PING :" then print(response) local pong = string.gsub(response,"PING","PONG") print(pong) irc:send(pong..lineendings) elseif string.sub(response,1,17) == "NOTICE AUTH :*** " then local notice = string.gsub(response,"NOTICE AUTH :*** ","") print(notice) elseif string.find(response, "PRIVMSG "..nick.." :") ~= nil then local s,e = string.find(response, "PRIVMSG "..nick.." :") local msg = string.sub(response, e+1, string.len(response)) _,start = string.find(response, ':') final,_ = string.find(response, '!', start) msgfrom = string.sub(response, start+1, final-1) print(msgfrom..": "..msg) if string.sub(msg,1,1) == "!" then ParseCommand(msgfrom,string.sub(msg,2,string.len(msg))) end elseif string.find(response, " PRIVMSG ") ~= nil then split1 = Explode(response,"@") split2 = Explode(split1[2], " ") channelfrom = split2[3] command = string.sub(split2[4],3,string.len(split2[4])) if string.sub(split2[4],2,2) == "!" then ParseCommand(channelfrom, command) end else print(response) end end function ParseCommand(from,command) if string.sub(command, 1, 7) == "version" then Say(from, "CrossfireBot version "..version) elseif string.sub(command, 1, 4) == "join" then local args = {} args = Explode(string.sub(command, 6, string.len(command))," ") for key, value in pairs(args) do Join(value) end elseif string.sub(command, 1, 4) == "part" then print(command) local args = {} args = Explode(string.sub(command, 6, string.len(command))," ") for key, value in pairs(args) do Part(value) print(value) end elseif string.sub(command, 1, 4) == "kick" then local args = {} args = Explode(string.sub(command, 6, string.len(command))," ") Kick(args[1],args[2]) if args[3] then print("Too many args to !kick command.") end end end function Main() while true do local response = irc:receive("*l") Parse(response) end end Connect()