Files
wnsrc/addons/sam-master/lua/sam/importers/serverguard/main.lua
lifestorm ba1fc01b16 Upload
2024-08-04 23:12:27 +03:00

190 lines
3.9 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local sam, SQL = sam, sam.SQL
local von = include("sam/importers/serverguard/sam_von.lua")
if not von then
return sam.print("Download the importer folder again from gmodstore.")
end
local no_bans_msg = "No bans to import from serverguard."
local import_bans = function()
SQL.TableExists("serverguard_bans", function(exists)
if not exists then
return sam.print(no_bans_msg)
end
SQL.Query([[
DELETE FROM `sam_bans`
]])
SQL.Query([[
INSERT INTO
`sam_bans`(
`id`,
`steamid`,
`reason`,
`admin`,
`unban_date`
)
SELECT
`id`,
`steam_id`,
`reason`,
'Console',
`end_time`
FROM
`serverguard_bans`
]], function()
sam.print("Imported bans from serverguard.")
end)
end)
end
local no_ranks_msg = "No ranks to import from serverguard."
local import_ranks = function()
SQL.TableExists("serverguard_ranks", function(exists)
if not exists then
return sam.print(no_ranks_msg)
end
SQL.Query([[
SELECT
*
FROM
`serverguard_ranks`
]], function(serverguard_ranks)
for _, v in pairs(serverguard_ranks) do
local name = v.unique_id
if not sam.ranks.is_rank(name) then
sam.ranks.add_rank(name, "user", tonumber(v.immunity), tonumber(v.banlimit))
end
local data = sam.isstring(v.data) and util.JSONToTable(v.data)
local tools = sam.istable(data) and sam.istable(data.Restrictions) and sam.istable(data.Restrictions.Tools) and data.Restrictions.Tools
if not tools then continue end
for tool_name, value in pairs(tools) do
if value == false then
sam.ranks.take_permission(name, tool_name)
else
sam.ranks.give_permission(name, tool_name)
end
end
end
sam.print("Imported ranks from serverguard.")
end)
end)
end
local no_users_msg = "No users to import from serverguard."
local import_expires = function(data)
if data and #data > 0 then
local began = false
for _, v in ipairs(data) do
local ply_data = v.data and von.deserialize(v.data) or {}
if not sam.isnumber(tonumber(ply_data.groupExpire)) then continue end
if not began then
began = true
SQL.Begin()
end
SQL.FQuery([[
UPDATE
`sam_players`
SET
`expiry_date` = {1}
WHERE
`steamid` = {2}
]], {tonumber(ply_data.groupExpire), v.steam_id})
end
SQL.Commit(function()
sam.print("Imported users from serverguard.")
end)
else
sam.print("Imported users from serverguard.")
end
end
local import_users = function()
SQL.TableExists("serverguard_users", function(exists)
if not exists then
return sam.print(no_users_msg)
end
SQL.Query([[
DELETE FROM `sam_players`
]])
SQL.Query([[
INSERT INTO
`sam_players`(
`id`,
`steamid`,
`name`,
`rank`,
`expiry_date`,
`first_join`,
`last_join`,
`play_time`
)
SELECT
`id`,
`steam_id`,
`name`,
`rank`,
0,
`last_played`,
`last_played`,
0
FROM
`serverguard_users`
]], function()
SQL.Query([[
SELECT
`steam_id`,
`data`
FROM
`serverguard_users`
]], import_expires)
end)
end)
end
if not sam.ranks.ranks_loaded() then
return sam.print("Server is connecting to the Database, try again when it connects.")
end
for k, v in ipairs(player.GetAll()) do
v:Kick("Importing data.")
end
for k, v in pairs(sam.get_connected_players()) do
sam.player.kick_id(k, "Importing data.")
end
hook.Add("CheckPassword", "SAM.ImportingData", function()
return false, "Importing data."
end)
sam.print("Starting to import data from serverguard...")
timer.Simple(0, function()
import_bans()
import_ranks()
import_users()
hook.Remove("CheckPassword", "SAM.ImportingData")
end)