Fri, 07 Aug 2020 12:26:15 +0100
config.docker.lua: Add to repo, used by default for Docker images
140
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 | local disco_info = "http://jabber.org/protocol/disco#info"; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 | local verse = require "verse" |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 | local riddim = require "riddim" |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 | |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 | local dataform = require "util.dataforms".new; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 | |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 | local serverinfo_form = dataform { |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 | { value = "http://jabber.org/network/serverinfo"; type = "hidden"; name = "FORM_TYPE"; }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 | { name = "abuse-addresses", type = "list-multi" }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 | { name = "admin-addresses", type = "list-multi" }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 | { name = "feedback-addresses", type = "list-multi" }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 | { name = "sales-addresses", type = "list-multi" }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 | { name = "security-addresses", type = "list-multi" }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 | { name = "support-addresses", type = "list-multi" }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 | }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 | |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 | local valid_types = { |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 | abuse = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 | admin = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 | feedback = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 | sales = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 | security = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 | support = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 | }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 | |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 | function riddim.plugins.servercontact(bot) |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 | bot:hook("commands/contact", function (command) |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 | local target, typ = command.param; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 | if not target then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 | return "Which server?"; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 | elseif target:find("%s") then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 | typ, target = target:match("(%a+)%s*(%S+)"); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 | if not valid_types[typ] then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 | command:reply("Valid types are abuse, admin, feedback, sales, security and support"); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 | return; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 | if target:find("[@/]") then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 | target = target:match("@?([^@/]+)/?"); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 | bot.stream:send_iq(verse.iq({ type = "get", to = target }):query(disco_info), function (reply) |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 | if reply.attr.type == "error" then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 | local _, condition, text = reply:get_error(); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 | command:reply(("Could not reach %s: %s"):format(command.param, text or condition)); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 | return |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 | |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 | for form in reply.tags[1]:childtags("x", "jabber:x:data") do |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 | local data = serverinfo_form:data(form); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 | if data.FORM_TYPE == serverinfo_form[1].value then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 | if typ then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 | local addresses = data[typ .. "-addresses"]; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 | if addresses and addresses[1] then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 | command:reply(("%s contacts for %s %s: %s"):format(typ:gsub("^.", string.upper), target, addresses[2] and "are" or "is", table.concat(addresses, " "))); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 | else |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 | command:reply(target .. " doesn't have any contact addresses for "..typ); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 | else |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 | local addresses_kinds = {}; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 | for kind, addresses in pairs(data) do |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 | kind = kind:sub(1,-11); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 | if valid_types[kind] then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 | for _, addr in ipairs(addresses) do |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 | local a = addresses_kinds[addr]; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 | if not a then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 | addresses_kinds[addr] = { |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 | kind, [kind] = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 | }; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 | elseif a and not a[kind] then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 | table.insert(a, kind) |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 | a[kind] = true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 | if next(addresses_kinds) ~= nil then |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 | local reply = {"Contact addresses for", target, "is"}; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 | for addr, kinds in pairs(addresses_kinds) do |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 | if kinds[2] then reply[3] = "are" end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 | table.insert(reply, addr); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 | table.insert(reply, "(" .. table.concat(kinds, ", ") .. ")"); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 | if reply[6] then reply[3] = "are" end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 | command:reply(table.concat(reply, " ")); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 | break; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 | command:reply(target .. " doesn't have any contact addresses"); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 | end); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 | return true; |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 | end); |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 | end |
4aa787757235
riddim.plugins.servercontact: Query for XEP-0157: Contact Addresses for XMPP Services
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 |