master
AiTechEye 2018-12-22 11:24:49 +01:00 committed by GitHub
parent 856f4726e6
commit f1cc37880b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 228 additions and 228 deletions

106
functions.lua Normal file
View File

@ -0,0 +1,106 @@
minetest.register_on_newplayer(function(player)
minetest.after(0.1,function(player)
local name=player:get_player_name()
local privs=minetest.get_player_privs(name)
privs.scguest=true
minetest.set_player_privs(name,privs)
end,player)
end)
minetest.register_on_joinplayer(function(player)
local name=player:get_player_name()
local privs=minetest.get_player_privs(name)
if privs.scguest then
privs.scguest=nil
minetest.set_player_privs(name,privs)
end
end)
servercleaner.register_owner_node=function(node,action)
if type(node)=="table" then
for i, n in pairs(node) do
if minetest.get_modpath(n:sub(0,n:find(":")-1)) then
table.insert(servercleaner.nodes,n)
servercleaner.node_actions[n]=action or servercleaner.reset_owner
end
end
else
if minetest.get_modpath(node:sub(0,node:find(":")-1)) then
table.insert(servercleaner.nodes,node)
servercleaner.node_actions[node]=action or servercleaner.reset_owner
end
end
end
servercleaner.register_on_delete=function(mod_depends,action)
if minetest.get_modpath(mod_depends) then
servercleaner.actions[mod_depends]=action
end
end
servercleaner.reset_owner=function(pos,node)
local meta=minetest.get_meta(pos)
local owner=meta:get_string("owner")
if owner~="" and not minetest.player_exists(owner) then
meta:set_string("owner","")
local def=minetest.registered_nodes[node.name]
if def and def.description then
meta:set_string("infotext", def.description .. " (Abandoned)")
else
meta:set_string("infotext", "Abandoned")
end
end
end
servercleaner.remove_owned_node=function(pos,node)
local meta=minetest.get_meta(pos)
local owner=meta:get_string("owner")
if owner~="" and not minetest.player_exists(owner) then
minetest.remove_node(pos)
end
end
servercleaner.outdated_player=function(name)
local a=minetest.get_auth_handler().get_auth(name)
if not a then
return
end
local diff=os.difftime(os.time(), a.last_login) / (24 * 60 * 60)
if diff>=servercleaner.players then
servercleaner.delete_player(name)
elseif diff>=servercleaner.guest and minetest.check_player_privs(name, {scguest=true}) and not minetest.check_player_privs(name, {scadmin=true}) then
servercleaner.delete_player(name)
elseif diff>servercleaner.revoke_moderator and minetest.check_player_privs(name, {scmoderator=true}) and not minetest.check_player_privs(name, {dont_delete=true}) then
local s=minetest.settings:get("default_privs") or ""
local privs={}
for i, p in pairs(s.split(s,", ")) do
privs[p]=true
end
minetest.set_player_privs(name,privs)
minetest.log("Moderator " .. name .."downgraded to player (" .. servercleaner.revoke_moderator .. " days expired)")
end
end
servercleaner.delete_player=function(name,by)
if minetest.check_player_privs(name, {dont_delete=true}) then
if by then
minetest.chat_send_player(by,"player " .. name .. " has the dont_delete privilege, and will not be deleted")
end
return
end
minetest.log("Delete player " .. name .. " (" .. ((by and "by " .. by ..")") or servercleaner.players .. " days expired)"))
for i, action in pairs(servercleaner.actions) do
action(name)
end
if minetest.get_player_by_name(name) then
minetest.kick_player(name, "Account Deleted")
end
minetest.after(1,function(name,by)
minetest.remove_player_auth(name)
local del=minetest.remove_player(name)
if by and del then
minetest.chat_send_player(by,"player " .. name .. " deleted")
end
end,name,by)
end

235
init.lua
View File

