Sun, 20 May 2018 01:57:58 +0200
riddim.plugins.pubsub2room: Return early from extractor if no stanza given
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 |