minetest_modding_book/_en/players/privileges.md

3.7 KiB

title layout root idx description redirect_from
Privileges default ../.. 4.1 Registering privs. /en/chapters/privileges.html

Introduction

Privileges, often called privs for short, give players the ability to perform certain actions. Server owners can grant and revoke privileges to control which abilities each player has.

When to use Privileges

A privilege should give a player the ability to do something. Privileges are not for indicating class or status.

The main admin of a server (the name set by the name setting in the minetest.conf file) is automatically given all available privileges.

Good Privileges:

  • interact
  • shout
  • noclip
  • fly
  • kick
  • ban
  • vote
  • worldedit
  • area_admin - admin functions of one mod is ok

Bad Privileges:

  • moderator
  • admin
  • elf
  • dwarf

Declaring Privileges

Use register_privilege to declare a new privilege:

minetest.register_privilege("vote", {
    description = "Can vote on issues",
    give_to_singleplayer = true
})

If give_to_singleplayer is true, you can remove it, because true is the default when it is not specified. This simplifies the privilege registration to:

minetest.register_privilege("vote", {
    description = "Can vote on issues"
})

Checking for Privileges

To quickly check whether a player has all the required privileges:

local has, missing = minetest.check_player_privs(player_or_name,  {
    interact = true,
    vote = true })

In this example, has is true if the player has all the privileges needed.\ If has is false, then missing will contain a dictionary of missing privileges.

if minetest.check_player_privs(name, {interact=true, vote=true}) then
    print("Player has all privs!")
else
    print("Player is missing some privs!")
end

local has, missing = minetest.check_player_privs(name, {
    interact = true,
    vote = true })
if has then
    print("Player has all privs!")
else
    print("Player is missing privs: " .. dump(missing))
end

Getting and Setting Privileges

To get a table containing a player's privileges, regardless of whether the player is logged in, use minetest.get_player_privs:

local privs = minetest.get_player_privs(name)
print(dump(privs))

This example may give:

{
    fly = true,
    interact = true,
    shout = true
}

To set a player's privileges, use minetest.set_player_privs:

minetest.set_player_privs(name, {
    interact = true,
    shout = true })

To grant a player privileges, use a combination of the above two functions:

local privs = minetest.get_player_privs(name)
privs.vote = true
minetest.set_player_privs(name, privs)

Adding Privileges to basic_privs

Players with the basic_privs privilege are able to grant and revoke a limited set of privileges. It's common to give this privilege to moderators, so that they can grant and revoke interact and shout, but can't grant themselves or other players privileges such as give and server, which have greater potential for abuse.

To add a privilege to basic_privs and adjust which privileges your moderators can grant and revoke from other players, you must change the basic_privs setting. To do this, you must edit the minetest.conf file.

By default, basic_privs has the following value:

basic_privs = interact, shout

To add vote, update this to:

basic_privs = interact, shout, vote

This will allow players with basic_privs to grant and revoke the vote privilege.