aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2007-09-04 15:08:37 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2007-09-04 15:08:37 -0500
commitafc85f7e9b75e0c7e7f4f87fc6b2bd5448e880d5 (patch)
tree502c0210f4af2b6c93abcaf54e8299eec36cafef
parent7b7a24c3f27b74e95c24e62917bcc4ba8478196d (diff)
downloadluairc-afc85f7e9b75e0c7e7f4f87fc6b2bd5448e880d5.tar.gz
luairc-afc85f7e9b75e0c7e7f4f87fc6b2bd5448e880d5.zip
start changing things over from testing for type (string/table) to find ctcp messages to making things more explicit. this fixes _ctcp_split.
-rw-r--r--src/irc.lua51
-rw-r--r--src/irc/ctcp.lua14
2 files changed, 36 insertions, 29 deletions
diff --git a/src/irc.lua b/src/irc.lua
index 761039b..9376efd 100644
--- a/src/irc.lua
+++ b/src/irc.lua
@@ -227,19 +227,10 @@ end
function handlers.on_privmsg(from, to, msg)
local msgs = ctcp._ctcp_split(msg)
for _, v in base.ipairs(msgs) do
- if base.type(v) == "string" then
- -- normal message {{{
- if to:sub(1, 1) == "#" then
- base.assert(serverinfo.channels[to],
- "Received channel msg from unknown channel: " .. to)
- misc._try_call(on_channel_msg, serverinfo.channels[to], from, v)
- else
- misc._try_call(on_private_msg, from, v)
- end
- -- }}}
- elseif base.type(v) == "table" then
+ local msg = v.str
+ if v.ctcp then
-- ctcp message {{{
- local words = misc._split(v[1])
+ local words = misc._split(msg)
local received_command = words[1]
local cb = "on_" .. received_command:lower()
table.remove(words, 1)
@@ -251,6 +242,17 @@ function handlers.on_privmsg(from, to, msg)
notice(from, {"ERRMSG Unknown query: " .. received_command})
end
-- }}}
+ else
+ -- normal message {{{
+ if to:sub(1, 1) == "#" then
+ base.assert(serverinfo.channels[to],
+ "Received channel msg from unknown channel: " .. to)
+ misc._try_call(on_channel_msg, serverinfo.channels[to], from,
+ msg)
+ else
+ misc._try_call(on_private_msg, from, msg)
+ end
+ -- }}}
end
end
end
@@ -260,26 +262,27 @@ end
function handlers.on_notice(from, to, msg)
local msgs = ctcp._ctcp_split(msg)
for _, v in base.ipairs(msgs) do
- if base.type(v) == "string" then
+ local msg = v.str
+ if v.ctcp then
+ -- ctcp message {{{
+ local words = misc._split(msg)
+ local command = words[1]:lower()
+ table.remove(words, 1)
+ misc._try_call_warn("Unknown CTCP message: " .. command,
+ ctcp_handlers["on_rpl_"..command], from, to,
+ table.concat(words, ' '))
+ -- }}}
+ else
-- normal message {{{
if to:sub(1, 1) == "#" then
base.assert(serverinfo.channels[to],
"Received channel msg from unknown channel: " .. to)
misc._try_call(on_channel_notice, serverinfo.channels[to],
- from, v)
+ from, msg)
else
- misc._try_call(on_private_notice, from, v)
+ misc._try_call(on_private_notice, from, msg)
end
-- }}}
- elseif base.type(v) == "table" then
- -- ctcp message {{{
- local words = misc._split(v[1])
- local command = words[1]:lower()
- table.remove(words, 1)
- misc._try_call_warn("Unknown CTCP message: " .. command,
- ctcp_handlers["on_rpl_"..command], from, to,
- table.concat(words, ' '))
- -- }}}
end
end
end
diff --git a/src/irc/ctcp.lua b/src/irc/ctcp.lua
index 1866122..5848416 100644
--- a/src/irc/ctcp.lua
+++ b/src/irc/ctcp.lua
@@ -71,13 +71,17 @@ end
-- }}}
-- _ctcp_split {{{
--- TODO: again with this string/table thing... it's ugly!
--
-- Splits a low level dequoted string into normal text and unquoted CTCP
-- messages.
-- @param str Low level dequoted string
--- @return Array, where string values correspond to plain text, and table
--- values have t[1] as the CTCP message
+-- @return Array of tables, with each entry in the array corresponding to one
+-- part of the split message. These tables will have these fields:
+-- <ul>
+-- <li><i>str:</i> The text of the split section</li>
+-- <li><i>ctcp:</i> True if the section was a CTCP message, false
+-- otherwise</li>
+-- </ul>
function _ctcp_split(str)
local ret = {}
local iter = 1
@@ -93,11 +97,11 @@ function _ctcp_split(str)
end
if plain_string ~= "" then
- table.insert(ret, plain_string)
+ table.insert(ret, {str = plain_string, ctcp = false})
end
if not s then break end
if ctcp_string ~= "" then
- table.insert(ret, {_ctcp_dequote(ctcp_string)})
+ table.insert(ret, {str = _ctcp_dequote(ctcp_string), ctcp = true})
end
iter = e + 1