Software /
code /
prosody-modules
Comparison
mod_track_muc_joins/README.markdown @ 2409:b426f1d46938
mod_track_muc_joins/README: Add some example code
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 03 Dec 2016 15:01:15 +0100 |
parent | 2081:73096d8d924c |
child | 2411:e327b06b9a1b |
comparison
equal
deleted
inserted
replaced
2408:9d132153d786 | 2409:b426f1d46938 |
---|---|
1 --- | 1 --- |
2 summary: Keep track of joined chat rooms | 2 summary: Keep track of joined chat rooms |
3 ... | 3 ... |
4 | 4 |
5 # Introduction | |
6 | |
5 This module attempts to keep track of what MUC chat rooms users have | 7 This module attempts to keep track of what MUC chat rooms users have |
6 joined. It's not very useful on its own, but can be used by other | 8 joined. It's not very useful on its own, but can be used by other |
7 modules to influence decisions. | 9 modules to influence decisions. |
10 | |
11 # Usage | |
12 | |
13 Rooms joined and the associated nickname is kept in a table field | |
14 `rooms_joined` on the users session. | |
15 | |
16 An example: | |
17 | |
18 ``` lua | |
19 local jid_bare = require"util.jid".bare; | |
20 | |
21 module:hook("message/full", function (event) | |
22 local stanza = event.stanza; | |
23 local session = prosody.full_sessions[stanza.attr.to]; | |
24 if not session then | |
25 return -- No such session | |
26 end | |
27 | |
28 local joined_rooms = session.joined_rooms; | |
29 if not joined_rooms then | |
30 return -- This session hasn't joined any rooms at all | |
31 end | |
32 | |
33 -- joined_rooms is a map of room JID -> room nickname | |
34 local nickname = joined_rooms[jid_bare(stanza.attr.from)]; | |
35 if nickname then | |
36 session.log("info", "Got a MUC message from %s", stanza.attr.from); | |
37 | |
38 local body = stanza:get_child_text("body"); | |
39 if body and body:find(nickname, 1, true) then | |
40 session.log("info", "The message contains my nickname!"); | |
41 end | |
42 end | |
43 end); | |
44 ``` |