modpol/modpol_core/modules/consent.lua
2021-12-18 20:41:49 -07:00

54 lines
1.3 KiB
Lua

--- @module consent
-- A utility module for checking consent
local consent = {
name = "Consent",
slug = "consent",
desc = "Other modules can use to implement consent based decision making",
}
consent.data = {
votes = 0
}
consent.config = {
prompt = "Do you consent?",
votes_required = 1
}
function consent:initiate(result)
self.data.result = result
-- if org is empty, consent is given automatically
if self.org:get_member_count() == 0 then
if self.data.result then
self.data.result() end
self.org:wipe_pending_actions(self.id)
else
-- otherwise, create poll
for id, member in pairs(self.org.members) do
self.org:add_pending_action(self.id, member, "callback")
end
end
end
function consent:callback(member)
modpol.interactions.binary_poll_user(
member,
self.config.prompt,
function (resp)
self.org:remove_pending_action(self.id,member)
if resp == "Yes" then
self.data.votes = self.data.votes + 1
end
if self.data.votes >= self.config.votes_required then
if self.data.result then
self.data.result() end
self.org:wipe_pending_actions(self.id)
self.org:delete_process(self.id)
end
end
)
end
modpol.modules.consent = consent