+minetest.register_chatcommand("rollback", {
+ params = "<player name> [<seconds>] | :<actor> [<seconds>]",
+ description = "revert actions of a player; default for <seconds> is 60",
+ privs = {rollback=true},
+ func = function(name, param)
+ local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
+ if not target_name then
+ local player_name = nil;
+ player_name, seconds = string.match(param, "([^ ]+) *(%d*)")
+ if not player_name then
+ minetest.chat_send_player(name, "Invalid parameters. See /help rollback and /help rollback_check")
+ return
+ end
+ target_name = "player:"..player_name
+ end
+ seconds = tonumber(seconds) or 60
+ minetest.chat_send_player(name, "Reverting actions of "..
+ dump(target_name).." since "..dump(seconds).." seconds.")
+ local success, log = minetest.rollback_revert_actions_by(
+ target_name, seconds)
+ if #log > 10 then
+ minetest.chat_send_player(name, "(log is too long to show)")
+ else
+ for _,line in ipairs(log) do
+ minetest.chat_send_player(name, line)
+ end
+ end
+ if success then
+ minetest.chat_send_player(name, "Reverting actions succeeded.")
+ else
+ minetest.chat_send_player(name, "Reverting actions FAILED.")
+ end
+ end,
+})
+
+minetest.register_chatcommand("status", {
+ params = "",
+ description = "print server status line",
+ privs = {},
+ func = function(name, param)
+ minetest.chat_send_player(name, minetest.get_server_status())
+ end,
+})
+
+minetest.register_chatcommand("time", {
+ params = "<0...24000>",
+ description = "set time of day",
+ privs = {settime=true},
+ func = function(name, param)
+ if param == "" then
+ minetest.chat_send_player(name, "Missing parameter")
+ return
+ end
+ local newtime = tonumber(param)
+ if newtime == nil then
+ minetest.chat_send_player(name, "Invalid time")
+ else
+ minetest.env:set_timeofday((newtime % 24000) / 24000)
+ minetest.chat_send_player(name, "Time of day changed.")
+ minetest.log("action", name .. " sets time " .. newtime)
+ end
+ end,
+})
+
+minetest.register_chatcommand("shutdown", {
+ params = "",
+ description = "shutdown server",
+ privs = {server=true},
+ func = function(name, param)
+ minetest.log("action", name .. " shuts down server")
+ minetest.request_shutdown()
+ minetest.chat_send_all("*** Server shutting down (operator request).")
+ end,
+})
+
+minetest.register_chatcommand("ban", {
+ params = "<name>",
+ description = "ban IP of player",
+ privs = {ban=true},
+ func = function(name, param)
+ if param == "" then
+ minetest.chat_send_player(name, "Ban list: " .. minetest.get_ban_list())
+ return
+ end
+ if not minetest.env:get_player_by_name(param) then
+ minetest.chat_send_player(name, "No such player")
+ return
+ end
+ if not minetest.ban_player(param) then
+ minetest.chat_send_player(name, "Failed to ban player")
+ else
+ local desc = minetest.get_ban_description(param)
+ minetest.chat_send_player(name, "Banned " .. desc .. ".")
+ minetest.log("action", name .. " bans " .. desc .. ".")
+ end
+ end,
+})
+
+minetest.register_chatcommand("unban", {
+ params = "<name/ip>",
+ description = "remove IP ban",
+ privs = {ban=true},
+ func = function(name, param)
+ if not minetest.unban_player_or_ip(param) then
+ minetest.chat_send_player(name, "Failed to unban player/IP")
+ else
+ minetest.chat_send_player(name, "Unbanned " .. param)
+ minetest.log("action", name .. " unbans " .. param)
+ end
+ end,
+})
+
+minetest.register_chatcommand("clearobjects", {
+ params = "",
+ description = "clear all objects in world",
+ privs = {server=true},
+ func = function(name, param)
+ minetest.log("action", name .. " clears all objects")
+ minetest.chat_send_all("Clearing all objects. This may take long. You may experience a timeout. (by " .. name .. ")")
+ minetest.env:clear_objects()
+ minetest.log("action", "object clearing done")
+ minetest.chat_send_all("*** Cleared all objects.")
+ end,
+})