@ -12,203 +12,9 @@ servercleaner={
--local servercleaner_storage=minetest.get_mod_storage()
--servercleaner_storage:set_string("players",string.gsub(servercleaner_storage:get_string("players")," " .. name .." ",""))
minetest.register_on_newplayer(function(player)
minetest.after(0.1,function(player)
local name=player:get_player_name()
local privs=minetest.get_player_privs(name)
privs.scguest=true
minetest.set_player_privs(name,privs)
end,player)
end)
minetest.register_on_joinplayer(function(player)
local name=player:get_player_name()
local privs=minetest.get_player_privs(name)
if privs.scguest then
privs.scguest=nil
minetest.set_player_privs(name,privs)
end
end)
minetest.register_privilege("scguest", {
description = "Guest",
give_to_singleplayer= false,
})
minetest.register_privilege("dont_delete", {
description = "Will not be deleted",
give_to_singleplayer= false,
})
minetest.register_privilege("scmoderator", {
description = "Moderator",
give_to_singleplayer= false,
})
minetest.register_privilege("scadmin", {
description = "Admin",
give_to_singleplayer= false,
})
servercleaner.register_owner_node=function(node,action)
if type(node)=="table" then
for i, n in pairs(node) do
if minetest.get_modpath(n:sub(0,n:find(":")-1)) then
table.insert(servercleaner.nodes,n)
servercleaner.node_actions[n]=action or servercleaner.reset_owner
end
end
else
if minetest.get_modpath(node:sub(0,node:find(":")-1)) then
table.insert(servercleaner.nodes,node)
servercleaner.node_actions[node]=action or servercleaner.reset_owner
end
end
end
servercleaner.register_on_delete=function(mod_depends,action)
if minetest.get_modpath(mod_depends) then
servercleaner.actions[mod_depends]=action
end
end
servercleaner.reset_owner=function(pos,node)
local meta=minetest.get_meta(pos)
local owner=meta:get_string("owner")
if owner~="" and not minetest.player_exists(owner) then
meta:set_string("owner","")
local def=minetest.registered_nodes[node.name]
if def and def.description then
meta:set_string("infotext", def.description .. " (Abandoned)")
else
meta:set_string("infotext", "Abandoned")
end
end
end
servercleaner.remove_owned_node=function(pos,node)
local meta=minetest.get_meta(pos)
local owner=meta:get_string("owner")
if owner~="" and not minetest.player_exists(owner) then
minetest.remove_node(pos)
end
end
minetest.register_chatcommand("delplayer", {
params = "<playername>",
description = "Delete player",
privs = {ban = true},
func = function(name, param)
if param=="" then
return false,"/delplayer <playername>"
elseif name==param then
return false,"delete a player, not yourself, use '/delme' instead"
elseif minetest.check_player_privs(param, {scmoderator=true}) and not minetest.check_player_privs(name, {scadmin=true}) then
return false,"Moderators can't delete moderators"
elseif minetest.check_player_privs(param, {scadmin=true}) then
return false,"can't delete admin"
end
servercleaner.delete_player(param,name)
return true
end,
})
minetest.register_chatcommand("delmod", {
params = "<playername>",
description = "Downgrad moderator to player (has the scmoderator privilege)",
privs = {scadmin = true},
func = function(name, param)
if param=="" then
return false
elseif not minetest.player_exists(param) then
return false, "player doesnt exist"
elseif minetest.check_player_privs(param, {dont_delete=true}) then
return false,"player " .. param .. " has the dont_delete privilege"
elseif not minetest.check_player_privs(param, {scmoderator=true}) then
return false, "player " .. param .. " dont have the scmoderator privilege"
else
local privs={}
for i, p in pairs(servercleaner.default_privs.split(servercleaner.default_privs,", ")) do
privs[p]=true
end
minetest.set_player_privs(param,privs)
minetest.log("Moderator " .. param .."downgraded to player (by " .. name .. ")")
return true,"Moderator " .. param .."downgraded to player"
end
return false
end,
})
minetest.register_chatcommand("delme", {
description = "Delete your account",
func = function(name, param)
if not servercleaner.delme[name] then
servercleaner.delme[name]=true
minetest.after(20,function(name)
servercleaner.delme[name]=nil
if minetest.get_player_by_name(name) then
minetest.chat_send_player(name,"The time (20) has expired")
end
end,name)
return false,"Are you sure you want to delete your account?\nAll your privileges, protected/areas/data will be deleted, locked stuff will be able for other people.\nTo confirm type: /delme delete me"
elseif servercleaner.delme[name] and param=="delete me" then
servercleaner.delete_player(name,name)
end
return true
end,
})
servercleaner.outdated_player=function(name)
local a=minetest.get_auth_handler().get_auth(name)
if not a then
return
end
local diff=os.difftime(os.time(), a.last_login) / (24 * 60 * 60)
if diff>=servercleaner.players then
servercleaner.delete_player(name)
elseif diff>=servercleaner.guest and minetest.check_player_privs(name, {scguest=true}) and not minetest.check_player_privs(name, {scadmin=true}) then
servercleaner.delete_player(name)
elseif diff>servercleaner.revoke_moderator and minetest.check_player_privs(name, {scmoderator=true}) and not minetest.check_player_privs(name, {dont_delete=true}) then
local s=minetest.settings:get("default_privs") or ""
local privs={}
for i, p in pairs(s.split(s,", ")) do
privs[p]=true
end
minetest.set_player_privs(name,privs)
minetest.log("Moderator " .. name .."downgraded to player (" .. servercleaner.revoke_moderator .. " days expired)")
end
end
servercleaner.delete_player=function(name,by)
if minetest.check_player_privs(name, {dont_delete=true}) then
if by then
minetest.chat_send_player(by,"player " .. name .. " has the dont_delete privilege, and will not be deleted")
end
return
end
minetest.log("Delete player " .. name .. " (" .. ((by and "by " .. by ..")") or servercleaner.players .. " days expired)"))
for i, action in pairs(servercleaner.actions) do
action(name)
end
if minetest.get_player_by_name(name) then
minetest.kick_player(name, "Account Deleted")
end
minetest.after(1,function(name,by)
minetest.remove_player_auth(name)
local del=minetest.remove_player(name)
if by and del then
minetest.chat_send_player(by,"player " .. name .. " deleted")
end
end,name,by)
end
minetest.after(0,function()
for name, value in minetest.get_auth_handler().iterate() do
servercleaner.outdated_player(name)
end
end)
dofile(minetest.get_modpath("servercleaner") .. "/functions.lua")
dofile(minetest.get_modpath("servercleaner") .. "/privs_commands.lua")
dofile(minetest.get_modpath("servercleaner") .. "/register.lua")
minetest.register_lbm({
name="servercleaner:abandoned_owners",
@ -219,35 +25,8 @@ minetest.register_lbm({
end
})
servercleaner.register_on_delete("areas",function(name)
for id, area in pairs(areas.areas) do
if areas:isAreaOwner(id, name) then
areas:remove(id)
end
minetest.after(0,function()
for name, value in minetest.get_auth_handler().iterate() do
servercleaner.outdated_player(name)
end
areas:save()
end)
servercleaner.register_on_delete("beds",function(name)
beds.spawn[name]=nil
beds.save_spawns()
end)
servercleaner.register_on_delete("unified_inventory",function(name)
unified_inventory.home_pos[name]=nil
unified_inventory.set_home({get_player_name=function() return "?" end},{x=0,y=0,z=0})
end)
servercleaner.register_owner_node({
"default:chest_locked",
"bones:bones",
"doors:trapdoor_steel",
"doors:trapdoor_steel_open",
"doors:door_steel_a",
"doors:door_steel_b",
})
servercleaner.register_owner_node({
"protector:protect",
"protector:protect2",
},servercleaner.remove_owned_node)
end)

83
privs_commands.lua Normal file
View File

@ -0,0 +1,83 @@
minetest.register_privilege("scguest", {
description = "Guest",
give_to_singleplayer= false,
})
minetest.register_privilege("dont_delete", {
description = "Will not be deleted",
give_to_singleplayer= false,
})
minetest.register_privilege("scmoderator", {
description = "Moderator",
give_to_singleplayer= false,
})
minetest.register_privilege("scadmin", {
description = "Admin",
give_to_singleplayer= false,
})
minetest.register_chatcommand("delplayer", {
params = "<playername>",
description = "Delete player",
privs = {ban = true},
func = function(name, param)
if param=="" then
return false,"/delplayer <playername>"
elseif name==param then
return false,"delete a player, not yourself, use '/delme' instead"
elseif minetest.check_player_privs(param, {scmoderator=true}) and not minetest.check_player_privs(name, {scadmin=true}) then
return false,"Moderators can't delete moderators"
elseif minetest.check_player_privs(param, {scadmin=true}) then
return false,"can't delete admin"
end
servercleaner.delete_player(param,name)
return true
end,
})
minetest.register_chatcommand("delmod", {
params = "<playername>",
description = "Downgrad moderator to player (has the scmoderator privilege)",
privs = {scadmin = true},
func = function(name, param)
if param=="" then
return false
elseif not minetest.player_exists(param) then
return false, "player doesnt exist"
elseif minetest.check_player_privs(param, {dont_delete=true}) then
return false,"player " .. param .. " has the dont_delete privilege"
elseif not minetest.check_player_privs(param, {scmoderator=true}) then
return false, "player " .. param .. " dont have the scmoderator privilege"
else
local privs={}
for i, p in pairs(servercleaner.default_privs.split(servercleaner.default_privs,", ")) do
privs[p]=true
end
minetest.set_player_privs(param,privs)
minetest.log("Moderator " .. param .."downgraded to player (by " .. name .. ")")
return true,"Moderator " .. param .."downgraded to player"
end
return false
end,
})
minetest.register_chatcommand("delme", {
description = "Delete your account",
func = function(name, param)
if not servercleaner.delme[name] then
servercleaner.delme[name]=true
minetest.after(20,function(name)
servercleaner.delme[name]=nil
if minetest.get_player_by_name(name) then
minetest.chat_send_player(name,"The time (20) has expired")
end
end,name)
return false,"Are you sure you want to delete your account?\nAll your privileges, protected/areas/data will be deleted, locked stuff will be able for other people.\nTo confirm type: /delme delete me"
elseif servercleaner.delme[name] and param=="delete me" then
servercleaner.delete_player(name,name)
end
return true
end,
})

32
register.lua Normal file
View File

@ -0,0 +1,32 @@
servercleaner.register_on_delete("areas",function(name)
for id, area in pairs(areas.areas) do
if areas:isAreaOwner(id, name) then
areas:remove(id)
end
end
areas:save()
end)
servercleaner.register_on_delete("beds",function(name)
beds.spawn[name]=nil
beds.save_spawns()
end)
servercleaner.register_on_delete("unified_inventory",function(name)
unified_inventory.home_pos[name]=nil
unified_inventory.set_home({get_player_name=function() return "?" end},{x=0,y=0,z=0})
end)
servercleaner.register_owner_node({
"default:chest_locked",
"bones:bones",
"doors:trapdoor_steel",
"doors:trapdoor_steel_open",
"doors:door_steel_a",
"doors:door_steel_b",
})
servercleaner.register_owner_node({
"protector:protect",
"protector:protect2",
},servercleaner.remove_owned_node)