2023-06-09 23:40:06 -04:00
-- mod governor by mckaygerhard
-- Copyright 2020
----------------------------------------------------------------------------
-- this program can be used free but cannot be used commertially or
-- modified for, licenced CC-BY-SA-NC 4.0
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
----------------------------------------------------------------------------
local modname = " governing "
2023-06-20 11:41:04 -04:00
local modpath = minetest.get_modpath ( " governing " )
2023-06-09 23:40:06 -04:00
local modstor = minetest.get_mod_storage ( )
local worlddir = minetest.get_worldpath ( )
local modmail = minetest.get_modpath ( " mail " )
2023-06-20 11:41:04 -04:00
local modgeoip = minetest.get_modpath ( " geoip " )
2023-06-09 23:40:06 -04:00
local moddefault = minetest.get_modpath ( " default " )
local modkillme = minetest.get_modpath ( " killme " )
local modcommand = minetest.get_modpath ( " game_commands " )
2023-06-20 11:41:04 -04:00
local modcreative = minetest.get_modpath ( " creative " )
2023-06-09 23:40:06 -04:00
2023-06-21 14:35:28 -04:00
local httpapi = minetest.request_http_api and minetest.request_http_api ( ) -- Only works at init time and must be called from the mod's main scope (not from a function).
2023-06-09 23:40:06 -04:00
local S
if minetest.get_translator ~= nil then
2023-06-20 11:41:04 -04:00
S = minetest.get_translator ( modname ) -- 5.x translation function
2023-06-09 23:40:06 -04:00
else
2023-06-20 11:41:04 -04:00
if minetest.get_modpath ( " intllib " ) then
dofile ( minetest.get_modpath ( " intllib " ) .. " /init.lua " )
if intllib.make_gettext_pair then
gettext , ngettext = intllib.make_gettext_pair ( ) -- new gettext method
else
gettext = intllib.Getter ( ) -- old text file method
end
S = gettext
else -- boilerplate function
S = function ( str , ... )
local args = { ... }
return str : gsub ( " @%d+ " , function ( match )
return args [ tonumber ( match : sub ( 2 ) ) ]
end )
end
end
2023-06-09 23:40:06 -04:00
end
local creative_mode_cache = minetest.settings : get_bool ( " creative_mode " )
governing = { }
governing.S = S
2023-06-21 14:35:28 -04:00
governing.httpapi = httpapi -- must be called early at the beggining to work
2023-06-09 23:40:06 -04:00
governing.modname = modname -- name of the mod
governing.modpath = modpath -- path of the mod
governing.modstor = modstor -- request of storage for the mod
governing.worlddir = worlddir -- path of the world were the mod is running
2023-06-21 14:35:28 -04:00
governing.modgeoip = modgeoip -- path of the geoip mod if available for sending messages internaly on private
2023-06-09 23:40:06 -04:00
governing.modmail = modmail -- path of the mail mod if available for sending messages internaly on private
governing.moddefault = moddefault -- path of default mod if availalbe
governing.modkillme = modkillme -- if killme is present as mod if available
governing.modcommand = modcommand -- if same killme and commands is present as mod if available
function governing . is_creative ( name )
2023-06-20 11:41:04 -04:00
if creative then
return creative.is_creative ( name )
else
return minetest.check_player_privs ( name , { creative = true } ) or creative_mode_cache
end
2023-06-09 23:40:06 -04:00
end
2023-06-21 14:35:28 -04:00
function governing . lookup ( ip , callback )
if not httpapi then
minetest.log ( " error " , " [governing/geoip] mod not in the trusted http mods! " )
return
end
2023-06-21 16:41:24 -04:00
httpapi.fetch ( {
url = " https://tools.keycdn.com/geo.json?host= " .. ip ,
extra_headers = { " User-Agent: keycdn-tools:https://minetest.org " } ,
timeout = 5 ,
} , function ( res )
if res.code == 200 then
local data = minetest.parse_json ( res.data )
callback ( data )
else
minetest.log ( " warning " , " [governing/geoip] http request returned status: " .. res.code )
end
end )
2023-06-21 14:35:28 -04:00
end
2023-06-20 11:43:13 -04:00
dofile ( governing.modpath .. " /geoip.lua " )
2023-06-20 11:41:04 -04:00
dofile ( governing.modpath .. " /commands.lua " )
2023-06-09 23:40:06 -04:00
2023-06-20 11:41:04 -04:00
print ( " [MOD] governing mod loaded " )
2023-06-09 23:40:06 -04:00