AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ban_commandscript Class Reference
Inheritance diagram for ban_commandscript:
CommandScript ScriptObject

Public Member Functions

 ban_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static bool HandleBanAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanAccountByCharCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanHelper (BanMode mode, char const *args, ChatHandler *handler)
 
static bool HandleBanInfoAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanInfoHelper (uint32 accountId, char const *accountName, ChatHandler *handler)
 
static bool HandleBanInfoCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanInfoIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanListAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanListHelper (PreparedQueryResult result, ChatHandler *handler)
 
static bool HandleBanListCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanListIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanAccountByCharCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanHelper (BanMode mode, char const *args, ChatHandler *handler)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ ban_commandscript()

ban_commandscript::ban_commandscript ( )
inline
47: CommandScript("ban_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable ban_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

50 {
51 static ChatCommandTable unbanCommandTable =
52 {
57 };
58
59 static ChatCommandTable banlistCommandTable =
60 {
64 };
65
66 static ChatCommandTable baninfoCommandTable =
67 {
71 };
72
73 static ChatCommandTable banCommandTable =
74 {
79 };
80
81 static ChatCommandTable commandTable =
82 {
83 { "ban", banCommandTable },
84 { "baninfo", baninfoCommandTable },
85 { "banlist", banlistCommandTable },
86 { "unban", unbanCommandTable }
87 };
88
89 return commandTable;
90 }
static bool HandleBanAccountByCharCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:148
static bool HandleUnBanIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:690
static bool HandleUnBanAccountByCharCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:685
static bool HandleBanInfoAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:255
static bool HandleBanListIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:582
static bool HandleBanIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:153
static bool HandleBanListCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:499
static bool HandleBanInfoIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:356
static bool HandleBanListAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:394
static bool HandleBanCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:97
static bool HandleBanInfoCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:308
static bool HandleUnBanAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:654
static bool HandleBanAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:92
static bool HandleUnBanCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:659
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_BANINFO_IP
Definition RBAC.h:148
@ RBAC_PERM_COMMAND_BANINFO_ACCOUNT
Definition RBAC.h:146
@ RBAC_PERM_COMMAND_BANINFO_CHARACTER
Definition RBAC.h:147
@ RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT
Definition RBAC.h:145
@ RBAC_PERM_COMMAND_UNBAN_CHARACTER
Definition RBAC.h:153
@ RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT
Definition RBAC.h:155
@ RBAC_PERM_COMMAND_BAN_CHARACTER
Definition RBAC.h:143
@ RBAC_PERM_COMMAND_BANLIST_ACCOUNT
Definition RBAC.h:149
@ RBAC_PERM_COMMAND_BAN_IP
Definition RBAC.h:144
@ RBAC_PERM_COMMAND_BANLIST_CHARACTER
Definition RBAC.h:150
@ RBAC_PERM_COMMAND_BANLIST_IP
Definition RBAC.h:151
@ RBAC_PERM_COMMAND_BAN_ACCOUNT
Definition RBAC.h:142
@ RBAC_PERM_COMMAND_UNBAN_ACCOUNT
Definition RBAC.h:152
@ RBAC_PERM_COMMAND_UNBAN_IP
Definition RBAC.h:154

References HandleBanAccountByCharCommand(), HandleBanAccountCommand(), HandleBanCharacterCommand(), HandleBanInfoAccountCommand(), HandleBanInfoCharacterCommand(), HandleBanInfoIPCommand(), HandleBanIPCommand(), HandleBanListAccountCommand(), HandleBanListCharacterCommand(), HandleBanListIPCommand(), HandleUnBanAccountByCharCommand(), HandleUnBanAccountCommand(), HandleUnBanCharacterCommand(), HandleUnBanIPCommand(), rbac::RBAC_PERM_COMMAND_BAN_ACCOUNT, rbac::RBAC_PERM_COMMAND_BAN_CHARACTER, rbac::RBAC_PERM_COMMAND_BAN_IP, rbac::RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT, rbac::RBAC_PERM_COMMAND_BANINFO_ACCOUNT, rbac::RBAC_PERM_COMMAND_BANINFO_CHARACTER, rbac::RBAC_PERM_COMMAND_BANINFO_IP, rbac::RBAC_PERM_COMMAND_BANLIST_ACCOUNT, rbac::RBAC_PERM_COMMAND_BANLIST_CHARACTER, rbac::RBAC_PERM_COMMAND_BANLIST_IP, rbac::RBAC_PERM_COMMAND_UNBAN_ACCOUNT, rbac::RBAC_PERM_COMMAND_UNBAN_CHARACTER, rbac::RBAC_PERM_COMMAND_UNBAN_IP, and rbac::RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT.

◆ HandleBanAccountByCharCommand()

static bool ban_commandscript::HandleBanAccountByCharCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
149 {
150 return HandleBanHelper(BAN_CHARACTER, args, handler);
151 }
static bool HandleBanHelper(BanMode mode, char const *args, ChatHandler *handler)
Definition cs_ban.cpp:158
@ BAN_CHARACTER
Definition cs_ban.cpp:34

References BAN_CHARACTER, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanAccountCommand()

static bool ban_commandscript::HandleBanAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
93 {
94 return HandleBanHelper(BAN_ACCOUNT, args, handler);
95 }
@ BAN_ACCOUNT
Definition cs_ban.cpp:33

References BAN_ACCOUNT, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanCharacterCommand()

static bool ban_commandscript::HandleBanCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
98 {
99 if (!*args)
100 return false;
101
102 char* nameStr = strtok((char*)args, " ");
103 if (!nameStr)
104 return false;
105
106 std::string name = nameStr;
107
108 char* durationStr = strtok(nullptr, " ");
109 if (!durationStr || !atoi(durationStr))
110 return false;
111
112 char* reasonStr = strtok(nullptr, "");
113 if (!reasonStr)
114 return false;
115
116 if (!normalizePlayerName(name))
117 {
119 return false;
120 }
121
122 switch (sBan->BanCharacter(name, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : ""))
123 {
124 case BAN_SUCCESS:
125 if (atoi(durationStr) > 0)
126 {
127 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
128 handler->PSendSysMessage(LANG_BAN_YOUBANNED, name, secsToTimeString(TimeStringToSecs(durationStr), true), reasonStr);
129 }
130 else
131 {
132 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
133 handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, name, reasonStr);
134 }
135 break;
136 case BAN_NOTFOUND:
137 {
138 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "character", name);
139 return false;
140 }
141 default:
142 break;
143 }
144
145 return true;
146 }
@ BAN_NOTFOUND
Definition BanMgr.h:28
@ BAN_SUCCESS
Definition BanMgr.h:26
#define sBan
Definition BanMgr.h:48
@ LANG_BAN_NOTFOUND
Definition Language.h:446
@ LANG_BAN_YOUPERMBANNED
Definition Language.h:445
@ LANG_BAN_YOUBANNED
Definition Language.h:444
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:548
bool normalizePlayerName(std::string &name)
Definition ObjectMgr.cpp:209
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
uint32 TimeStringToSecs(const std::string &timestring)
Definition Util.cpp:163
@ CONFIG_SHOW_BAN_IN_WORLD
Definition WorldConfig.h:90
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:224
std::string const & GetPlayerName() const
Definition WorldSession.cpp:246
#define sWorld
Definition World.h:317

