plugins/servercontact.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 140
4aa787757235
permissions
-rw-r--r--

squishy: Add missing servercontact plugin

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

mercurial