* [CSM] Add function to get player privileges + move related help functions to common
* Added @Zeno- const
end
return fine_pos
end
+
+function core.string_to_privs(str, delim)
+ assert(type(str) == "string")
+ delim = delim or ','
+ local privs = {}
+ for _, priv in pairs(string.split(str, delim)) do
+ privs[priv:trim()] = true
+ end
+ return privs
+end
+
+function core.privs_to_string(privs, delim)
+ assert(type(privs) == "table")
+ delim = delim or ','
+ local list = {}
+ for priv, bool in pairs(privs) do
+ if bool then
+ list[#list + 1] = priv
+ end
+ end
+ return table.concat(list, delim)
+end
+
+assert(core.string_to_privs("a,b").b == true)
+assert(core.privs_to_string({a=true,b=true}) == "a,b")
-- Authentication handler
--
-function core.string_to_privs(str, delim)
- assert(type(str) == "string")
- delim = delim or ','
- local privs = {}
- for _, priv in pairs(string.split(str, delim)) do
- privs[priv:trim()] = true
- end
- return privs
-end
-
-function core.privs_to_string(privs, delim)
- assert(type(privs) == "table")
- delim = delim or ','
- local list = {}
- for priv, bool in pairs(privs) do
- if bool then
- list[#list + 1] = priv
- end
- end
- return table.concat(list, delim)
-end
-
-assert(core.string_to_privs("a,b").b == true)
-assert(core.privs_to_string({a=true,b=true}) == "a,b")
-
core.auth_file_path = core.get_worldpath().."/auth.txt"
core.auth_table = {}
return false
end)
+core.register_chatcommand("privs", {
+ func = function(param)
+ return true, core.privs_to_string(minetest.get_privilege_list())
+ end,
+})
+
* `minetest.localplayer`
* Reference to the LocalPlayer object. See [`LocalPlayer`](#localplayer) class reference for methods.
+### Privileges
+* `minetest.get_privilege_list()`
+ * Returns a list of privileges the currect player has in the format `{priv1=true,...}`
+* `minetest.string_to_privs(str)`: returns `{priv1=true,...}`
+* `minetest.privs_to_string(privs)`: returns `"priv1,priv2,..."`
+ * Convert between two privilege representations
+
### Client Environment
* `minetest.get_player_names()`
* Returns list of player names on server
bool checkPrivilege(const std::string &priv) const
{ return (m_privileges.count(priv) != 0); }
+ const std::unordered_set<std::string> &getPrivilegeList() const
+ { return m_privileges; }
+
bool getChatMessage(std::wstring &message);
void typeChatMessage(const std::wstring& message);
return 0;
}
+int ModApiClient::l_get_privilege_list(lua_State *L)
+{
+ const Client *client = getClient(L);
+ lua_newtable(L);
+ for (const std::string &priv : client->getPrivilegeList()) {
+ lua_pushboolean(L, true);
+ lua_setfield(L, -2, priv.c_str());
+ }
+ return 1;
+}
void ModApiClient::Initialize(lua_State *L, int top)
{
API_FCT(get_current_modname);
API_FCT(get_item_def);
API_FCT(get_node_def);
API_FCT(take_screenshot);
+ API_FCT(get_privilege_list);
}
// get_node_def(nodename)
static int l_get_node_def(lua_State *L);
+ // take_screenshot()
static int l_take_screenshot(lua_State *L);
+ // get_privilege_list()
+ static int l_get_privilege_list(lua_State *L);
+
public:
static void Initialize(lua_State *L, int top);
};