mirror of
https://github.com/ShadowNinja/LuaIRC.git
synced 2024-11-14 22:40:32 +01:00
82 lines
1.8 KiB
Lua
82 lines
1.8 KiB
Lua
|
local setmetatable = setmetatable
|
||
|
local char = string.char
|
||
|
local table = table
|
||
|
local assert = assert
|
||
|
local tostring = tostring
|
||
|
local type = type
|
||
|
|
||
|
module "irc"
|
||
|
|
||
|
--protocol parsing
|
||
|
function parse(line)
|
||
|
local colonsplit = line:find(":", 2)
|
||
|
local last
|
||
|
if colonsplit then
|
||
|
last = line:sub(colonsplit+1)
|
||
|
line = line:sub(1, colonsplit-2)
|
||
|
end
|
||
|
|
||
|
local prefix
|
||
|
if line:sub(1,1) == ":" then
|
||
|
local space = line:find(" ")
|
||
|
prefix = line:sub(2, space-1)
|
||
|
line = line:sub(space)
|
||
|
end
|
||
|
|
||
|
local params = {}
|
||
|
local it, state, init = line:gmatch("(%S+)")
|
||
|
local cmd = it(state, init)
|
||
|
|
||
|
for sub in it, state, init do
|
||
|
params[#params + 1] = sub
|
||
|
end
|
||
|
|
||
|
if last then params[#params + 1] = last end
|
||
|
|
||
|
return prefix, cmd, params
|
||
|
end
|
||
|
|
||
|
function parsePrefix(prefix)
|
||
|
local user = {}
|
||
|
if prefix then
|
||
|
user.nick, user.username, user.host = prefix:match("(.*)!(.*)@(.*)")
|
||
|
end
|
||
|
return user
|
||
|
end
|
||
|
|
||
|
--mIRC markup scheme (de-facto standard)
|
||
|
color = {
|
||
|
black = 1,
|
||
|
blue = 2,
|
||
|
green = 3,
|
||
|
red = 4,
|
||
|
lightred = 5,
|
||
|
purple = 6,
|
||
|
brown = 7,
|
||
|
yellow = 8,
|
||
|
lightgreen = 9,
|
||
|
navy = 10,
|
||
|
cyan = 11,
|
||
|
lightblue = 12,
|
||
|
violet = 13,
|
||
|
gray = 14,
|
||
|
lightgray = 15,
|
||
|
white = 16
|
||
|
}
|
||
|
|
||
|
local colByte = char(3)
|
||
|
setmetatable(color, {__call = function(_, text, colornum)
|
||
|
colornum = type(colornum) == "string" and assert(color[colornum], "Invalid color '"..colornum.."'") or colornum
|
||
|
return table.concat{colByte, tostring(colornum), text, colByte}
|
||
|
end})
|
||
|
|
||
|
local boldByte = char(2)
|
||
|
function bold(text)
|
||
|
return boldByte..text..boldByte
|
||
|
end
|
||
|
|
||
|
local underlineByte = char(31)
|
||
|
function underline(text)
|
||
|
return underlineByte..text..underlineByte
|
||
|
end
|