105 lines
3.5 KiB
Lua
Raw Normal View History

-- 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"
local modpath = minetest.get_modpath("governing")
local modstor = minetest.get_mod_storage()
local worlddir = minetest.get_worldpath()
local modmail = minetest.get_modpath("mail")
local modgeoip = minetest.get_modpath("geoip")
local moddefault = minetest.get_modpath("default")
local modkillme = minetest.get_modpath("killme")
local modcommand = minetest.get_modpath("game_commands")
local modcreative = minetest.get_modpath("creative")
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).
local S
if minetest.get_translator ~= nil then
S = minetest.get_translator(modname) -- 5.x translation function
else
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
end
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
governing = {}
governing.S = S
governing.httpapi = httpapi -- must be called early at the beggining to work
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
governing.modgeoip = modgeoip -- path of the geoip mod if available for sending messages internaly on private
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)
if creative then
return creative.is_creative(name)
else
return minetest.check_player_privs(name, {creative = true}) or creative_mode_cache
end
end
function governing.lookup(ip, callback)
if not httpapi then
minetest.log("error", "[governing/geoip] mod not in the trusted http mods!")
return
end
-- https://forum.minetest.net/viewtopic.php?t=28636
-- Only works at init time and must be called from the mod's main scope (not from a function).
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)
end
dofile(governing.modpath.."/geoip.lua")
dofile(governing.modpath.."/commands.lua")
print("[MOD] governing mod loaded" )