References BAN_NOTFOUND, BAN_SUCCESS, CONFIG_SHOW_BAN_IN_WORLD, WorldSession::GetPlayerName(), ChatHandler::GetSession(), LANG_BAN_NOTFOUND, LANG_BAN_YOUBANNED, LANG_BAN_YOUPERMBANNED, LANG_PLAYER_NOT_FOUND, normalizePlayerName(), ChatHandler::PSendSysMessage(), sBan, secsToTimeString(), ChatHandler::SendErrorMessage(), sWorld, and TimeStringToSecs().

Referenced by GetCommands().

◆ HandleBanHelper()

static bool ban_commandscript::HandleBanHelper ( BanMode  mode,
char const *  args,
ChatHandler handler 
)
inlinestatic
159 {
160 if (!*args)
161 return false;
162
163 char* cnameOrIP = strtok((char*)args, " ");
164 if (!cnameOrIP)
165 return false;
166
167 std::string nameOrIP = cnameOrIP;
168
169 char* durationStr = strtok(nullptr, " ");
170 if (!durationStr || !atoi(durationStr))
171 return false;
172
173 char* reasonStr = strtok(nullptr, "");
174 if (!reasonStr)
175 return false;
176
177 switch (mode)
178 {
179 case BAN_ACCOUNT:
180 if (!Utf8ToUpperOnlyLatin(nameOrIP))
181 {
182 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, nameOrIP);
183 return false;
184 }
185 break;
186 case BAN_CHARACTER:
187 if (!normalizePlayerName(nameOrIP))
188 {
190 return false;
191 }
192 break;
193 case BAN_IP:
194 if (!IsIPAddress(nameOrIP.c_str()))
195 return false;
196 break;
197 }
198
199 BanReturn banReturn;
200
201 switch (mode)
202 {
203 case BAN_ACCOUNT:
204 banReturn = sBan->BanAccount(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Console");
205 break;
206 case BAN_CHARACTER:
207 banReturn = sBan->BanAccountByPlayerName(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Console");
208 break;
209 case BAN_IP:
210 default:
211 banReturn = sBan->BanIP(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Console");
212 break;
213 }
214
215 switch (banReturn)
216 {
217 case BAN_SUCCESS:
218 if (atoi(durationStr) > 0)
219 {
220 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
221 handler->PSendSysMessage(LANG_BAN_YOUBANNED, nameOrIP, secsToTimeString(TimeStringToSecs(durationStr), true), reasonStr);
222 }
223 else
224 {
225 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
226 handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, nameOrIP, reasonStr);
227 }
228 break;
229 case BAN_SYNTAX_ERROR:
230 return false;
231 case BAN_NOTFOUND:
232 switch (mode)
233 {
234 default:
235 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "account", nameOrIP);
236 break;
237 case BAN_CHARACTER:
238 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "character", nameOrIP);
239 break;
240 case BAN_IP:
241 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "ip", nameOrIP);
242 break;
243 }
244 return false;
246 handler->PSendSysMessage("Unsuccessful! A longer ban is already present on this account!");
247 break;
248 default:
249 break;
250 }
251
252 return true;
253 }
BanReturn
Ban function return codes.
Definition BanMgr.h:25
@ BAN_SYNTAX_ERROR
Definition BanMgr.h:27
@ BAN_LONGER_EXISTS
Definition BanMgr.h:29
@ LANG_ACCOUNT_NOT_EXIST
Definition Language.h:451
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
Definition Util.cpp:532
bool IsIPAddress(char const *ipaddress)
Check if the string is a valid ip address representation.
Definition Util.cpp:205
@ BAN_IP
Definition cs_ban.cpp:35

