Initial commit
This commit is contained in:
76
gamemodes/darkrp/gamemode/modules/fadmin/sv_fadmin_sql.lua
Normal file
76
gamemodes/darkrp/gamemode/modules/fadmin/sv_fadmin_sql.lua
Normal file
@@ -0,0 +1,76 @@
|
||||
--[[---------------------------------------------------------------------------
|
||||
Create the tables used for banning
|
||||
---------------------------------------------------------------------------]]
|
||||
hook.Add("DatabaseInitialized", "FAdmin_CreateMySQLTables", function()
|
||||
MySQLite.query("CREATE TABLE IF NOT EXISTS FAdminBans(SteamID VARCHAR(25) NOT NULL PRIMARY KEY, Nick VARCHAR(40), BanDate DATETIME, UnbanDate DATETIME, Reason VARCHAR(100), AdminName VARCHAR(40), Admin_steam VARCHAR(25));", function()
|
||||
|
||||
hook.Call("FAdmin_RetrieveBans", nil)
|
||||
end)
|
||||
end)
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Store a ban in the MySQL tables
|
||||
---------------------------------------------------------------------------]]
|
||||
hook.Add("FAdmin_StoreBan", "MySQLBans", function(SteamID, Nick, Duration, Reason, AdminName, Admin_steam)
|
||||
local steam = MySQLite.SQLStr(SteamID)
|
||||
local nick = Nick and MySQLite.SQLStr(Nick) or "NULL"
|
||||
local bandate = MySQLite.isMySQL() and "NOW()" or "datetime('now')"
|
||||
local reason = Reason and MySQLite.SQLStr(Reason) or "NULL"
|
||||
local admin = AdminName and MySQLite.SQLStr(AdminName) or "NULL"
|
||||
local adminsteam = Admin_steam and MySQLite.SQLStr(Admin_steam) or "NULL"
|
||||
|
||||
local duration
|
||||
if MySQLite.isMySQL() then
|
||||
duration = Duration == 0 and "NULL" or "DATE_ADD(NOW(), INTERVAL " .. tonumber(Duration or 60) .. " MINUTE)"
|
||||
else
|
||||
duration = Duration == 0 and "NULL" or "datetime('now', '+" .. tonumber(Duration or 60) .. " minutes')"
|
||||
end
|
||||
|
||||
MySQLite.query("REPLACE INTO FAdminBans VALUES(" .. steam .. ", " .. nick .. ", " .. bandate .. ", " .. duration .. ", " .. reason .. ", " .. admin .. ", " .. adminsteam .. ");")
|
||||
end)
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Unban someone
|
||||
---------------------------------------------------------------------------]]
|
||||
hook.Add("FAdmin_UnBan", "FAdmin_MySQLUnban", function(ply, steamID)
|
||||
MySQLite.query("DELETE FROM FAdminBans WHERE steamID = " .. MySQLite.SQLStr(steamID))
|
||||
end)
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Retrieve the bans from the MySQL server and put them into effect
|
||||
|
||||
Note: Must be called more than two seconds after InitPostEntity, because
|
||||
that's when the database initializes
|
||||
---------------------------------------------------------------------------]]
|
||||
hook.Add("FAdmin_RetrieveBans", "getMySQLBans", function()
|
||||
FAdmin.BANS = FAdmin.BANS or {}
|
||||
|
||||
-- Small SQLite and MySQL syntax difference
|
||||
local diffSeconds = MySQLite.isMySQL() and "TIMESTAMPDIFF(SECOND, NOW(), UnbanDate)" or
|
||||
"strftime('%s', UnbanDate) - strftime('%s','now')"
|
||||
|
||||
local now = MySQLite.isMySQL() and "NOW()" or "datetime('now')"
|
||||
|
||||
MySQLite.query("SELECT SteamID, Nick, " .. diffSeconds .. " AS duration, Reason, AdminName, Admin_steam FROM FAdminBans WHERE (UnbanDate > " .. now .. " OR UnbanDate IS NULL);", function(data)
|
||||
if not data then return end
|
||||
|
||||
for _, v in ipairs(data) do
|
||||
if tonumber(v.SteamID) or not v.SteamID then continue end
|
||||
local duration = (not v.duration or v.duration == "NULL") and 0 or (os.time() + v.duration)
|
||||
|
||||
FAdmin.BANS[string.upper(v.SteamID)] = {
|
||||
time = duration,
|
||||
name = v.Nick,
|
||||
reason = v.Reason,
|
||||
adminname = v.AdminName,
|
||||
adminsteam = v.Admin_steam
|
||||
}
|
||||
end
|
||||
|
||||
for _, v in ipairs(player.GetAll()) do
|
||||
if not FAdmin.BANS[string.upper(v:SteamID())] then continue end
|
||||
|
||||
v:Kick("FAdmin ban evasion")
|
||||
end
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user