1
0
mirror of https://github.com/ShadowNinja/LuaIRC.git synced 2024-11-16 15:30:30 +01:00
LuaIRC/asyncoperations.lua

85 lines
1.7 KiB
Lua
Raw Normal View History

2010-04-04 16:55:12 +02:00
local table = table
module "irc"
local meta = _META
function meta:send(fmt, ...)
2010-07-17 15:12:42 +02:00
local bytes, err = self.socket:send(fmt:format(...) .. "\r\n")
if bytes then
return
end
2010-04-04 16:55:12 +02:00
if err ~= "timeout" and err ~= "wantwrite" then
self:invoke("OnDisconnect", err, true)
self:shutdown()
error(err, errlevel)
2010-04-04 16:55:12 +02:00
end
end
local function verify(str, errLevel)
2010-07-19 00:24:19 +02:00
if str:find("^:") or str:find("%s%z") then
2010-07-18 13:13:38 +02:00
error(("malformed parameter '%s' to irc command"):format(str), errLevel)
end
return str
end
2010-06-01 01:39:34 +02:00
function meta:sendChat(target, msg)
-- Split the message into segments if it includes newlines.
2010-07-19 00:24:19 +02:00
for line in msg:gmatch("([^\r\n]+)") do
2010-07-18 13:08:33 +02:00
self:send("PRIVMSG %s :%s", verify(target, 3), msg)
end
2010-06-01 01:39:34 +02:00
end
function meta:sendNotice(target, msg)
-- Split the message into segments if it includes newlines.
2010-07-19 00:24:19 +02:00
for line in msg:gmatch("([^\r\n]+)") do
2010-07-18 13:08:33 +02:00
self:send("NOTICE %s :%s", verify(target, 3), msg)
end
2010-06-01 01:39:34 +02:00
end
2010-04-04 16:55:12 +02:00
function meta:join(channel, key)
if key then
2010-07-18 13:08:33 +02:00
self:send("JOIN %s :%s", verify(channel, 3), verify(key, 3))
2010-04-04 16:55:12 +02:00
else
2010-07-18 13:08:33 +02:00
self:send("JOIN %s", verify(channel, 3))
2010-04-04 16:55:12 +02:00
end
end
function meta:part(channel)
2010-07-18 13:08:33 +02:00
channel = verify(channel, 3)
self:send("PART %s", channel)
if self.track_users then
self.channels[channel] = nil
end
2010-04-04 16:55:12 +02:00
end
2010-06-01 01:39:34 +02:00
function meta:trackUsers(b)
self.track_users = b
if not b then
for k,v in pairs(self.channels) do
self.channels[k] = nil
end
end
end
2010-04-04 16:55:12 +02:00
function meta:setMode(t)
local target = t.target or self.nick
local mode = ""
local add, rem = t.add, t.remove
assert(add or rem, "table contains neither 'add' nor 'remove'")
2010-04-04 16:55:12 +02:00
if add then
mode = table.concat{"+", add}
end
if rem then
mode = table.concat{mode, "-", rem}
end
2010-07-18 13:08:33 +02:00
self:send("MODE %s %s", verify(target, 3), verify(mode, 3))
2010-04-04 16:55:12 +02:00
end