References BAN_ACCOUNT, BAN_CHARACTER, BAN_IP, BAN_LONGER_EXISTS, BAN_NOTFOUND, BAN_SUCCESS, BAN_SYNTAX_ERROR, CONFIG_SHOW_BAN_IN_WORLD, WorldSession::GetPlayerName(), ChatHandler::GetSession(), IsIPAddress(), LANG_ACCOUNT_NOT_EXIST, LANG_BAN_NOTFOUND, LANG_BAN_YOUBANNED, LANG_BAN_YOUPERMBANNED, LANG_PLAYER_NOT_FOUND, normalizePlayerName(), ChatHandler::PSendSysMessage(), sBan, secsToTimeString(), ChatHandler::SendErrorMessage(), sWorld, TimeStringToSecs(), and Utf8ToUpperOnlyLatin().

Referenced by HandleBanAccountByCharCommand(), HandleBanAccountCommand(), and HandleBanIPCommand().

◆ HandleBanInfoAccountCommand()

static bool ban_commandscript::HandleBanInfoAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
256 {
257 if (!*args)
258 return false;
259
260 char* nameStr = strtok((char*)args, "");
261 if (!nameStr)
262 return false;
263
264 std::string accountName = nameStr;
265 if (!Utf8ToUpperOnlyLatin(accountName))
266 {
267 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
268 return false;
269 }
270
271 uint32 accountId = AccountMgr::GetId(accountName);
272 if (!accountId)
273 {
274 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
275 return true;
276 }
277
278 return HandleBanInfoHelper(accountId, accountName.c_str(), handler);
279 }
std::uint32_t uint32
Definition Define.h:107
static uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:248
static bool HandleBanInfoHelper(uint32 accountId, char const *accountName, ChatHandler *handler)
Definition cs_ban.cpp:281

References AccountMgr::GetId(), HandleBanInfoHelper(), LANG_ACCOUNT_NOT_EXIST, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), and Utf8ToUpperOnlyLatin().

Referenced by GetCommands().

◆ HandleBanInfoCharacterCommand()

