]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/command/banning.qc
Rename command/ipban.qc to command/banning.qc
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / command / banning.qc
1 // =====================================================
2 //  Banning and kicking command code, written by Samual
3 //  Last updated: December 29th, 2011
4 // =====================================================
5
6
7 // =======================
8 //  Command Sub-Functions
9 // =======================
10
11 void BanCommand_ban(float request, float argc)
12 {
13         switch(request)
14         {
15                 case CMD_REQUEST_COMMAND:
16                 {
17                         
18                         return;
19                 }
20                         
21                 default:
22                 case CMD_REQUEST_USAGE:
23                 {
24                         print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
25                         print("  No arguments required.\n");
26                         return;
27                 }
28         }
29 }
30
31 void BanCommand_banlist(float request)
32 {
33         switch(request)
34         {
35                 case CMD_REQUEST_COMMAND:
36                 {
37                         
38                         return;
39                 }
40                         
41                 default:
42                 case CMD_REQUEST_USAGE:
43                 {
44                         print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
45                         print("  No arguments required.\n");
46                         return;
47                 }
48         }
49 }
50
51 void BanCommand_kickban(float request, float argc)
52 {
53         switch(request)
54         {
55                 case CMD_REQUEST_COMMAND:
56                 {
57                         
58                         return;
59                 }
60                         
61                 default:
62                 case CMD_REQUEST_USAGE:
63                 {
64                         print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
65                         print("  No arguments required.\n");
66                         return;
67                 }
68         }
69 }
70
71 void BanCommand_unban(float request, float argc)
72 {
73         switch(request)
74         {
75                 case CMD_REQUEST_COMMAND:
76                 {
77                         
78                         return;
79                 }
80                         
81                 default:
82                 case CMD_REQUEST_USAGE:
83                 {
84                         print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
85                         print("  No arguments required.\n");
86                         return;
87                 }
88         }
89 }
90
91 /* use this when creating a new command, making sure to place it in alphabetical order... also,
92 ** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION!
93 void BanCommand_(float request)
94 {
95         switch(request)
96         {
97                 case CMD_REQUEST_COMMAND:
98                 {
99                         
100                         return;
101                 }
102                         
103                 default:
104                 case CMD_REQUEST_USAGE:
105                 {
106                         print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
107                         print("  No arguments required.\n");
108                         return;
109                 }
110         }
111 }
112 */
113
114
115 // ==================================
116 //  Macro system for server commands
117 // ==================================
118
119 // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
120 #define BAN_COMMANDS(request,arguments,command) \
121         BAN_COMMAND("ban", BanCommand_ban(request, arguments), "Ban an IP address or a range of addresses (like 1.2.3)") \
122         BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \
123         BAN_COMMAND("kickban", BanCommand_kickban(request, arguments), "Disconnect a client and ban it at the same time") \
124         BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
125         /* nothing */
126
127 void BanCommand_macro_help()
128 {
129         #define BAN_COMMAND(name,function,description) \
130                 { print("  ^2", name, "^7: ", description, "\n"); }
131                 
132         BAN_COMMANDS(0, 0, "")
133         #undef BAN_COMMAND
134         
135         return;
136 }
137
138 float BanCommand_macro_command(float argc, string command)
139 {
140         #define BAN_COMMAND(name,function,description) \
141                 { if(name == strtolower(argv(0))) { function; return TRUE; } }
142                 
143         BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
144         #undef BAN_COMMAND
145         
146         return FALSE;
147 }
148
149 float BanCommand_macro_usage(float argc)
150 {
151         #define BAN_COMMAND(name,function,description) \
152                 { if(name == strtolower(argv(1))) { function; return TRUE; } }
153                 
154         BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "")
155         #undef BAN_COMMAND
156         
157         return FALSE;
158 }
159
160 void BanCommand_macro_write_aliases(float fh)
161 {
162         #define BAN_COMMAND(name,function,description) \
163                 { CMD_Write_Alias("qc_cmd_sv", name, description); }
164         
165         BAN_COMMANDS(0, 0, "")
166         #undef BAN_COMMAND
167         
168         return;
169 }
170
171 float BanCommand(string command)
172 {
173         float argc;
174         float bantime;
175         entity client;
176         float entno;
177         float masksize;
178         string reason;
179         float reasonarg;
180
181         argc = tokenize_console(command);
182         if(argv(0) == "help")
183         {
184                 print("  kickban # n m p reason - kickban player n for m seconds, using mask size p (1 to 4)\n");
185                 print("  ban ip m reason - ban an IP or range (incomplete IP, like 1.2.3) for m seconds\n");
186                 print("  bans - list all existing bans\n");
187                 print("  unban n - delete the entry #n from the bans list\n");
188                 return TRUE;
189         }
190         if(argv(0) == "kickban")
191         {
192 #define INITARG(c) reasonarg = c
193 #define GETARG(v,d) if((argc > reasonarg) && ((v = stof(argv(reasonarg))) != 0)) ++reasonarg; else v = d
194 #define RESTARG(v) if(argc > reasonarg) v = substring(command, argv_start_index(reasonarg), strlen(command) - argv_start_index(reasonarg)); else v = ""
195                 if(argc >= 3)
196                 {
197                         entno = stof(argv(2));
198                         if(entno > maxclients || entno < 1)
199                                 return TRUE;
200                         client = edict_num(entno);
201
202                         INITARG(3);
203                         GETARG(bantime, autocvar_g_ban_default_bantime);
204                         GETARG(masksize, autocvar_g_ban_default_masksize);
205                         RESTARG(reason);
206
207                         Ban_KickBanClient(client, bantime, masksize, reason);
208                         return TRUE;
209                 }
210         }
211         else if(argv(0) == "ban")
212         {
213                 if(argc >= 2)
214                 {
215                         string ip;
216                         ip = argv(1);
217
218                         INITARG(2);
219                         GETARG(bantime, autocvar_g_ban_default_bantime);
220                         RESTARG(reason);
221
222                         Ban_Insert(ip, bantime, reason, 1);
223                         return TRUE;
224                 }
225 #undef INITARG
226 #undef GETARG
227 #undef RESTARG
228         }
229         else if(argv(0) == "bans")
230         {
231                 Ban_View();
232                 return TRUE;
233         }
234         else if(argv(0) == "unban")
235         {
236                 if(argc >= 2)
237                 {
238                         float who;
239                         who = stof(argv(1));
240                         Ban_Delete(who);
241                         return TRUE;
242                 }
243         }
244         return FALSE;
245 }