local function regexp(string, exp)
local ret
string.gsub(string, exp, function(...) ret = arg end)
if(ret) then
return unpack(ret)
else
return nil
end
end
function parseline(line)
local nl
local prefix,command
prefix,ln = regexp(line, "^%:([^ ]+) +(.+)$")
if(prefix) then line = ln end
command,ln = regexp(line, "^([^ ]+)(.*)$")
if(not command) then
command,ln = regexp(line, "^([0-9][0-9][0-9])( +.+)$")
if(not command) then return nil end
else
if(string.gsub(command, "[^-A-Za-z0-9_]", "") ~= command) then return nil end
end
line = ln
local ret = {prefix=prefix, command=command}
repeat
local param
param,ln = regexp(line, "^ +([^:\10\13 ][^\10\13 ]*)(.*)$")
if(not param) then
param = regexp(line, "^ +:([^\10\13]*)$")
if(not param) then
return ret
end
table.insert(ret, param)
return ret
else
table.insert(ret, param)
line = ln
end
until false
return ret
end
socket = require("socket")
-- Connect to IRC, make sure the nick is free, give IRC our credentials
print("Connecting to IRC...")
socket = socket.connect("irc.ascentemu.com",6667)
socket:send("PRIVMSG NickServ :ghost LuaBOT panstarefun\n")
socket:send("NICK BurkBOT\n")
socket:send("USER BurkBOT bogus. this.is.ignored :CDC\n")
-- [[ Display all the crap IRC sends back; we're looking for the PING and for the moment to ID the nick. When we find the PING we PONG back. A debugging line allows us to see what commands we're getting from the IRC server. ]]
trip = false;
repeat
feedback = socket:receive("*l")
print(feedback)
cmd = parseline(feedback)
-- printtable(cmd)
if (cmd["command"] == "PING") then
print("Found PING!!!")
socket:send("PONG "..cmd[1].."\n")
trip = true;
end
until ( trip == true)
-- End of the intro crap, we now deliver the nick ID command
print("Sending IDENTIFY command.")
socket:send("PRIVMSG NickServ :IDENTIFY pantsarefun\n")
feedback = socket:receive("*l")
print(feedback)
-- We're now connected, and enter #cdc on command
-- io.input()
print("Connected. Ready to join the channel")
x = io.read("*l")
print(x)
socket:send("JOIN #moon++\n")
count = 0;
repeat
feedback = socket:receive("*l")
print(feedback)
cmd = parseline(feedback)
-- printtable(cmd)
if (cmd["command"] == "PING") then
print("Ponging!!!")
socket:send("PONG "..cmd[1].."\n")
end
until (count == nil)