static bool ban_commandscript::HandleBanInfoCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
309 {
310 if (!*args)
311 return false;
312
313 Player* target = ObjectAccessor::FindPlayerByName(args, false);
314 ObjectGuid targetGuid;
315 std::string name(args);
316
317 if (!target)
318 {
319 targetGuid = sCharacterCache->GetCharacterGuidByName(name);
320 if (!targetGuid)
321 {
323 return false;
324 }
325 }
326 else
327 targetGuid = target->GetGUID();
328
330 stmt->SetData(0, targetGuid.GetCounter());
331
332 PreparedQueryResult result = CharacterDatabase.Query(stmt);
333 if (!result)
334 {
336 return true;
337 }
338
340 do
341 {
342 Field* fields = result->Fetch();
343 time_t unbanDate = time_t(fields[3].Get<uint32>());
344 bool active = false;
345 if (fields[2].Get<uint8>() && (!fields[1].Get<uint32>() || unbanDate >= GameTime::GetGameTime().count()))
346 active = true;
347 bool permanent = (fields[1].Get<uint32>() == uint32(0));
348 std::string banTime = permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].Get<uint64>(), true);
350 fields[0].Get<std::string>(), banTime, active ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO), fields[4].Get<std::string>(), fields[5].Get<std::string>());
351 } while (result->NextRow());
352
353 return true;
354 }
#define sCharacterCache
Definition CharacterCache.h:83
@ CHAR_SEL_BANINFO
Definition CharacterDatabase.h:44
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
@ LANG_YES
Definition Language.h:460
@ LANG_BANINFO_INFINITE
Definition Language.h:458
@ LANG_BANINFO_NOCHARACTER
Definition Language.h:453
@ LANG_BANINFO_BANHISTORY
Definition Language.h:456
@ LANG_CHAR_NOT_BANNED
Definition Language.h:937
@ LANG_NO
Definition Language.h:461
@ LANG_BANINFO_HISTORYENTRY
Definition Language.h:457
virtual std::string GetAcoreString(uint32 entry) const
Definition Chat.cpp:42
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Definition ObjectGuid.h:118
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
Definition Player.h:1084
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
AC_GAME_API std::string GetAcoreString(ChatHandler const *handler, AcoreStrings which)
Definition ChatCommandHelpers.cpp:27
Seconds GetGameTime()
Definition GameTime.cpp:38
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition ObjectAccessor.cpp:271
STL namespace.

References CHAR_SEL_BANINFO, CharacterDatabase, ObjectAccessor::FindPlayerByName(), Field::Get(), ChatHandler::GetAcoreString(), ObjectGuid::GetCounter(), GameTime::GetGameTime(), Object::GetGUID(), LANG_BANINFO_BANHISTORY, LANG_BANINFO_HISTORYENTRY, LANG_BANINFO_INFINITE, LANG_BANINFO_NOCHARACTER, LANG_CHAR_NOT_BANNED, LANG_NO, LANG_YES, ChatHandler::PSendSysMessage(), sCharacterCache, secsToTimeString(), and PreparedStatementBase::SetData().

Referenced by GetCommands().

◆ HandleBanInfoHelper()

static bool ban_commandscript::HandleBanInfoHelper ( uint32  accountId,
char const *  accountName,
ChatHandler handler 
)
inlinestatic
282 {
283 QueryResult result = LoginDatabase.Query("SELECT FROM_UNIXTIME(bandate, '%Y-%m-%d..%H:%i:%s') as bandate, unbandate-bandate, active, unbandate, banreason, bannedby FROM account_banned WHERE id = '{}' ORDER BY bandate ASC", accountId);
284 if (!result)
285 {
286 handler->PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountName);
287 return true;
288 }
289
290 handler->PSendSysMessage(LANG_BANINFO_BANHISTORY, accountName);
291 do
292 {
293 Field* fields = result->Fetch();
294
295 time_t unbanDate = time_t(fields[3].Get<uint32>());
296 bool active = false;
297 if (fields[2].Get<bool>() && (fields[1].Get<uint64>() == uint64(0) || unbanDate >= GameTime::GetGameTime().count()))
298 active = true;
299 bool permanent = (fields[1].Get<uint64>() == uint64(0));
300 std::string banTime = permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].Get<uint64>(), true);
302 fields[0].Get<std::string>(), banTime, active ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO), fields[4].Get<std::string>(), fields[5].Get<std::string>());
303 } while (result->NextRow());
304
305 return true;
306 }
std::shared_ptr< ResultSet > QueryResult
Definition DatabaseEnvFwd.h:27
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition DatabaseEnv.cpp:22
std::uint64_t uint64
Definition Define.h:106
@ LANG_BANINFO_NOACCOUNTBAN
Definition Language.h:455

