require "libs.shcmd"
local mcabber_bts = { ["desc"] = "Query mcabber (crew) BTS",
["aliases"] = { "bug", "issue" }
}
local function get_issue_details (num)
local item
num = tonumber(num);
if not num then return nil end
local issue = {}
local btsurl = "http://bitbucket.org/McKael/mcabber-crew/issue/"
issue.id = tostring(num)
issue.url = btsurl..issue.id.."/"
local data = shcmd("curl "..issue.url)
if not data then return nil end
local title = data:match("#"..issue.id.."%s*-%s*(.*)%s*—")
if not title then return nil end
issue.title = title:gsub(""", "\""):gsub("&", "&")
issue.title = issue.title:gsub("<", "<"):gsub(">", ">")
issue.title = issue.title:gsub("'", "'")
-- Get Status
item = data:match("Status:%s*</td>%s*<td [^>]*>(.-)</td>")
if item then issue.status = item end
-- Get Type
item = data:match("Type:%s*</td>%s*<td [^>]*>(.-)</td>")
if item then issue.type = item end
return issue
end
function mcabber_bts.cmd (num)
-- Check that xepnum is a valid number
if num then num = num:gsub("[%s%?%.%!]+$", "") end
num = tonumber(num)
if not num or num < 1 then
return nil, "Please provide an issue number"
end
local issue = get_issue_details(num)
if not issue then
return nil,"Sorry, couldn't find issue "..tostring(num)
end
local result = "Issue #"..issue.id.." -- "..issue.title.."\n"
if issue.status then
result = result .. "Status: " .. issue.status .. "\n"
end
if issue.type then
result = result .. "Type: " .. issue.type .. "\n"
end
return result .. "URL: <"..tostring(issue.url)..">"
end
mcbot_register_command("bts", mcabber_bts)