mcbot/cmds/mcabber_bts.lua
author Mikael Berthe <mikael@lilotux.net>
Wed, 14 Apr 2010 00:22:03 +0200
changeset 8 db84d97cf13d
parent 7 c515e8218c87
child 9 d5fa497724f4
permissions -rw-r--r--
Improve mcabber_bts (display status and type)


require "libs.shcmd"

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)
    local title = data:match("#"..issue.id.."%s*-%s*(.*)%s*&mdash;")
    if not title then return nil end
    issue.title = title

    -- 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

local function mcabber_bts (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)
mcbot_register_command("bug", mcabber_bts)
mcbot_register_command("issue", mcabber_bts)