References Field::Get(), ChatHandler::GetAcoreString(), GameTime::GetGameTime(), LANG_BANINFO_BANHISTORY, LANG_BANINFO_HISTORYENTRY, LANG_BANINFO_INFINITE, LANG_BANINFO_NOACCOUNTBAN, LANG_NO, LANG_YES, LoginDatabase, ChatHandler::PSendSysMessage(), and secsToTimeString().

Referenced by HandleBanInfoAccountCommand().

◆ HandleBanInfoIPCommand()

static bool ban_commandscript::HandleBanInfoIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
357 {
358 if (!*args)
359 return false;
360
361 char* ipStr = strtok((char*)args, "");
362 if (!ipStr)
363 return false;
364
365 if (!IsIPAddress(ipStr))
366 return false;
367
368 std::string IP = ipStr;
369
370 LoginDatabase.EscapeString(IP);
371 QueryResult result = LoginDatabase.Query("\
372 SELECT \
373 ip, FROM_UNIXTIME(bandate, '%Y-%m-%d %H:%i:%s'), FROM_UNIXTIME(unbandate, '%Y-%m-%d %H:%i:%s'), \
374 IF (unbandate > UNIX_TIMESTAMP(), unbandate - UNIX_TIMESTAMP(), 0) AS timeRemaining, \
375 banreason, bannedby, unbandate - bandate = 0 AS permanent \
376 FROM ip_banned \
377 WHERE ip = '{}' \
378 ", IP);
379 if (!result)
380 {
382 return true;
383 }
384
385 Field* fields = result->Fetch();
386 bool permanent = fields[6].Get<uint64>() == 1;
388 fields[0].Get<std::string>(), fields[1].Get<std::string>(), permanent ? handler->GetAcoreString(LANG_BANINFO_NEVER) : fields[2].Get<std::string>(),
389 permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[3].Get<uint64>(), true), fields[4].Get<std::string>(), fields[5].Get<std::string>());
390
391 return true;
392 }
@ LANG_BANINFO_IPENTRY
Definition Language.h:462
@ LANG_BANINFO_NEVER
Definition Language.h:459
@ LANG_BANINFO_NOIP
Definition Language.h:454

References Field::Get(), ChatHandler::GetAcoreString(), IsIPAddress(), LANG_BANINFO_INFINITE, LANG_BANINFO_IPENTRY, LANG_BANINFO_NEVER, LANG_BANINFO_NOIP, LoginDatabase, ChatHandler::PSendSysMessage(), and secsToTimeString().

Referenced by GetCommands().

◆ HandleBanIPCommand()

static bool ban_commandscript::HandleBanIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
154 {
155 return HandleBanHelper(BAN_IP, args, handler);
156 }

References BAN_IP, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanListAccountCommand()

static bool ban_commandscript::HandleBanListAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
395 {
397 LoginDatabase.Execute(stmt);
398
399 char* filterStr = strtok((char*)args, " ");
400 std::string filter = filterStr ? filterStr : "";
401
402 PreparedQueryResult result;
403
404 if (filter.empty())
405 {
407 result = LoginDatabase.Query(stmt2);
408 }
409 else
410 {
412 stmt2->SetData(0, filter);
413 result = LoginDatabase.Query(stmt2);
414 }
415
416 if (!result)
417 {
419 return true;
420 }
421
422 return HandleBanListHelper(result, handler);
423 }
@ LANG_BANLIST_NOACCOUNT
Definition Language.h:465
@ LOGIN_DEL_EXPIRED_IP_BANS
Definition LoginDatabase.h:32
@ LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME
Definition LoginDatabase.h:39
@ LOGIN_SEL_ACCOUNT_BANNED_ALL
Definition LoginDatabase.h:38
static bool HandleBanListHelper(PreparedQueryResult result, ChatHandler *handler)
Definition cs_ban.cpp:425

References HandleBanListHelper(), LANG_BANLIST_NOACCOUNT, LOGIN_DEL_EXPIRED_IP_BANS, LOGIN_SEL_ACCOUNT_BANNED_ALL, LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME, LoginDatabase, ChatHandler::PSendSysMessage(), and PreparedStatementBase::SetData().

Referenced by GetCommands().

◆ HandleBanListCharacterCommand()

