Software / code / prosody-modules
File
mod_report_affiliations/traits.lib.lua @ 6195:886c985ece61
mod_lastlog2: Skip initializing internal API (and storage) in prosodyctl
Initializing storage in the global context under prosodyctl causes the
module.command to fail to execute because the storage module has already
been loaded.
Introduced in 7b722955c59b
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 08 Feb 2025 14:12:18 +0100 |
| parent | 6058:e905ef16efb7 |
line wrap: on
line source
local known_traits = {}; local function trait_added(event) local trait = event.item; local name = trait.name; if known_traits[name] then return; end known_traits[name] = trait.probabilities; end local function trait_removed(event) local trait = event.item; known_traits[trait.name] = nil; end module:handle_items("account-trait", trait_added, trait_removed); local function bayes_probability(prior, prob_given_true, prob_given_false) local numerator = prob_given_true * prior; local denominator = numerator + prob_given_false * (1 - prior); return numerator / denominator; end local function prob_is_bad(traits, prior) prior = prior or 0.50; for trait, state in pairs(traits) do local probabilities = known_traits[trait]; if probabilities then if state then prior = bayes_probability( prior, probabilities.prob_bad_true, probabilities.prob_bad_false ); else prior = bayes_probability( prior, 1 - probabilities.prob_bad_true, 1 - probabilities.prob_bad_false ); end end end return prior; end local function get_probability_bad(username, prior) local user_traits = {}; module:fire_event("get-account-traits", { username = username, host = module.host, traits = user_traits }); local result = prob_is_bad(user_traits, prior); return result; end return { get_probability_bad = get_probability_bad; };