plugins/pubsub2room.lua

Fri, 11 Mar 2011 22:37:06 +0100

author
Kim Alvefur <zash@zash.se>
date
Fri, 11 Mar 2011 22:37:06 +0100
changeset 69
2d7c29310a28
child 70
22670e551879
permissions
-rw-r--r--

plugins.pubsub2room: Send pubsub events to rooms.

69
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 --[[ pubsub2room
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 relays pubsub broadcasts to rooms
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 example conf:
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 pubsub2room = {
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 ["pubsub.prosody.im#commits"] = {
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 room = "prosody@conference.prosody.im";
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 template = "${author.name} committed: ${title}";
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 };
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 };
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 --]]
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 -- FIXME Should this really be here?
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local extractor_mt = {
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 __index = function (t, k)
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local n = t.stanza;
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 for x in k:gmatch("[^.]+") do
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 n = n:get_child(x);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 if not n then return end
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 end
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 return n[1];
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 end
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 };
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local function new_extractor(stanza, ...)
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 local st = stanza:get_child(...)
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 return st and setmetatable({ stanza = st }, extractor_mt) or nil;
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 end
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 function riddim.plugins.pubsub2room(bot)
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local bare_jid = require "util.jid".bare;
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 bot:add_plugin("pubsub");
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 local config = bot.config.pubsub2room;
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 bot:hook("pubsub/event", function(event)
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 local conf = config[event.from .. "#" .. event.node];
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 local room = bot.rooms[conf.room];
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 local entry = event.item and new_extractor(event.item, "entry", "http://www.w3.org/2005/Atom")
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 -- FIXME or forever be limited to Atom!
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 if not conf or not entry or not room then return end
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 local message = conf.template:gsub("%${([^}]+)}", entry);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 room:send_message(message);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 end);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 -- FIXME When to unsubscribe?
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 bot:hook("started", function()
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 local jid = bare_jid(bot.stream.jid);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 for hostnode in pairs(config) do
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 local host, node = hostnode:match("^([^#]+)#(.*)");
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 bot.pubsub:subscribe(host, node, jid, print);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 end
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 end);
2d7c29310a28 plugins.pubsub2room: Send pubsub events to rooms.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end

mercurial