static bool ban_commandscript::HandleBanListCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
500 {
501 if (!*args)
502 return false;
503
504 char* filterStr = strtok((char*)args, " ");
505 if (!filterStr)
506 return false;
507
508 std::string filter(filterStr);
510 stmt->SetData(0, filter);
511 PreparedQueryResult result = CharacterDatabase.Query(stmt);
512 if (!result)
513 {
515 return true;
516 }
517
519
520 // Chat short output
521 if (handler->GetSession())
522 {
523 do
524 {
525 Field* fields = result->Fetch();
527 stmt2->SetData(0, fields[0].Get<uint32>());
528
529 PreparedQueryResult banResult = CharacterDatabase.Query(stmt2);
530 if (banResult)
531 handler->PSendSysMessage("{}", (*banResult)[0].Get<std::string>());
532 } while (result->NextRow());
533 }
534 // Console wide output
535 else
536 {
538 handler->SendSysMessage(" =============================================================================== ");
540 do
541 {
542 handler->SendSysMessage("-------------------------------------------------------------------------------");
543
544 Field* fields = result->Fetch();
545
546 std::string char_name = fields[1].Get<std::string>();
547
549 stmt2->SetData(0, fields[0].Get<uint32>());
550
551 PreparedQueryResult banInfo = CharacterDatabase.Query(stmt2);
552 if (banInfo)
553 {
554 Field* banFields = banInfo->Fetch();
555 do
556 {
557 tm tmBan = Acore::Time::TimeBreakdown(banFields[0].Get<uint32>());
558
559 if (banFields[0].Get<uint32>() == banFields[1].Get<uint32>())
560 {
561 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}| permanent |{:<15.15}|{:<15.15}|",
562 char_name, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
563 banFields[2].Get<std::string>(), banFields[3].Get<std::string>());
564 }
565 else
566 {
567 tm tmUnban = Acore::Time::TimeBreakdown(banFields[1].Get<uint32>());
568 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}|{:02}-{:02}-{:02} {:02}:{:02}|{:<15.15}|{:<15.15}|",
569 char_name, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
570 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
571 banFields[2].Get<std::string>(), banFields[3].Get<std::string>());
572 }
573 } while (banInfo->NextRow());
574 }
575 } while (result->NextRow());
576 handler->SendSysMessage(" =============================================================================== ");
577 }
578
579 return true;
580 }
@ CHAR_SEL_BANNED_NAME
Definition CharacterDatabase.h:47
@ CHAR_SEL_BANINFO_LIST
Definition CharacterDatabase.h:46
@ CHAR_SEL_GUID_BY_NAME_FILTER
Definition CharacterDatabase.h:45
@ LANG_BANLIST_CHARACTERS_HEADER
Definition Language.h:934
@ LANG_BANLIST_MATCHINGCHARACTER
Definition Language.h:932
@ LANG_BANLIST_NOCHARACTER
Definition Language.h:466
@ LANG_BANLIST_CHARACTERS
Definition Language.h:933
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:168
AC_COMMON_API std::tm TimeBreakdown(time_t t=0)
Definition Timer.cpp:233

References CHAR_SEL_BANINFO_LIST, CHAR_SEL_BANNED_NAME, CHAR_SEL_GUID_BY_NAME_FILTER, CharacterDatabase, Field::Get(), ChatHandler::GetSession(), LANG_BANLIST_CHARACTERS, LANG_BANLIST_CHARACTERS_HEADER, LANG_BANLIST_MATCHINGCHARACTER, LANG_BANLIST_NOCHARACTER, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), and Acore::Time::TimeBreakdown().

Referenced by GetCommands().

◆ HandleBanListHelper()

