mirror of
https://github.com/ShadowNinja/LuaIRC.git
synced 2025-03-25 05:40:39 +01:00
merged with jsimmons/master
This commit is contained in:
commit
2fe692f2ae
@ -1,4 +1,4 @@
|
|||||||
--[[
|
--[[
|
||||||
Lua IRC library
|
Lua IRC library
|
||||||
|
|
||||||
Copyright (c) 2010 Jakob Ovrum
|
Copyright (c) 2010 Jakob Ovrum
|
||||||
@ -22,4 +22,5 @@
|
|||||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
OTHER DEALINGS IN THE SOFTWARE.]]
|
OTHER DEALINGS IN THE SOFTWARE.]]
|
||||||
|
|
||||||
|
@ -8,6 +8,10 @@ Dependencies
|
|||||||
|
|
||||||
* [LuaSocket](http://w3.impa.br/~diego/software/luasocket/)
|
* [LuaSocket](http://w3.impa.br/~diego/software/luasocket/)
|
||||||
|
|
||||||
|
**Only required if you want to make use of the TLS support**
|
||||||
|
|
||||||
|
* [LuaSec](http://www.inf.puc-rio.br/~brunoos/luasec/)
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
-------------
|
-------------
|
||||||
Documentation can be automatically generated from the doc/irc.luadoc file, pre-generated documentation can be found in the gh-branch.
|
Documentation can be automatically generated from the doc/irc.luadoc file, pre-generated documentation can be found in the gh-branch.
|
||||||
|
@ -29,27 +29,27 @@ end
|
|||||||
function meta:sendChat(target, msg)
|
function meta:sendChat(target, msg)
|
||||||
-- Split the message into segments if it includes newlines.
|
-- Split the message into segments if it includes newlines.
|
||||||
for line in msg:gmatch("([^\r\n]+)")
|
for line in msg:gmatch("([^\r\n]+)")
|
||||||
self:send("PRIVMSG %s :%s", verify(target, 2), msg)
|
self:send("PRIVMSG %s :%s", verify(target, 3), msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function meta:sendNotice(target, msg)
|
function meta:sendNotice(target, msg)
|
||||||
-- Split the message into segments if it includes newlines.
|
-- Split the message into segments if it includes newlines.
|
||||||
for line in msg:gmatch("([^\r\n]+)")
|
for line in msg:gmatch("([^\r\n]+)")
|
||||||
self:send("NOTICE %s :%s", verify(target, 2), msg)
|
self:send("NOTICE %s :%s", verify(target, 3), msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function meta:join(channel, key)
|
function meta:join(channel, key)
|
||||||
if key then
|
if key then
|
||||||
self:send("JOIN %s :%s", verify(channel, 2), verify(key, 2))
|
self:send("JOIN %s :%s", verify(channel, 3), verify(key, 3))
|
||||||
else
|
else
|
||||||
self:send("JOIN %s", verify(channel, 2))
|
self:send("JOIN %s", verify(channel, 3))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function meta:part(channel)
|
function meta:part(channel)
|
||||||
channel = verify(channel, 2)
|
channel = verify(channel, 3)
|
||||||
self:send("PART %s", channel)
|
self:send("PART %s", channel)
|
||||||
if self.track_users then
|
if self.track_users then
|
||||||
self.channels[channel] = nil
|
self.channels[channel] = nil
|
||||||
@ -71,7 +71,7 @@ function meta:setMode(t)
|
|||||||
local add, rem = t.add, t.remove
|
local add, rem = t.add, t.remove
|
||||||
|
|
||||||
assert(add or rem, "table contains neither 'add' nor 'remove'")
|
assert(add or rem, "table contains neither 'add' nor 'remove'")
|
||||||
|
|
||||||
if add then
|
if add then
|
||||||
mode = table.concat{"+", add}
|
mode = table.concat{"+", add}
|
||||||
end
|
end
|
||||||
@ -79,6 +79,6 @@ function meta:setMode(t)
|
|||||||
if rem then
|
if rem then
|
||||||
mode = table.concat{mode, "-", rem}
|
mode = table.concat{mode, "-", rem}
|
||||||
end
|
end
|
||||||
|
|
||||||
self:send("MODE %s %s", verify(target, 2), verify(mode, 2))
|
self:send("MODE %s %s", verify(target, 3), verify(mode, 3))
|
||||||
end
|
end
|
||||||
|
27
init.lua
27
init.lua
@ -23,13 +23,13 @@ require "irc.asyncoperations"
|
|||||||
local meta_preconnect = {}
|
local meta_preconnect = {}
|
||||||
function meta_preconnect.__index(o, k)
|
function meta_preconnect.__index(o, k)
|
||||||
local v = rawget(meta_preconnect, k)
|
local v = rawget(meta_preconnect, k)
|
||||||
|
|
||||||
if not v and meta[k] then
|
if not v and meta[k] then
|
||||||
error("field '"..k.."' is not accessible before connecting", 2)
|
error("field '"..k.."' is not accessible before connecting", 2)
|
||||||
end
|
end
|
||||||
return v
|
return v
|
||||||
end
|
end
|
||||||
|
|
||||||
function new(user)
|
function new(user)
|
||||||
local o = {
|
local o = {
|
||||||
nick = assert(user.nick, "Field 'nick' is required");
|
nick = assert(user.nick, "Field 'nick' is required");
|
||||||
@ -55,7 +55,7 @@ function meta:unhook(name, id)
|
|||||||
|
|
||||||
assert(hooks, "no hooks exist for this event")
|
assert(hooks, "no hooks exist for this event")
|
||||||
assert(hooks[id], "hook ID not found")
|
assert(hooks[id], "hook ID not found")
|
||||||
|
|
||||||
hooks[id] = nil
|
hooks[id] = nil
|
||||||
end
|
end
|
||||||
meta_preconnect.unhook = meta.unhook
|
meta_preconnect.unhook = meta.unhook
|
||||||
@ -134,7 +134,7 @@ end
|
|||||||
|
|
||||||
function meta:disconnect(message)
|
function meta:disconnect(message)
|
||||||
local message = message or "Bye!"
|
local message = message or "Bye!"
|
||||||
|
|
||||||
self:invoke("OnDisconnect", message, false)
|
self:invoke("OnDisconnect", message, false)
|
||||||
self:send("QUIT :%s", message)
|
self:send("QUIT :%s", message)
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ handlers["JOIN"] = function(o, prefix, channel)
|
|||||||
o.channels[channel].users[user.nick] = user
|
o.channels[channel].users[user.nick] = user
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
o:invoke("OnJoin", user, channel)
|
o:invoke("OnJoin", user, channel)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ end
|
|||||||
handlers["353"] = function(o, prefix, me, chanType, channel, names)
|
handlers["353"] = function(o, prefix, me, chanType, channel, names)
|
||||||
if o.track_users then
|
if o.track_users then
|
||||||
o.channels[channel] = o.channels[channel] or {users = {}, type = chanType}
|
o.channels[channel] = o.channels[channel] or {users = {}, type = chanType}
|
||||||
|
|
||||||
local users = o.channels[channel].users
|
local users = o.channels[channel].users
|
||||||
for nick in names:gmatch("(%S+)") do
|
for nick in names:gmatch("(%S+)") do
|
||||||
local access, name = parseNick(nick)
|
local access, name = parseNick(nick)
|
||||||
@ -286,6 +286,18 @@ handlers["KICK"] = function(o, prefix, channel, kicked, reason)
|
|||||||
o:invoke("OnKick", channel, kicked, parsePrefix(prefix), reason)
|
o:invoke("OnKick", channel, kicked, parsePrefix(prefix), reason)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--RPL_UMODEIS
|
||||||
|
--To answer a query about a client's own mode, RPL_UMODEIS is sent back
|
||||||
|
handlers["221"] = function(o, prefix, modes)
|
||||||
|
o:invoke("OnUserModeIs", modes)
|
||||||
|
end
|
||||||
|
|
||||||
|
--RPL_CHANNELMODEIS
|
||||||
|
--The result from common irc servers differs from that defined by the rfc
|
||||||
|
handlers["324"] = function(o, prefix, user, channel, modes)
|
||||||
|
o:invoke("OnChannelModeIs", user, channel, modes)
|
||||||
|
end
|
||||||
|
|
||||||
handlers["ERROR"] = function(o, prefix, message)
|
handlers["ERROR"] = function(o, prefix, message)
|
||||||
o:invoke("OnDisconnect", message, true)
|
o:invoke("OnDisconnect", message, true)
|
||||||
o:shutdown()
|
o:shutdown()
|
||||||
@ -311,7 +323,7 @@ function meta:whois(nick)
|
|||||||
self:send("WHOIS %s", nick)
|
self:send("WHOIS %s", nick)
|
||||||
|
|
||||||
local result = {}
|
local result = {}
|
||||||
|
|
||||||
while true do
|
while true do
|
||||||
local line = getline(self, 3)
|
local line = getline(self, 3)
|
||||||
if line then
|
if line then
|
||||||
@ -330,7 +342,6 @@ function meta:whois(nick)
|
|||||||
|
|
||||||
if result.account then
|
if result.account then
|
||||||
result.account = result.account[3]
|
result.account = result.account[3]
|
||||||
|
|
||||||
elseif result.registered then
|
elseif result.registered then
|
||||||
result.account = result.registered[2]
|
result.account = result.registered[2]
|
||||||
end
|
end
|
||||||
|
2
util.lua
2
util.lua
@ -16,7 +16,7 @@ function parse(line)
|
|||||||
prefix = line:sub(2, space-1)
|
prefix = line:sub(2, space-1)
|
||||||
lineStart = space
|
lineStart = space
|
||||||
end
|
end
|
||||||
|
|
||||||
local _, trailToken = line:find("%s+:", lineStart)
|
local _, trailToken = line:find("%s+:", lineStart)
|
||||||
local lineStop = line:len()
|
local lineStop = line:len()
|
||||||
local trailing
|
local trailing
|
||||||
|
Loading…
x
Reference in New Issue
Block a user