plugins/xkcd2.lua

Tue, 25 Mar 2014 18:23:58 +0100

author
Kim Alvefur <zash@zash.se>
date
Tue, 25 Mar 2014 18:23:58 +0100
changeset 112
08670c0cbb65
child 115
6498ca5ed831
permissions
-rw-r--r--

plugins.xkcd2: I accidentally another XKCD plugin from scratch

112
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 require "net.httpclient_listener";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local http = require("net.http");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local json = require"util.json";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local bare_jid = require "util.jid".bare;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local current_url = "http://xkcd.com/info.0.json";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local numbered_url = "http://xkcd.com/%d/info.0.json";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local formatted_url = "http://xkcd.com/%d/";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local strips = {};
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local latest, last_update;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 function riddim.plugins.xkcd2(bot)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 bot:hook("commands/xkcd", function(command)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local url = current_url;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local q = command.param;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local strip;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 if q then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local t, num = q:match("^([#\"]?)(%d+)\"?$");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 if t ~= '"' then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 num = tonumber(num);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 if num and num < 0 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 num = #strip + num;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 strip = strips[num or q:lower()];
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 if strip == "" or strip == 404 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 strip = nil
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 if not strip and num then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 url = numbered_url:format(num) or url;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 elseif os.difftime(os.time(), last_update) <= 3 * 60 * 60 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 strip = latest;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 if q and not strip then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 local pat = q:lower():gsub("[-()%[]", "%%%0")
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 :gsub("%%(%b[])",function(s) return (#s > 2 and "" or "%") .. s end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 local results = {};
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 for i, strip in ipairs(strips) do
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 if strip:lower():match(pat) then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 results[#results+1] = i;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 if #results == 0 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 return "Sorry, I couldn't find a match";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 elseif #results == 1 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 strip = results[1];
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 else
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 -- We have more than one match
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 local ret, title = "Multiple matches:";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 for i, num in ipairs(results) do
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 title = strips[num];
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 ret = string.format("%s %s (%d)%s", ret, title, num, ((i < #results) and ",") or "");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 if i > 5 then ret = ret .. " " .. (#results - 5) .. " more"; break; end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 return ret;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 if strip then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 local t, n;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 if type(strip) == "number" then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 t, n = strips[strip], strip;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 else
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 t, n = strip, strips[strip:lower()];
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 return ("%s, "..formatted_url.." "):format(t, n);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 http.request(url, nil, function (data, code)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 if code == 200 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 data = json.decode(data);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 if not data then return end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 local n, t = tonumber(data.num), data.safe_title;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 strips[n], strips[t:lower()] = t, n;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 if not q then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 latest = n;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 last_update = os.time();
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 command:reply(("%s, "..formatted_url.." "):format(t, n));
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 elseif code == 404 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 command:reply("Strip not found");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 return true;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 local admin = bot.config.admin;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96 bot:hook("commands/xkcdlist", function(command)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 local actor = bare_jid(command.sender.real_jid or command.sender.jid);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 if actor ~= admin then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 return "I shall not";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 local get_next;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104 local function handle_reply(data, code)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 if code == 200 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 data = json.decode(data);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 if not data then return end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 local n, t = tonumber(data.num), data.safe_title;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 strips[n], strips[t:lower()] = t, n;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 if n > 1 then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 return get_next(n - 1);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
113 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115 function get_next(i)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116 if strips[i] then return end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 local url = i and numbered_url:format(i) or current_url;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 http.request(url, nil, handle_reply);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 get_next(tonumber(command.param));
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 return true;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 local function do_load()
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125 local ok, loaded_strips = pcall(dofile,"xkcd-list.lua");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126 if ok then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 strips = loaded_strips;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128 return true;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 else
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 return nil, loaded_strips;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 bot:hook("commands/xkcdsave", function(command)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 local actor = bare_jid(command.sender.real_jid or command.sender.jid);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 if actor ~= admin then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 return "I shall not";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 local dump = "return "..require"util.serialization".serialize(strips);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 local f, err = io.open("xkcd-list.lua~", "w");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 if f then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 f:write(dump);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 f:close();
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 os.rename("xkcd-list.lua~", "xkcd-list.lua");
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148 return "Saved list of strips";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 return err;
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 bot:hook("commands/xkcdload", function(command)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 local actor = bare_jid(command.sender.real_jid or command.sender.jid);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156 if actor ~= admin then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 return "I shall not";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
159
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160 local ok, err = do_load()
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
161 if not ok then return err end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
162 return "List of strips loaded"
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
163 end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
164
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
165 bot:hook("commands/xkcdreset", function(command)
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
166
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
167 local actor = bare_jid(command.sender.real_jid or command.sender.jid);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
168 if actor ~= admin then
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
169 return "I shall not";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
170 end
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
171
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
172 strips = {};
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
173 return "List of strips emptied";
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
174 end);
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
175
08670c0cbb65 plugins.xkcd2: I accidentally another XKCD plugin from scratch
Kim Alvefur <zash@zash.se>
parents:
diff changeset
176 end

mercurial