static bool ban_commandscript::HandleBanListHelper ( PreparedQueryResult  result,
ChatHandler handler 
)
inlinestatic
426 {
428
429 // Chat short output
430 if (handler->GetSession())
431 {
432 do
433 {
434 Field* fields = result->Fetch();
435 uint32 accountid = fields[0].Get<uint32>();
436
437 QueryResult banResult = LoginDatabase.Query("SELECT account.username FROM account, account_banned WHERE account_banned.id='{}' AND account_banned.id=account.id", accountid);
438 if (banResult)
439 {
440 Field* fields2 = banResult->Fetch();
441 handler->PSendSysMessage("{}", fields2[0].Get<std::string>());
442 }
443 } while (result->NextRow());
444 }
445 // Console wide output
446 else
447 {
449 handler->SendSysMessage(" ===============================================================================");
451 do
452 {
453 handler->SendSysMessage("-------------------------------------------------------------------------------");
454 Field* fields = result->Fetch();
455 uint32 accountId = fields[0].Get<uint32>();
456
457 std::string accountName;
458
459 // "account" case, name can be get in same query
460 if (result->GetFieldCount() > 1)
461 accountName = fields[1].Get<std::string>();
462 // "character" case, name need extract from another DB
463 else
464 AccountMgr::GetName(accountId, accountName);
465
466 // No SQL injection. id is uint32.
467 QueryResult banInfo = LoginDatabase.Query("SELECT bandate, unbandate, bannedby, banreason FROM account_banned WHERE id = {} ORDER BY unbandate", accountId);
468 if (banInfo)
469 {
470 Field* fields2 = banInfo->Fetch();
471 do
472 {
473 tm tmBan = Acore::Time::TimeBreakdown(fields2[0].Get<uint32>());
474
475 if (fields2[0].Get<uint32>() == fields2[1].Get<uint32>())
476 {
477 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}| permanent |{:<15.15}|{:<15.15}|",
478 accountName, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
479 fields2[2].Get<std::string>(), fields2[3].Get<std::string>());
480 }
481 else
482 {
483 tm tmUnban = Acore::Time::TimeBreakdown(fields2[1].Get<uint32>());
484 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}|{:02}-{:02}-{:02} {:02}:{:02}|{:<15.15}|{:<15.15}|",
485 accountName, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
486 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
487 fields2[2].Get<std::string>(), fields2[3].Get<std::string>());
488 }
489 } while (banInfo->NextRow());
490 }
491 } while (result->NextRow());
492
493 handler->SendSysMessage(" ===============================================================================");
494 }
495
496 return true;
497 }
@ LANG_BANLIST_MATCHINGACCOUNT
Definition Language.h:468
@ LANG_BANLIST_ACCOUNTS_HEADER
Definition Language.h:665
@ LANG_BANLIST_ACCOUNTS
Definition Language.h:664
static bool GetName(uint32 accountId, std::string &name)
Definition AccountMgr.cpp:276

References Field::Get(), AccountMgr::GetName(), ChatHandler::GetSession(), LANG_BANLIST_ACCOUNTS, LANG_BANLIST_ACCOUNTS_HEADER, LANG_BANLIST_MATCHINGACCOUNT, LoginDatabase, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), and Acore::Time::TimeBreakdown().

Referenced by HandleBanListAccountCommand().

◆ HandleBanListIPCommand()

static bool ban_commandscript::HandleBanListIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
583 {
585 LoginDatabase.Execute(stmt);
586
587 char* filterStr = strtok((char*)args, " ");
588 std::string filter = filterStr ? filterStr : "";
589 LoginDatabase.EscapeString(filter);
590
591 PreparedQueryResult result;
592
593 if (filter.empty())
594 {
596 result = LoginDatabase.Query(stmt2);
597 }
598 else
599 {
601 stmt2->SetData(0, filter);
602 result = LoginDatabase.Query(stmt2);
603 }
604
605 if (!result)
606 {
608 return true;
609 }
610
612 // Chat short output
613 if (handler->GetSession())
614 {
615 do
616 {
617 Field* fields = result->Fetch();
618 handler->PSendSysMessage("{}", fields[0].Get<std::string>());
619 } while (result->NextRow());
620 }
621 // Console wide output
622 else
623 {
625 handler->SendSysMessage(" ===============================================================================");
627 do
628 {
629 handler->SendSysMessage("-------------------------------------------------------------------------------");
630 Field* fields = result->Fetch();
631 tm tmBan = Acore::Time::TimeBreakdown(fields[1].Get<uint32>());
632 if (fields[1].Get<uint32>() == fields[2].Get<uint32>())
633 {
634 handler->PSendSysMessage("{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}| permanent |{:<15.15}|{:<15.15}|",
635 fields[0].Get<std::string>(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
636 fields[3].Get<std::string>(), fields[4].Get<std::string>());
637 }
638 else
639 {
640 tm tmUnban = Acore::Time::TimeBreakdown(fields[2].Get<uint32>());
641 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}|{:02}-{:02}-{:02} {:02}:{:02}|{:<15.15}|{:<15.15}|",
642 fields[0].Get<std::string>(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
643 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
644 fields[3].Get<std::string>(), fields[4].Get<std::string>());
645 }
646 } while (result->NextRow());
647
648 handler->SendSysMessage(" ===============================================================================");
649 }
650
651 return true;
652 }
@ LANG_BANLIST_IPS_HEADER
Definition Language.h:667
@ LANG_BANLIST_MATCHINGIP
Definition Language.h:467
@ LANG_BANLIST_NOIP
Definition Language.h:464
@ LANG_BANLIST_IPS
Definition Language.h:666
@ LOGIN_SEL_IP_BANNED_BY_IP
Definition LoginDatabase.h:58
@ LOGIN_SEL_IP_BANNED_ALL
Definition LoginDatabase.h:57

