mod_muc_markers/mod_muc_markers.lua
author Matthew Wild <mwild1@gmail.com>
Tue, 18 Jan 2022 17:01:18 +0000
changeset 4880 0f5f2d4475b9
parent 4698 6c57b9e31586
permissions -rw-r--r--
mod_http_xep227: Add support for import via APIs rather than direct store manipulation In particular this transitions PEP nodes and data to be imported via mod_pep's APIs, fixing issues with importing at runtime while PEP data may already be live in RAM. Next obvious candidate for this approach is rosters, so clients get immediate roster pushes and other special handling (such as emitting subscribes to reach the desired subscription state).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
-- Track messages received by users of the MUC
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
-- We rewrite the 'id' attribute of outgoing stanzas to match the stanza (archive) id
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
-- This module is therefore incompatible with the muc#stable_id feature
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
-- We rewrite the id because XEP-0333 doesn't tell clients explicitly which id to use
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
-- in marker reports. However it implies the 'id' attribute through examples, and this
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
-- is what some clients implement.
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
-- Notably Conversations will ack the origin-id instead. We need to update the XEP to
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
-- clarify the correct behaviour.
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
4069
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    11
local set = require "util.set";
4030
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    12
local st = require "util.stanza";
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    13
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
local xmlns_markers = "urn:xmpp:chat-markers:0";
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
4069
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    16
local marker_order = { "received", "displayed", "acknowledged" };
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    17
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    18
-- Add reverse mapping
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    19
for priority, name in ipairs(marker_order) do
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    20
	marker_order[name] = priority;
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    21
end
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    22
4028
95882b487ed2 mod_muc_markers: Allow configuration of which marker to track, default to displayed
Matthew Wild <mwild1@gmail.com>
parents: 3976
diff changeset
    23
local marker_element_name = module:get_option_string("muc_marker_type", "displayed");
4360
ab2e15d3f1fa mod_muc_markers: boolean should be used, not string
JC Brand <jc@opkode.com>
parents: 4341
diff changeset
    24
local marker_summary_on_join = module:get_option_boolean("muc_marker_summary_on_join", true);
4302
020dd0a59f1f mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
Matthew Wild <mwild1@gmail.com>
parents: 4075
diff changeset
    25
local rewrite_id_attribute = module:get_option_boolean("muc_marker_rewrite_id", false);
4069
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    26
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    27
assert(marker_order[marker_element_name], "invalid marker name: "..marker_element_name);
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    28
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    29
local marker_element_names = set.new();
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    30
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    31
-- "displayed" implies "received", etc. so we'll add the
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    32
-- chosen marker and any "higher" ones to the set
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    33
for i = marker_order[marker_element_name], #marker_order do
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    34
	marker_element_names:add(marker_order[i]);
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
    35
end
4028
95882b487ed2 mod_muc_markers: Allow configuration of which marker to track, default to displayed
Matthew Wild <mwild1@gmail.com>
parents: 3976
diff changeset
    36
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
local muc_marker_map_store = module:open_store("muc_markers", "map");
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
local function get_stanza_id(stanza, by_jid)
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
	for tag in stanza:childtags("stanza-id", "urn:xmpp:sid:0") do
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
		if tag.attr.by == by_jid then
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
			return tag.attr.id;
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
		end
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
	end
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
	return nil;
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
end
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
module:hook("muc-broadcast-message", function (event)
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
	local stanza = event.stanza;
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    50
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    51
	local archive_id = get_stanza_id(stanza, event.room.jid);
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    52
	-- We are not interested in stanzas that didn't get archived
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    53
	if not archive_id then return; end
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    54
4302
020dd0a59f1f mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
Matthew Wild <mwild1@gmail.com>
parents: 4075
diff changeset
    55
	if rewrite_id_attribute then
020dd0a59f1f mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
Matthew Wild <mwild1@gmail.com>
parents: 4075
diff changeset
    56
		-- Add stanza id as id attribute
020dd0a59f1f mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
Matthew Wild <mwild1@gmail.com>
parents: 4075
diff changeset
    57
		stanza.attr.id = archive_id;
020dd0a59f1f mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
Matthew Wild <mwild1@gmail.com>
parents: 4075
diff changeset
    58
	end
020dd0a59f1f mod_muc_markers: Add option for @id rewriting, default off (may break some clients)
Matthew Wild <mwild1@gmail.com>
parents: 4075
diff changeset
    59
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    60
	-- Add markable element to request markers from clients
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    61
	stanza:tag("markable", { xmlns = xmlns_markers }):up();
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    62
end, -1);
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    63
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    64
module:hook("muc-occupant-groupchat", function (event)
4037
7b6bcb91493e mod_muc_markers: Allow tracking multiple markers
Matthew Wild <mwild1@gmail.com>
parents: 4036
diff changeset
    65
	local marker = event.stanza:child_with_ns(xmlns_markers);
7b6bcb91493e mod_muc_markers: Allow tracking multiple markers
Matthew Wild <mwild1@gmail.com>
parents: 4036
diff changeset
    66
	if not marker or not marker_element_names:contains(marker.name) then
7b6bcb91493e mod_muc_markers: Allow tracking multiple markers
Matthew Wild <mwild1@gmail.com>
parents: 4036
diff changeset
    67
		return; -- No marker, or not one we are interested in
7b6bcb91493e mod_muc_markers: Allow tracking multiple markers
Matthew Wild <mwild1@gmail.com>
parents: 4036
diff changeset
    68
	end
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    69
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
	-- Store the id that the user has received to
4075
8e28d0918abc mod_muc_markers: Add room JID to log message
Matthew Wild <mwild1@gmail.com>
parents: 4069
diff changeset
    71
	module:log("warn", "New marker for %s in %s: %s", event.occupant.bare_jid, event.room.jid, marker.attr.id);
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
	muc_marker_map_store:set(event.occupant.bare_jid, event.room.jid, marker.attr.id);
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
4029
57b4cdeba318 mod_muc_markers: Prevent storage instead of broadcast
Kim Alvefur <zash@zash.se>
parents: 4028
diff changeset
    74
end);
57b4cdeba318 mod_muc_markers: Prevent storage instead of broadcast
Kim Alvefur <zash@zash.se>
parents: 4028
diff changeset
    75
