Software /
code /
prosody
File
plugins/muc/util.lib.lua @ 13182:c48ae06e24d6
util.datamanager: Fix indexing first item if not at the very start
If the first item does not start at position 0 then the index function
produces a phantom first entry covering position zero until where the
real first item starts. When using the index, this would make it either
appear as the first item was missing or cause an off-by-one issue with
remaining items.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 10 Jul 2023 17:19:05 +0200 |
parent | 10713:38159b9adf9f |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- Copyright (C) 2014 Daurnimator -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local _M = {}; _M.valid_affiliations = { outcast = -1; none = 0; member = 1; admin = 2; owner = 3; }; _M.valid_roles = { none = 0; visitor = 1; participant = 2; moderator = 3; }; local kickable_error_conditions = { ["gone"] = true; ["internal-server-error"] = true; ["item-not-found"] = true; ["jid-malformed"] = true; ["recipient-unavailable"] = true; ["redirect"] = true; ["remote-server-not-found"] = true; ["remote-server-timeout"] = true; ["service-unavailable"] = true; ["malformed error"] = true; }; function _M.is_kickable_error(stanza) local cond = select(2, stanza:get_error()) or "malformed error"; return kickable_error_conditions[cond]; end local filtered_namespaces = module:shared("filtered-namespaces"); filtered_namespaces["http://jabber.org/protocol/muc"] = true; filtered_namespaces["http://jabber.org/protocol/muc#user"] = true; local function muc_ns_filter(tag) if filtered_namespaces[tag.attr.xmlns] then return nil; end return tag; end function _M.filter_muc_x(stanza) return stanza:maptags(muc_ns_filter); end function _M.add_filtered_namespace(xmlns) filtered_namespaces[xmlns] = true; end function _M.only_with_min_role(role) local min_role_value = _M.valid_roles[role]; return function (nick, occupant) --luacheck: ignore 212/nick if _M.valid_roles[occupant.role or "none"] >= min_role_value then return true; end end; end return _M;