References Field::Get(), ChatHandler::GetSession(), LANG_BANLIST_IPS, LANG_BANLIST_IPS_HEADER, LANG_BANLIST_MATCHINGIP, LANG_BANLIST_NOIP, LOGIN_DEL_EXPIRED_IP_BANS, LOGIN_SEL_IP_BANNED_ALL, LOGIN_SEL_IP_BANNED_BY_IP, LoginDatabase, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), and Acore::Time::TimeBreakdown().

Referenced by GetCommands().

◆ HandleUnBanAccountByCharCommand()

static bool ban_commandscript::HandleUnBanAccountByCharCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
686 {
687 return HandleUnBanHelper(BAN_CHARACTER, args, handler);
688 }
static bool HandleUnBanHelper(BanMode mode, char const *args, ChatHandler *handler)
Definition cs_ban.cpp:695

References BAN_CHARACTER, and HandleUnBanHelper().

Referenced by GetCommands().

◆ HandleUnBanAccountCommand()

static bool ban_commandscript::HandleUnBanAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
655 {
656 return HandleUnBanHelper(BAN_ACCOUNT, args, handler);
657 }

References BAN_ACCOUNT, and HandleUnBanHelper().

Referenced by GetCommands().

◆ HandleUnBanCharacterCommand()

static bool ban_commandscript::HandleUnBanCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
660 {
661 if (!*args)
662 return false;
663
664 char* nameStr = strtok((char*)args, " ");
665 if (!nameStr)
666 return false;
667
668 std::string CharacterName = nameStr;
669
670 if (!normalizePlayerName(CharacterName))
671 {
673 return false;
674 }
675
676 if (!sBan->RemoveBanCharacter(CharacterName))
677 {
679 return false;
680 }
681
682 return true;
683 }

References LANG_PLAYER_NOT_FOUND, normalizePlayerName(), sBan, and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleUnBanHelper()

static bool ban_commandscript::HandleUnBanHelper ( BanMode  mode,
char const *  args,
ChatHandler handler 
)
inlinestatic
696 {
697 if (!*args)
698 return false;
699
700 char* nameOrIPStr = strtok((char*)args, " ");
701 if (!nameOrIPStr)
702 return false;
703
704 std::string nameOrIP = nameOrIPStr;
705
706 switch (mode)
707 {
708 case BAN_ACCOUNT:
709 if (!Utf8ToUpperOnlyLatin(nameOrIP))
710 {
711 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, nameOrIP);
712 return false;
713 }
714 break;
715 case BAN_CHARACTER:
716 if (!normalizePlayerName(nameOrIP))
717 {
719 return false;
720 }
721 break;
722 case BAN_IP:
723 if (!IsIPAddress(nameOrIP.c_str()))
724 return false;
725 break;
726 }
727
728 switch (mode)
729 {
730 case BAN_ACCOUNT:
731 if (sBan->RemoveBanAccount(nameOrIP))
732 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP);
733 else
734 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP);
735 break;
736 case BAN_CHARACTER:
737 if (sBan->RemoveBanAccountByPlayerName(nameOrIP))
738 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP);
739 else
740 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP);
741 break;
742 case BAN_IP:
743 if (sBan->RemoveBanIP(nameOrIP))
744 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP);
745 else
746 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP);
747 break;
748 default:
749 break;
750 }
751
752 return true;
753 }
@ LANG_UNBAN_UNBANNED
Definition Language.h:448
@ LANG_UNBAN_ERROR
Definition Language.h:449

References BAN_ACCOUNT, BAN_CHARACTER, BAN_IP, IsIPAddress(), LANG_ACCOUNT_NOT_EXIST, LANG_PLAYER_NOT_FOUND, LANG_UNBAN_ERROR, LANG_UNBAN_UNBANNED, normalizePlayerName(), ChatHandler::PSendSysMessage(), sBan, ChatHandler::SendErrorMessage(), and Utf8ToUpperOnlyLatin().

Referenced by HandleUnBanAccountByCharCommand(), HandleUnBanAccountCommand(), and HandleUnBanIPCommand().

◆ HandleUnBanIPCommand()

static bool ban_commandscript::HandleUnBanIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
691 {
692 return HandleUnBanHelper(BAN_IP, args, handler);
693 }

References BAN_IP, and HandleUnBanHelper().

Referenced by GetCommands().


The documentation for this class was generated from the following file: