123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- -- ===================================================================
- -- /orgs.lua
- -- User interaction functions for Modular Politics
- -- Called by modpol.lua
- modpol.interactions = {}
- -- DASHBOARDS
- -- ==========
- -- Function: modpol.dashboard(user)
- -- Params: user (string)
- -- Q: Should this return a menu of commands relevant to the specific user?
- -- Output: Displays a menu of commands to the user
- -- TKTK currently just prints all of modpol---needs major improvement
- function modpol.dashboard(user)
- local output = ""
- -- Org status
- output = output .. "Orgs:\n" ..
- table.concat(modpol.orgs.list_all(),"\n")
- -- Command list (should be redone to be org-specific)
- output = output .. "\nCommand list:\n"
- for key,value in pairs(modpol) do
- output = output .. "modpol." .. key .. " "
- end
- print(output)
- end
- -- Function: modpol.interactions.org_dashboard
- -- Params: user (string), org_name (string)
- -- Output: Displays a menu of org-specific commands to the user
- function modpol.interactions.org_dashboard(user, org_name)
- local org = modpol.orgs.get_org(org_name)
- if not org then return nil end
- local is_member = org:has_member(user)
- local membership_toggle = function()
- local toggle_code = ""
- if is_member then
- toggle_code = "[Leave]"
- else
- toggle_code = "[Join]"
- end
- return toggle_code
- end
- local children = {}
- for k,v in ipairs(org.children) do
- local this_child = modpol.orgs.get_org(v)
- table.insert(children, this_child.name)
- end
- -- set up output
- local dashboard_table = {
- "Org: " .. org_name,
- membership_toggle(),
- "Members: " .. table.concat(org.members, ", "),
- "Children: " .. table.concat(children, ", "),
- "Policies: " .. table.concat(org.policies, ", "),
- "Processes: " .. table.concat(org.processes, ", "),
- "[Add child]",
- "[Remove org]",
- "[Dashboard: modpol.dashboard()]"
- }
- -- present to player
- print(table.concat(dashboard_table, "\n"))
- end
- -- ===================================================================
- -- Function: modpol.interactions.message
- -- input: user (string), message (string)
- -- output: prints message to CLI
- function modpol.interactions.message(user, message)
- print(user .. ": " .. message)
- end
- -- ===================================================================
- -- Function: modpol.interactions.text_query
- -- input: Query (string)
- -- output: User response (string)
- function modpol.interactions.text_query(query)
- -- TODO
- end
- -- ===================================================================
- -- Function: modpol.binary_poll_user(user, question)
- -- Params: user (string), question (string)
- -- Output:
- -- presents a yes/no/abstain poll to a user, returns answer
- function modpol.interactions.binary_poll_user(user, question)
- local query = "Poll for " .. user .. " (y/n): ".. question
- local answer
- repeat
- print(query)
- answer = io.read()
- until answer == "y" or answer == "n" or answer == "a"
- if answer == "y" then
- return "Yes"
- elseif answer == "n" then
- return "No"
- else
- return "Abstain"
- end
- end
|