minetest-mod-governing/process.lua

122 lines
4.1 KiB
Lua

-- mod governor by mckaygerhard, geoip specific code
-- Copyright 2023
----------------------------------------------------------------------------
-- this program can be used free but cannot be used commertially or
-- modified for, licenced CC-BY-SA-NC 4.0 unless explicit permission
-- 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.
----------------------------------------------------------------------------
--[[ init of call back on join of a player, ]]
minetest.register_on_joinplayer(function(player)
local msgsys = "#anticheat cannot get player info from minetest api.."
if not player then return end
if not gapi.is_player(player) then return end
if not minetest.get_player_ip then minetest.log("error", msgsys) end
local ip
local pos
local name
local info
pos = player:getpos()
name = player:get_player_name()
ip = minetest.get_player_ip(name)
info = minetest.get_player_information(name)
-- natural checks for player object apar of player:is_player
if not ip then
minetest.log("error", msgsys.." (ip) for "..name)
end
if not name then
minetest.log("error", msgsys.." (name) seems fake player")
end
if not info then
minetest.log("error", msgsys.." (info), processing limited")
end
-- process for ip information from player network
if governing.checkapikey ~= "" then
governing.checkip(ip, function(data) -- log, but TODO: record in storage log file
local txt = gapi.format_result_checkip(data)
if txt then minetest.log("warning", "[goberning/geoip] joined player, " .. name .. ":" .. ip .. "," .. txt)
else minetest.log("error", "[goberning/geoip] joined player, " .. name .. ":" .. ip .. ", seems fails")
end
governing.joinplayer_callback(name, data) -- execute callback
end)
else
if not governing.modgeoip then
governing.lookup(ip, function(data) -- log, but TODO: record in storage log file
local txt = gapi.format_result_checkip(data)
if txt then minetest.log("warning", "[goberning/geoip] joined player, " .. name .. ":" .. ip .. "," .. txt)
else minetest.log("error", "[goberning/geoip] joined player, " .. name .. ":" .. ip .. ", seems fails")
end
governing.joinplayer_callback(name, data) -- execute callback
end)
end
end
-- process for client and players information for cheated program
if not info then
if not gapi.is_player(player) then
name = name .. " is a bot confirmed, also"
end
msgsys = "[governing] can't retrieve info, player '" .. name .. "' disappeared or seems craker"
minetest.after(0.1, function()
for namemd,_ in pairs(cheat.moderators) do
minetest.chat_send_player(namemd,msgsys);
end
end)
minetest.log("warning", msgsys)
else
info = minetest.get_player_information(name)
msgsys = "[governing] player '" .. name .. "' joined" ..
" from:" .. info.address ..
" protocol_version:" .. (info.protocol_version or "20?") ..
" formspec_version:" .. (info.formspec_version or "old") ..
" lang_code:" .. (info.lang_code or "<unknown>") ..
" serialization_version:" .. (info.serialization_version or "20?") ..
" version_string:" .. (info.version_string or "not supported")
minetest.log("action", msgsys)
end
if info.version_string then
msgsys = "#anticheat detected a cheater client does not provide info, ".. tostring(ip).." named "..name
local dfv = gapi.isdf(info.version_string)
if dfv then
minetest.after(3, function()
minetest.chat_send_player(name, msgiplevelone);
if minetest.settings:get_bool("beowulf.dfdetect.enable_kick", false) then
minetest.kick_player(name, "Are you a cheater stupid user? change your cracked client for play")
end
for namemd,_ in pairs(cheat.moderators) do
minetest.chat_send_player(namemd,msgsys); -- advertise moderators
end
end)
minetest.log(msgsys)
end
else
for namemd,_ in pairs(cheat.moderators) do
minetest.chat_send_player(namemd,msgsys); -- advertise moderators
end
minetest.log(msgsys)
end
end)
--[[ end of call back on join of a player, ]]