From b3de433cfd4e39c8fe6d776e258db3b44a3ddd39 Mon Sep 17 00:00:00 2001 From: ubq323 Date: Tue, 3 Sep 2024 12:52:17 +0100 Subject: more thing --- rirc.lua | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 rirc.lua (limited to 'rirc.lua') diff --git a/rirc.lua b/rirc.lua new file mode 100644 index 0000000..b341bfd --- /dev/null +++ b/rirc.lua @@ -0,0 +1,66 @@ +local irc = {} + +function irc.sendmsg(conn, ch, msg) + local m = msg:gsub("[\r\n]+"," ") + local l = 512-12-#ch + m = m:sub(1,l) + conn:send("PRIVMSG "..ch.." :"..m.."\r\n") +end + +function irc.send(sock, args) + local out = '' + if args.source then + out = ':' .. args.source .. ' ' + end + for i = 1, #args-1 do + local arg = tostring(args[i]) + out = out .. arg:gsub("[\r\n ]+","") .. ' ' + end + local last = tostring(args[#args]):gsub("[\r\n]+"," ") + out = out .. ':' .. last + print('>', out) + sock:write(out..'\r\n') +end + +function irc.parse(line) + local words = {} + local idx = 1 + while true do + local word,nidx = line:match("(%g+)%s*()",idx) + if not word then + break + elseif word:sub(1,1) == ":" and idx ~= 1 then + -- first word can start with : + local rest = line:sub(idx+1) + table.insert(words,rest) + break + else + table.insert(words,word) + idx = nidx + end + end + + local from = nil + if words[1] and words[1]:sub(1,1) == ":" then + -- we have a source + from = table.remove(words,1):sub(2) + end + + local op = words[1] + local args = {} + for i=2,#words do + args[i-1] = words[i] + end + return {source=from,op=op:upper(),args=args} +end + +function irc.parse_src(src) + local s, _, nick, user, host = src:find("^(.*)!(.*)@(.*)$") + if s then + return true, nick, user, host + else + return false + end +end + +return irc -- cgit v1.2.3