57b4cdeba318 mod_muc_markers: Prevent storage instead of broadcast
Kim Alvefur <zash@zash.se>
parents: 4028
diff changeset
    76
module:hook("muc-message-is-historic", function (event)
4519
2e33eeafe962 mod_muc_markers: Prevent any markers from reaching the archive, even if untracked
Matthew Wild <mwild1@gmail.com>
parents: 4360
diff changeset
    77
	local marker = event.stanza:get_child(nil, xmlns_markers);
4029
57b4cdeba318 mod_muc_markers: Prevent storage instead of broadcast
Kim Alvefur <zash@zash.se>
parents: 4028
diff changeset
    78
4698
6c57b9e31586 mod_muc_markers: Don't skip archiving markable messages (thanks nicoco)
Matthew Wild <mwild1@gmail.com>
parents: 4519
diff changeset
    79
	if marker and marker.name ~= "markable" then
6c57b9e31586 mod_muc_markers: Don't skip archiving markable messages (thanks nicoco)
Matthew Wild <mwild1@gmail.com>
parents: 4519
diff changeset
    80
		-- Prevent stanza from reaching the archive (it's just noise)
4519
2e33eeafe962 mod_muc_markers: Prevent any markers from reaching the archive, even if untracked
Matthew Wild <mwild1@gmail.com>
parents: 4360
diff changeset
    81
		return false;
4029
57b4cdeba318 mod_muc_markers: Prevent storage instead of broadcast
Kim Alvefur <zash@zash.se>
parents: 4028
diff changeset
    82
	end
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
end);
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
4030
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    85
local function find_nickname(room, user_jid)
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    86
	-- Find their current nickname
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    87
	for nick, occupant in pairs(room._occupants) do
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    88
		if occupant.bare_jid == user_jid then
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    89
			return nick;
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    90
		end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    91
	end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    92
	-- Or if they're not here
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    93
	local nickname = room:get_affiliation_data(user_jid, "reserved_nickname");
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    94
	if nickname then return room.jid.."/"..nickname; end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    95
end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    96
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    97
-- Synthesize markers
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    98
if muc_marker_map_store.get_all then
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
    99
module:hook("muc-occupant-session-new", function (event)
4341
83f89ffe427b mod_muc_markers: Add config setting to turn off sending of markers on MUC join
JC Brand <jc@opkode.com>
parents: 4302
diff changeset
   100
	if  not marker_summary_on_join then
83f89ffe427b mod_muc_markers: Add config setting to turn off sending of markers on MUC join
JC Brand <jc@opkode.com>
parents: 4302
diff changeset
   101
		return;
83f89ffe427b mod_muc_markers: Add config setting to turn off sending of markers on MUC join
JC Brand <jc@opkode.com>
parents: 4302
diff changeset
   102
	end
4030
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   103
	local room, to = event.room, event.stanza.attr.from;
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   104
	local markers = muc_marker_map_store:get_all(room.jid);
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   105
	if not markers then return end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   106
	for user_jid, id in pairs(markers) do
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   107
		local room_nick = find_nickname(room, user_jid);
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   108
		if room_nick then
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   109
			local recv_marker = st.message({ type = "groupchat", from = room_nick, to = to })
4069
92152437ecfe mod_muc_markers: replace configurable multi-marker tracking with better system
Matthew Wild <mwild1@gmail.com>
parents: 4060
diff changeset
   110
				:tag(marker_element_name, { xmlns = xmlns_markers, id = id });
4030
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   111
			room:route_stanza(recv_marker);
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   112
		end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   113
	end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   114
end);
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   115
end
e3964f876b5d mod_muc_markers: Broadcast current markers on join
Kim Alvefur <zash@zash.se>
parents: 4029
diff changeset
   116
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
-- Public API
4036
787fc3030087 mod_muc_markers: luacheck annotation
Matthew Wild <mwild1@gmail.com>
parents: 4030
diff changeset
   118
--luacheck: ignore 131
3976
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
function get_user_read_marker(user_jid, room_jid)
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   121
	return muc_marker_map_store:get(user_jid, room_jid);
45c5603a6c07 mod_muc_markers: New module for server-side receipt tracking in MUCs
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
end
4060
554f64c8d0c0 mod_muc_markers: Expose is_markable utility function to other modules
Matthew Wild <mwild1@gmail.com>
parents: 4037
diff changeset
   123
554f64c8d0c0 mod_muc_markers: Expose is_markable utility function to other modules
Matthew Wild <mwild1@gmail.com>
parents: 4037
diff changeset
   124
function is_markable(stanza)
554f64c8d0c0 mod_muc_markers: Expose is_markable utility function to other modules
Matthew Wild <mwild1@gmail.com>
parents: 4037
diff changeset
   125
	return not not stanza:get_child("markable", xmlns_markers);
554f64c8d0c0 mod_muc_markers: Expose is_markable utility function to other modules
Matthew Wild <mwild1@gmail.com>
parents: 4037
diff changeset
   126
end