1 // =====================================================
2 // Banning and kicking command code, written by Samual
3 // Last updated: December 29th, 2011
4 // =====================================================
6 void BanCommand_ban(float request, float argc, string command)
10 case CMD_REQUEST_COMMAND:
15 float reason_arg, bantime;
20 GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime);
21 GET_BAN_REASON(reason, "No reason provided.");
23 Ban_Insert(ip, bantime, reason, 1);
29 print("Incorrect parameters for ^2ban^7\n");
30 case CMD_REQUEST_USAGE:
32 print("\nUsage:^3 sv_cmd ban address [time] reason");
33 print(" No arguments required.\n");
39 void BanCommand_banlist(float request)
43 case CMD_REQUEST_COMMAND:
50 case CMD_REQUEST_USAGE:
52 print("\nUsage:^3 sv_cmd banlist");
53 print(" No arguments required.\n");
59 void BanCommand_kickban(float request, float argc, string command)
63 case CMD_REQUEST_COMMAND:
67 entity client = GetIndexedEntity(argc, 1);
68 float accepted = VerifyClientEntity(client, TRUE, FALSE);
69 float reason_arg, bantime, masksize;
74 reason_arg = next_token;
76 GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime);
77 GET_BAN_ARG(masksize, autocvar_g_ban_default_masksize);
78 GET_BAN_REASON(reason, "No reason provided.");
80 Ban_KickBanClient(client, bantime, masksize, reason);
86 print("kickban: ", GetClientErrorString(accepted, argv(1)), ".\n");
92 print("Incorrect parameters for ^2kickban^7\n");
93 case CMD_REQUEST_USAGE:
95 print("\nUsage:^3 sv_cmd ");
96 print(" No arguments required.\n");
102 void BanCommand_unban(float request, float argc)
106 case CMD_REQUEST_COMMAND:
118 case CMD_REQUEST_USAGE:
120 print("\nUsage:^3 sv_cmd unban banid");
121 print(" Where 'banid' is the ID of the ban of which to remove.\n");
127 /* use this when creating a new command, making sure to place it in alphabetical order... also,
128 ** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION!
129 void BanCommand_(float request)
133 case CMD_REQUEST_COMMAND:
140 case CMD_REQUEST_USAGE:
142 print("\nUsage:^3 sv_cmd ");
143 print(" No arguments required.\n");
151 // ==================================
152 // Macro system for server commands
153 // ==================================
155 // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
156 #define BAN_COMMANDS(request,arguments,command) \
157 BAN_COMMAND("ban", BanCommand_ban(request, arguments, command), "Ban an IP address or a range of addresses (like 1.2.3)") \
158 BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \
159 BAN_COMMAND("kickban", BanCommand_kickban(request, arguments, command), "Disconnect a client and ban it at the same time") \
160 BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
163 void BanCommand_macro_help()
165 #define BAN_COMMAND(name,function,description) \
166 { print(" ^2", name, "^7: ", description, "\n"); }
168 BAN_COMMANDS(0, 0, "")
174 float BanCommand_macro_command(float argc, string command)
176 #define BAN_COMMAND(name,function,description) \
177 { if(name == strtolower(argv(0))) { function; return TRUE; } }
179 BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
185 float BanCommand_macro_usage(float argc)
187 #define BAN_COMMAND(name,function,description) \
188 { if(name == strtolower(argv(1))) { function; return TRUE; } }
190 BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "")
196 void BanCommand_macro_write_aliases(float fh)
198 #define BAN_COMMAND(name,function,description) \
199 { CMD_Write_Alias("qc_cmd_sv", name, description); }
201 BAN_COMMANDS(0, 0, "")
207 float BanCommand(string command)
209 float argc = tokenize_console(command);
211 // Guide for working with argc arguments by example:
212 // argc: 1 - 2 - 3 - 4
213 // argv: 0 - 1 - 2 - 3
214 // cmd vote - master - login - password
216 if(BanCommand_macro_command(argc, command)) // continue as usual and scan for normal commands
218 return TRUE; // handled by one of the above GenericCommand_* functions