plugins/issues.lua

Sun, 05 Dec 2021 18:35:39 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Sun, 05 Dec 2021 18:35:39 +0000
changeset 165
ec0567256b11
parent 147
7ab078186587
permissions
-rw-r--r--

Add rtbl_admin plugin

131
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- Plugin for querying issue-tracker
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 --
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 -- Example config:
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 -- issues = {
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 -- ["project@conference.example.org"] = "http://example.org/issues/";
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 -- }
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local url = require"socket.url";
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local json = require"util.json";
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local http = require"net.http";
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 function riddim.plugins.issues(bot)
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local conf = bot.config.issues;
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local ex = {
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 headers = {
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 Accept = "application/json";
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 };
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 };
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local function get_issue_url(base, id)
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local base_url = url.parse(base or "http://localhost:8006/");
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 local base_path = url.parse_path(base_url.path);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 base_path[#base_path+1] = "issue";
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 base_path[#base_path+1] = id;
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 base_path.is_directory = nil;
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 base_url.path = url.build_path(base_path);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 return url.build(base_url);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 bot:hook("commands/issue", function (command)
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 local issue_id = tonumber(command.param);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 if not issue_id then return; end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 local current_conf = conf[command.room and command.room.jid or "default"];
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 if not current_conf then return end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 local issue_url = get_issue_url(current_conf, issue_id);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 http.request(issue_url, ex, function (data, code)
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 if code > 400 then
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 return command:reply("HTTP Error "..code.." :(");
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 data = data and json.decode(data);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 if not data then
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 return command:reply("Got invalid JSON back :(");
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 local issue = data.issue;
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 local tags = {};
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 for tag in pairs(issue.tags) do
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 table.insert(tags, tag);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 command:reply(("Issue #%d %q {%s}\n%s"):format(issue.id, issue.title, table.concat(tags, ", "), issue_url));
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 end);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 return true;
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 end);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 local function check_for_issue_id(message)
147
7ab078186587 plugins.issues: Avoid triggering on #number at the end of a word (eg URLs)
Kim Alvefur <zash@zash.se>
parents: 131
diff changeset
56 local issue_id = message.body and message.body:match"^#(%d+)" or message.body:match"%s#(%d+)";
131
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 if issue_id then
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 return bot:event("commands/issue", { param = issue_id, reply = message.reply, room = message.room });
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 end
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 bot:hook("groupchat/joining", function (room)
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 room:hook("message", check_for_issue_id);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end);
51fd36d01b27 plugins.issues: Add plugin for issue-tracker
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 end

mercurial