# HG changeset patch # User Matthew Wild # Date 1774435520 0 # Node ID 4226e6aadbd83e36e0edf0e84f0ee523a7fc2154 # Parent 3b0cfef7fabe1ffc1b39e7eb8f18eecfd2cef8bb mod_muc_auto_role: Add account age threshold diff -r 3b0cfef7fabe -r 4226e6aadbd8 mod_muc_auto_role/mod_muc_auto_role.lua --- a/mod_muc_auto_role/mod_muc_auto_role.lua Wed Mar 25 10:23:52 2026 +0000 +++ b/mod_muc_auto_role/mod_muc_auto_role.lua Wed Mar 25 10:45:20 2026 +0000 @@ -1,9 +1,11 @@ local jid = require "prosody.util.jid"; +local datetime = require "prosody.util.datetime"; local xmlns_aff = "urn:xmpp:raa:0"; local raa_servers = module:get_option_set("muc_auto_role_trusted_servers", {}); local trust_threshold = module:get_option_integer("muc_auto_role_trust_threshold", 51, 0, 100); +local age_threshold = module:get_option_period("muc_auto_role_age_threshold", "1d"); local untrusted_servers = module:get_option_set("muc_auto_role_untrusted_servers", {}); @@ -41,15 +43,17 @@ local aff = raa.attr.affiliation; local trust = tonumber(raa.attr.trust) or 50; + local since = raa.attr.since and datetime.parse(raa.attr.since); + local age = since and (os.time() - since); - if aff == "member" or aff == "admin" or trust >= trust_threshold then + if (aff == "member" or aff == "admin") or (trust >= trust_threshold and (not age or age >= age_threshold)) then event.occupant.role = "participant"; else event.occupant.role = "visitor"; end - module:log("debug", "Assigning <%s> role '%s' due to affiliation %s and trust score %d of <%s>", - event.occupant.nick, event.occupant.role, aff, trust, stanza.attr.from + module:log("debug", "Assigning <%s> role '%s' due to affiliation %s, trust score %d, age %d of <%s>", + event.occupant.nick, event.occupant.role, aff, trust, age or -1, stanza.attr.from ); end);