From 28e2710efc3b84f4b634347b92d4c0745e886393 Mon Sep 17 00:00:00 2001 From: Nathan Schneider Date: Thu, 16 Dec 2021 15:07:26 -0700 Subject: [PATCH] CLI interactions updated for modules-as-actions --- README.md | 7 +-- modpol/interactions/interactions.lua | 80 ++++++++++++++-------------- modpol/orgs/base.lua | 8 +-- 3 files changed, 45 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 954d1a6..ca858a4 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,12 @@ In the game, open the Modular Politics interface with the command `/modpol`. Modular Politics can also be used independently of Minetest as a command-line tool. Currently command-line use of modpol requires a Unix-style system, but it is intended to become more fully platform independent. -The command-line version is in the `modpol` subdirectory. To interact with the interpreter on Unix systems in CLI mode, install lua or luajit and execute the following command in this directory: +The command-line version is in the `modpol` subdirectory. To interact with the interpreter on Unix systems in CLI mode, install lua or luajit and execute the following in this directory: ``` -$ cd modpol/ +$ cd modpol/interacctions/ $ lua [or luajit] -> dofile("modpol.lua") +> dofile("login.lua") ``` For a list of global functions and tables, use `modpol.menu()`. @@ -45,6 +45,7 @@ Other contributors include: * [Luke Miller](https://gitlab.com/lukvmil) (main control flow, object orientation, module spec) * [MisterE](https://gitlab.com/gbrrudmin) (project refactoring, core feature development) * Robert Kiraly [[OldCoder](https://github.com/oldcoder/)] (ocutils.lua, storage-local.lua, project refactoring) +* Skylar Hew (documentation) We'd love to welcome more contributors, particularly from the Minetest community! Please join the conversation in the [Issues](https://gitlab.com/medlabboulder/modpol/-/issues) or the [Minetest.net forum](https://forum.minetest.net/viewtopic.php?f=47&t=26037). diff --git a/modpol/interactions/interactions.lua b/modpol/interactions/interactions.lua index d51f47b..5e2bddf 100644 --- a/modpol/interactions/interactions.lua +++ b/modpol/interactions/interactions.lua @@ -38,10 +38,12 @@ function modpol.interactions.dashboard(user) local sel = io.read() print() - local sel_org = modpol.orgs.array[tonumber(sel)].name - if not sel_org then return end - + if modpol.orgs.array[tonumber(sel)] then + local sel_org = modpol.orgs.array[tonumber(sel)].name + else + return + end modpol.interactions.org_dashboard(user, sel_org) end @@ -53,6 +55,7 @@ function modpol.interactions.org_dashboard(user, org_name) local org = modpol.orgs.get_org(org_name) if not org then return nil end + -- identify parent local parent = "" if org.id == 1 then parent = "none" @@ -60,66 +63,65 @@ function modpol.interactions.org_dashboard(user, org_name) parent = modpol.orgs.get_org(org.parent).name end + -- identify children 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 - local process_msg = #org.processes .. " total" + -- list available modules + local org_modules = {} + for k,v in ipairs(org.modules) do + table.insert(org_modules, org.modules[k].slug) + end + -- list pending actions + local process_msg = #org.processes .. " total actions" if org.pending[user] then process_msg = process_msg .. " (" .. #org.pending[user] .. " pending)" else process_msg = process_msg .. " (0 pending)" end - -- set up output print("Org: " .. org_name) print("Parent: " .. parent) print("Members: " .. table.concat(org.members, ", ")) print("Children: " .. table.concat(children, ", ")) - print("Processes: " .. process_msg) + print("Modules: " .. table.concat(org_modules, ", ")) + print("Actions: " .. process_msg) print() - print("Commands: (L)eave, (J)oin, (P)rocesses, (A)dd child, (D)elete org") + print("Commands: (M)odules, (A)ctions") local sel = io.read() print() - if sel == 'l' or sel == 'L' then - org:remove_member(user) - - elseif sel == 'j' or sel == 'J' then - org:make_request({user=user, type="add_member", params={user}}) - + if sel == 'm' or sel == 'M' then + print("Type module name: ") + local module_sel = io.read() + print() + local module_result = false + for k,v in ipairs(org_modules) do + if v == module_sel then + module_result = true + end + end + if module_result then + org:call_module(module_sel, user) + else + print("Error: Module not found.") + end + elseif sel == 'a' or sel == 'A' then - print("What should the new org be named?") - local new_org_name = io.read() - org:make_request({user=user, type="add_org", params={new_org_name}}) - - elseif sel == 'd' or sel == 'D' then - org:make_request({user=user, type="delete", params={}}) - - elseif sel == 'p' or sel == 'P' then local processes = {} print("All processes: (* indicates pending action)") for k,v in ipairs(org.processes) do - local this_request = org.requests[v.request_id] - if type(this_request) == "table" then - local active = '' - if org.pending[user] then - if org.pending[user][v.id] then - active = '*' - end + local active = '' + if org.pending[user] then + if org.pending[user][v.id] then + active = '*' end - local req_str = "[" .. v.id .. "] " .. - active .. this_request.type - if this_request.params[1] then - req_str = req_str .. ": " .. - table.concat(this_request.params, ", ") - end - print(req_str) end end print() @@ -129,14 +131,12 @@ function modpol.interactions.org_dashboard(user, org_name) if not process then return end if org:has_pending_actions(user) then if org.pending[user][process.id] then - process:interact(user) + org:interact(process.id, user) end end + else + print("Command not found") end - - - - end -- Function: modpol.interactions.policy_dashboard diff --git a/modpol/orgs/base.lua b/modpol/orgs/base.lua index f26523c..2211e6e 100644 --- a/modpol/orgs/base.lua +++ b/modpol/orgs/base.lua @@ -11,14 +11,8 @@ function temp_org() return { id = nil, name = nil, - policies = { - add_org={process_type='consent', must_be_member=false}, - delete={process_type='consent', must_be_member=false}, - add_member={process_type='consent', must_be_member=false}, - remove_member={process_type='consent', must_be_member=false} - }, + modules = modpol.modules, processes = {}, - -- requests = {}, pending = {}, members = {}, parent = nil,