view mod_report_affiliations/traits.lib.lua @ 6083:ffd0184cd478

mod_compliance_latest: New module that depends on and therefore loads the latest compliance tester mod. diff --git a/mod_compliance_latest/README.md b/mod_compliance_latest/README.md new file mode 100644 --- /dev/null +++ b/mod_compliance_latest/README.md @@ -0,0 +1,25 @@ +--- +summary: XMPP Compliance Suites self-test +labels: +- Stage-Beta +rockspec: + dependencies: + - mod_compliance_2023 +... + +# Introduction + +This module will always require and load to the lastest compliance tester we have in the community modules. +Currently this is [mod_compliance_2023]. + +# Configuration + +Just load this module as any other module and it will automatically install [mod_compliance_2023] if you use the Prosody plugin installer. +See the linked module for further details. + +# Compatibility + + Prosody-Version Status + --------------- ---------------------- + trunk Works as of 2024-12-22 + 0.12 Works diff --git a/mod_compliance_latest/mod_compliance_latest.lua b/mod_compliance_latest/mod_compliance_latest.lua new file mode 100644 --- /dev/null +++ b/mod_compliance_latest/mod_compliance_latest.lua @@ -0,0 +1,1 @@ +module:depends("compliance_2023");
author Menel <menel@snikket.de>
date Sun, 22 Dec 2024 18:12:42 +0100
parents e905ef16efb7
children
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;
};