plugins/github.lua

Thu, 23 Mar 2023 09:54:45 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 23 Mar 2023 09:54:45 +0000
changeset 174
56316e345595
parent 133
9d75333c8a3f
permissions
-rw-r--r--

squishy: Add missing servercontact plugin

133
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
1 -- Plugin for querying a Github issue-tracker
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
2 --
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
3 -- Example config:
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
4 -- github = {
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
5 -- ["project@conference.example.org"] = {
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
6 -- user = "TheArchitect";
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
7 -- repo = "TheMatrix";
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
8 -- }
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
9 -- }
9d75333c8a3f plugins.github: Add comment with example config
Kim Alvefur <zash@zash.se>
parents: 130
diff changeset
10
119
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local url = require"socket.url";
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local json = require"util.json";
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local http = require"net.http";
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 function riddim.plugins.github(bot)
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local conf = bot.config.github;
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local base_url = url.parse("https://api.github.com/repos/x/y/issues/123");
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local base_path = url.parse_path(base_url.path);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 local ex = {
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 headers = {
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 Accept = "application/vnd.github.v3+json";
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 };
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 };
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25
128
5b03c71d05f0 plugins.github: Support per-room configuration
Kim Alvefur <zash@zash.se>
parents: 127
diff changeset
26 local function get_issue_url(conf, number)
5b03c71d05f0 plugins.github: Support per-room configuration
Kim Alvefur <zash@zash.se>
parents: 127
diff changeset
27 base_path[2] = conf.user;
5b03c71d05f0 plugins.github: Support per-room configuration
Kim Alvefur <zash@zash.se>
parents: 127
diff changeset
28 base_path[3] = conf.repo or conf.project;
119
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 base_path[5] = number;
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 base_url.path = url.build_path(base_path);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local url = url.build(base_url);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 return url;
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 end
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 bot:hook("commands/issue", function (command)
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 local issue_id = tonumber(command.param);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 if not issue_id then return; end
129
c9da10093c51 plugins.github: Fix syntax error and wrong name
Kim Alvefur <zash@zash.se>
parents: 128
diff changeset
38 local current_conf = conf[command.room and command.room.jid] or conf;
c9da10093c51 plugins.github: Fix syntax error and wrong name
Kim Alvefur <zash@zash.se>
parents: 128
diff changeset
39 if not current_conf.user then return end
130
8c0dd9360228 plugins.github: Fix argument order
Kim Alvefur <zash@zash.se>
parents: 129
diff changeset
40 assert(http.request(get_issue_url(current_conf, issue_id), ex, function (issue, code)
119
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 if code > 400 then
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 return command:reply("HTTP Error "..code.." :(");
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 end
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 issue = issue and json.decode(issue);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 if not issue then
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 return command:reply("Got invalid JSON back :(");
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 end
129
c9da10093c51 plugins.github: Fix syntax error and wrong name
Kim Alvefur <zash@zash.se>
parents: 128
diff changeset
48 command:reply(("%s #%d\n%s"):format(issue.title, issue.number, issue.html_url));
119
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 end));
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 return true;
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 end);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 local function check_for_issue_id(message)
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 local issue_id = message.body and message.body:match"#(%d+)";
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 if issue_id then
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 return bot:event("commands/issue", { param = issue_id, reply = message.reply, });
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 end
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 end
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 bot:hook("groupchat/joining", function (room)
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 room:hook("message", check_for_issue_id);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 end);
e09157903d93 Add plugin for fetching issue info from GitHub
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 end

mercurial