Software /
code /
prosody-modules
Comparison
mod_pubsub_subscription/README.markdown @ 4511:97fac0ba0469
mod_pubsub_subscription: New module providing an API for pubsub subscriptions
This lets other modules hook events from local or remote XEP-0060 pubsub
services. API allows keeping track of items added, removed or if the
whole node gets cleared or even deleted.
Requested by MattJ.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 15 Mar 2021 16:31:23 +0100 |
comparison
equal
deleted
inserted
replaced
4510:6690586826e8 | 4511:97fac0ba0469 |
---|---|
1 # Introduction | |
2 | |
3 This module lets you programmatically subscribe to updates from a | |
4 [pubsub][xep0060] node, even if the pubsub service is remote. | |
5 | |
6 ## Example | |
7 | |
8 ``` {.lua} | |
9 module:depends("pubsub_subscription"); | |
10 module:add_item("pubsub-subscription", { | |
11 service = "pubsub.example.com"; | |
12 node = "otter_facts"; | |
13 | |
14 -- Callbacks: | |
15 on_subscribed = function() | |
16 module:log("info", "Otter facts incoming!"); | |
17 end; | |
18 | |
19 on_item = function(event) | |
20 module:log("info", "Random Otter Fact: %s", event.payload:get_text()); | |
21 end; | |
22 }); | |
23 ``` | |
24 | |
25 ## Usage | |
26 | |
27 Ensure the module is loaded and add your subscription via the | |
28 `:add_item` API. The item table MUST have `service` and `node` fields | |
29 and SHOULD have one or more `on_<event>` callbacks. | |
30 | |
31 The JID of the pubsub service is given in `service` (could also be the | |
32 JID of an user for advanced PEP usage) and the node is given in, | |
33 unsurprisingly, the `node` field. | |
34 | |
35 The various `on_event` callback functions, if present, gets called when | |
36 new events are received. The most interesting would be `on_item`, which | |
37 receives incoming items. Available events are: | |
38 | |
39 `on_subscribed` | |
40 : The subscription was successful, events may follow. | |
41 | |
42 `on_unsubscribed` | |
43 : Subscription was removed successfully, this happens if the | |
44 subscription is removed, which you would normally never do. | |
45 | |
46 `on_error` | |
47 : If there was an error subscribing to the pubsub service. Receives a | |
48 table with `type`, `condition`, `text`, and `extra` fields as | |
49 argument. | |
50 | |
51 `on_item` | |
52 : An item publication, the payload itself available in the `payload` | |
53 field in the table provided as argument. The ID of the item can be | |
54 found in `item.attr.id`. | |
55 | |
56 `on_retract` | |
57 : When an item gets retracted (removed by the publisher). The ID of | |
58 the item can be found in `item.attr.id` of the table argument.. | |
59 | |
60 `on_purge` | |
61 : All the items were removed by the publisher. | |
62 | |
63 `on_delete` | |
64 : The entire pubsub node was removed from the pubsub service. No | |
65 subscription exists after this. | |
66 | |
67 ``` {.lua} | |
68 event_payload = { | |
69 -- Common prosody event entries: | |
70 stanza = util.stanza; | |
71 origin = util.session; | |
72 | |
73 -- PubSub service details | |
74 service = "pubsub.example.com"; | |
75 node = "otter_facts"; | |
76 | |
77 -- The pubsub event itself | |
78 item = util.stanza; -- <item/> | |
79 payload = util.stanza; -- actual payload, child of <item/> | |
80 } | |
81 ``` | |
82 | |
83 # Compatibility | |
84 | |
85 Should work with Prosody \>= 0.11.x |