aboutsummaryrefslogtreecommitdiff
path: root/gamemode/shared/system_admin.lua
blob: 14dfb3d28d1788921c7a7e62e20366bf721fbd3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
local meta    	= FindMetaTable("Player")
local Banlist 	= {}

local insert    = table.insert

if (SERVER) then
	hook.Add("InitPostEntity","InitBanlist",function()
		if (!sql.TableExists("Banlist")) then
			local Dat = {
				"id INTEGER PRIMARY KEY",
				"steamid TEXT",
				"time INT",
				"name TEXT",
				"reason TEXT",
			}
			
			Msg("No banlist was found.\nCreating new banlist!\n")
			sql.Query("CREATE TABLE IF NOT EXISTS Banlist ("..table.concat(Dat,",")..");")
		else
			local dat = sql.Query("SELECT * FROM Banlist")
			
			if (dat) then
				for k,v in pairs(dat) do insert(Banlist,v.steamid) end
			end
		end
	end)
	
	hook.Add("CheckPassword","BlockBannedPlayers",function(SteamID64,NetworkID,ServerPassword,Password,Name)
		if (table.HasValue(Banlist,util.SteamIDFrom64(SteamID64))) then
			print(Name.." attempted to join, but was found in the banlist. Blocking access!")
			
			return false, "You are banned from this server!"
		end
	end)
	
	concommand.Add("mas_bansteamid",function(pl,com,arg)
		if (!IsValid(pl) or !pl:IsAdmin()) then return end
		if (!arg[3]) then return end
		
		local steamid = arg[1]
		local time = tonumber(arg[2] or 0)
		local reason = table.concat(arg," ",3)
		
		local dat = sql.Query("SELECT * FROM Banlist WHERE steamid="..SQLStr(steamid))
				
		if (!dat) then 
			sql.Query("INSERT INTO Banlist(steamid,time,name,reason) VALUES ("..SQLStr(steamid)..","..time..",'Unknown',"..SQLStr(reason)..")")
			insert(Banlist,steamid)
			
			for k,v in pairs(player.GetAll()) do
				if (v:SteamID() == steamid) then
					v:Kick("Banned from server: "..reason)
				end
				
				v:ChatPrint(pl:Nick().." has banned "..steamid)
			end
			
			MsgN(pl:Nick().." has banned "..steamid)
		else
			MsgN(steamid.." was already located in the database.")
		end
	end)
	
	concommand.Add("mas_unbansteamid",function(pl,com,arg)
		if (!IsValid(pl) or !pl:IsAdmin()) then return end
		if (!arg[1]) then return end
		
		local dat = sql.Query("DELETE * FROM Banlist WHERE steamid="..SQLStr(arg[1]))
		
		if (dat) then
			MsgN(pl:Nick().." has unbanned "..arg[1])
			
			for k,v in pairs(Banlist) do
				if (v == arg[1]) then
					table.remove(Banlist,k)
					break
				end
			end
		end
	end)
	
	concommand.Add("mas_printbannedplayers",function(pl,com,arg)
		if (!IsValid(pl) or !pl:IsAdmin()) then return end
		
		local dat = sql.Query("SELECT * FROM Banlist")
		
		if (dat) then
			for k,v in pairs(dat) do
				pl:ChatPrint(v.steamid.." - "..v.name)
			end
		end
	end)
		
	concommand.Add("mas_banplayer",function(pl,com,arg)
		if (!IsValid(pl) or !pl:IsAdmin()) then return end
		if (!arg[3]) then return end
		
		local name = arg[1]
		local time = tonumber(arg[2] or 0)
		local reason = table.concat(arg," ",3)
		
		for k,v in pairs(player.GetAll()) do
			if (v:Nick():lower():find(name:lower())) then
				local dat = sql.Query("SELECT * FROM Banlist WHERE steamid="..SQLStr(v:SteamID()))
				
				if (!dat) then 
					sql.Query("INSERT INTO Banlist(steamid,time,name,reason) VALUES ("..SQLStr(v:SteamID())..","..time..","..SQLStr(v:Nick())..","..SQLStr(reason)..")")
					insert(Banlist,v:SteamID())
					v:Kick("Banned from server: "..reason)
					break
				end
			end
		end
	end)
else
end