12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- --- @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.result = result
- -- if org is empty, consent is given automatically
- if self.org:get_member_count() == 0 then
- self.result()
- 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.result then self.result() end
- self.org:wipe_pending_actions(self.id)
- end
- end
- )
- end
- modpol.modules.consent = consent
|