3
|
1 |
|
|
2 |
require "libs.shcmd" |
|
3 |
|
|
4 |
-- The caching idea is borrowed from MattJ's riddim code, |
|
5 |
-- and the function parse_xeps() as well. |
|
6 |
|
|
7 |
local xeplisturl = "curl http://xmpp.org/extensions/xeps.xml" |
|
8 |
|
|
9 |
local xeps = {} |
|
10 |
|
|
11 |
-- parse_xep() from Matthew Wild (aka MattJ) |
|
12 |
local function parse_xeps(t) |
|
13 |
if not t or t == "" then return nil end |
|
14 |
local currxep = {} |
|
15 |
for b in string.gmatch(t,"<xep>(.-)</xep>") do |
|
16 |
for k,v in string.gmatch(b,"<(%w+)>(.-)</%1>") do |
|
17 |
currxep[k] = v |
|
18 |
end |
|
19 |
xeps[currxep.number] = { } |
|
20 |
for k, v in pairs(currxep) do xeps[currxep.number][k] = v end |
|
21 |
end |
|
22 |
return true |
|
23 |
end |
|
24 |
|
|
25 |
local function fetch_xeps () |
|
26 |
local now = os.time() |
|
27 |
if os.difftime(now, xeps_updated_at) < 43200 then return end |
|
28 |
-- Let's get some fresh data |
|
29 |
local xepdata = shcmd(xeplisturl) |
|
30 |
xeps_updated_at = now |
|
31 |
parse_xeps(xepdata) |
|
32 |
end |
|
33 |
|
|
34 |
-- Logics comes from MattJ's riddim bot |
|
35 |
local function lookup_xep (xepnum) |
|
36 |
-- Check that xepnum is a valid number |
|
37 |
xepnum = tonumber(xepnum) |
|
38 |
if not xepnum or xepnum <= 0 or xepnum > 9999 then return nil, "What XEP?" end |
|
39 |
xepnum = tostring(xepnum) |
|
40 |
-- Download XEP list |
|
41 |
fetch_xeps() |
|
42 |
-- Expand to full 4 char number |
|
43 |
xepnum = string.rep("0", 4-xepnum:len())..xepnum |
|
44 |
xep = xeps[tostring(xepnum)] |
|
45 |
if not xep then return nil,"Sorry, XEP-"..xepnum.." not found" end |
|
46 |
return "XEP-"..xep.number.." is \""..xep.name.."\"\n".. |
|
47 |
-- xep.type..", "..xep.status..", last updated "..xep.updated.."\n".. |
|
48 |
"URL: <http://xmpp.org/extensions/xep-"..xep.number..".html>" |
|
49 |
end |
|
50 |
|
|
51 |
mcbot_register_command("xep", lookup_xep) |